Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)
Transkript
Vybrané partie z jazyka Java
Spring a Enterprise JavaBeans (EJB)
Michal Papež
Spring & EJB
Program:
K čemu je to dobré, historie, odlišnosti
Spring 2.5
EJB 3.0
K čemu jsou? 1
Vývoj velkých podnikových řešení
Znovupoužitelnost
Volné vazby
Transakce
Deklarativní rozhraní, protokoly
Persistence
Bezpečnost
Distribuované aplikace, výpočty
K čemu jsou? 2
Třívrstvá architektura
IS / datová
Legacy systémy
zprávy
Aplikační:
deklarativní
Presentační / klientská
Business nebo process logic
”tencí” klienti
Services, SOA
Vývoj – starší EJB
EJB před verzí 3
Náročný vývoj – příliš složité
Robusní, komplexní řešení
Pro největší aplikace
Problémy, např. s testováním
1998 →
Standard
IBM (WebSphere), BEA (Weblogic), Oracle (JDeveloper)
Vývoj Spring
Spring
Rod Johnson, 2002
Reakce na EJB
Snahy
Jednoduššeji
Standardní JavaBeans
Lehčí řešení
Není třeba vše implementovat, stačí dobrá integrace pro stávající (otevřené) frameworky
Interoperabilita s EJB
Vývoj EJB 3
EJB 3
Sun Microsystems 20032006
Inspirováno Springem
Jednodušší
Nejsou třeba implementovat některé interface
Ubyly zbytečné callback metody xy...
Nahrazeno anotacemi
Dříve prosyceno java.rmi.remoteException
Použitelnější
Dependency Injection (viz dále)
Context – ne úplně jako Spring (mix s lookup)
Spring – komponenty 1
Core Container
Spring Context
BeanFactory – IOC viz dále
Konfigurační soubor .xml
AspectOriented (AOP)
Např. transakce
Aplikace instruována anotacemi
DAO (Data Access Object)
Abstrakce nad přístupem k DB (JDBC, … )
Spring – komponenty 2
Object Relational (ORM)
Web (context) module
JDO, Hibernate, OJB and iBatis SQL Maps
Jakarta Struts, JSF and webworks
MVC Framework
Web aplikace
pohledy: JSP, Velocity, Tiles, PDF, XLS
Spring Architektura
Inversion of Control (IoC)
Objekty se nepropojují v kódu, ale v konfiguračním souboru
Objekt není zodpovědný za hledání svých závislostí
Závislosti nadeklarovány
Kontejner je ”dodá” nastaví konkrétní objekty pomocí setterů
Obvyklá jmenná konvence setXxx()
Property
namebean.java
public class nameBean { String name; public void setName(String a) { name = a; } context.xml
<bean id="bean1" class="nameBean"> <property name="name" > <value>Tom</value> </property> </bean>
public String getName() { return name; } }
Konstruktor
namebean.java
public class nameBean { String name; public nameBean(String a) { name = a; } }
context.xml
<bean id="bean1" class="nameBean"> <constructorarg> <value>My Value</value> </constructorarg> </bean>
Obdobně Init() metoda
Ukázka – jednoduchá konzolová
Provázání
context.xml
...
<bean id="bean" class="beanImpl"> <property name="conn"> <ref bean="bean2"/> </property> </bean> <bean id="bean2" class="bean2impl"/>
...
context.xml
...
<bean id="parent" class="mybean" > <property name="name" value="xxx"/>
</bean>
<bean id="child" class="mybean"
parent="parent">
<property name="address”
value="Prague"/> </bean>
...
Reference
”Dědění”
Ukázka – servlet + update konfigurace
Spring a databáze
Data access
Object Ralational Mapping
JDBC, JDO
Hibernate, OJB, iBatis, …
Např. org.springframework.jdbc.datasource.DriverManagerDataSource
Ukázka – servlet & JDBC & MySQL
Remoting
Modely:
RMI, Hessian, Burnlap, HTTP invoker, EJB, JAXRPC
Vše přes konfigurační soubor
RMI: RmiProxyFactoryBean, RmiServiceExporter
Není třeba žádný lookup, …
EJB
abstract support classes – pro jednotlivé typy beanů
Viz dále
Ukázka RMI
EJB 3
Funkce
Zpráva transakcí
Bezpečnost
Zpráva zdrojů a životního cyklu
Remoting
Concurrency Control
pomocí atributů, ne API
Detekce, zámky
Clustery, vyvažování zátěže
Typy beanů
Session bean
Synchronní komunikace
Interakce s klientem – aplikační vrstva
Message driven bean
Asynchronní komunikace
Služby, spíš nejnižší vrstva
Session beans
Session beans
Interakce s uživatelem
Business logika, algoritmy, procesy, …
Ne práce s daty, na to jsou jiné (EntityBean)
Životní cyklus
Pro jednoho klienta
Nepersistentní
Použití
@PreConstruct, @PreDestroy, @PrePassivate, @PostActivate, ...
První 2 pažadavky viz životní cyklus
Web servisy
Stateless session beans
Bezestavové (stateless)
Jedno volání metody, pak ”destroy”
Jednoduchost → škálovatelnost, výkon
@Stateless
Ukázka
Statefull session beans
Stavové (statuful)
”konverzace”, např. účet
Message driven beans
Motivace – problémy s RMI
Čekání...
Těsnost vazeb – přímá komunikace
Spolehlivost – chvilkový výpadek je problém
Nelze jinak, než 1:1
Alternativa Java Message Services (JMS)
JMS & Message driven beans
Modely:
PointtoPoint
Publish/Subscribe
@MessageDriven
Která fronta se má poslouchat
Implements MessageListener
Možno @Resource MessageDrivenContext
POJO
Plain Old Java Object, Plain Old Java Interface
Integrace ”normálních” Java objektů do EJB
Výhody:
Snadné testování
Rychlý vývoj
Není vazba na EJB framework
Nevýhody
Je třeba se vypořádat s transakcemi a perzistencí jinak
Viz implementace service v ukázce SpringRMI
EntityBeans, JPA
Java Persistence API
Načítání, ukládání, mazání – databáze
Primitivní typy, kolekce, některá pole
EJBQL javax.persistence.EntityManager
@Entity, @Table
@Id, @GeneratedValue, @SequenceGenerator
@OneToOne, @OneToMany, @ManyToMany
Pro objekty a vztahy mezi nimi
Např. OneToMany(cascade=REMOVE, mappedBy="customer") Životní cyklus entity
Řízeno pomocí EntityManageru
Závěrem...
K čemu je to dobré?
”Srovnání”
Dotazy?
Podobné dokumenty
Prezentace ke stažení [PDF - 269 kB]
Enterprise Java Beans (EJB) 3.1
Java Persistence API (JPA) 2.0
Java API for XML-Based Web Services (JAX-WS)
zde - DSN
Rozhraní RMI aplikace, z rozhraní java.rmi.remote odvozené, musí být veřejně dostupné (public).
Každá z jeho metod musí mít v seznamu výjimečných ukončení (klauzule throws) uvedenu výjimku
java.rmi...
Stáhnout Michalovo CV
• Java (J2EE) programátor, team leader
• vývoj billingových systémů pro telekomunikace
• řízení týmu vývojářů, komunikace se zákazníkem
• JSP, JSF, Oracle, IceFaces, EJB 3
• IT analýza, test analýz...
Object-relational mapping (JPA, Hibernate)
@Table(name = "t_student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private String firstname;
@Column(nullable = false, ...
Anotace a Hibernate
metadata pro ORM mapování, nastavení databáze apod. Tyto soubory lze
generovat i automaticky např. podle schematu přímo z databáze.
Nevýhodou je, že jich může být někdy velký počet.
2. Použití Java...
RMI, Hessian, Burnlap, HTTP invoker, EJB, JAXRPC
public Order getOrder()