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...