Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)

Transkript

Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)
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 (Web­Sphere), 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 2003­2006

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
Aspect­Oriented (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"> <constructor­arg> <value>My Value</value> </constructor­arg> </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, JAX­RPC

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:


Point­to­Point

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 Spring­RMI
EntityBeans, JPA

Java Persistence API


Načítání, ukládání, mazání – databáze

Primitivní typy, kolekce, některá pole

EJB­QL ­ 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

Vybrané partie z jazyka Java

Vybrané partie z jazyka Java RMI, Hessian, Burnlap, HTTP invoker, EJB, JAX­RPC

Více

EJB - Enterprise Java Beans

EJB - Enterprise Java Beans public Order getOrder()

Více

Prezentace ke stažení [PDF - 269 kB]

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)

Více

zde - DSN

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

Více

Stáhnout Michalovo CV

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

Více

Object-relational mapping (JPA, Hibernate)

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

Více

Anotace a Hibernate

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

Více