220 likes | 350 Views
Java web programozás. 4. Tartalom. Enterprise JavaBeans (folyt.) Entity Bean-ek JPA JTA Persistence Unit EJB QL Session Bean-ek Message Driven Bean-ek, JMS. JPA. Java Persistence API (JSR-220) Biztosítja a „kapcsolatot” az adatbázis és az alkalmazás között.
E N D
Tartalom • Enterprise JavaBeans (folyt.) • Entity Bean-ek • JPA • JTA • Persistence Unit • EJB QL • Session Bean-ek • Message Driven Bean-ek, JMS
JPA • Java Persistence API (JSR-220) • Biztosítja a „kapcsolatot” az adatbázis és az alkalmazás között. • Szabványos Objektum-Relációs (O-R) leképezés • Saját lekérdező („query”) nyelv (EJB QL) • Perzisztencia implementációk („JPA Provider”) • TopLink (Oracle) • Hibernate (www.hibernate.org)
JTA • Java Transaction API • Tranzakciós alapfogalmak (ACID): • Atomicitás: az összetartozó adatbázis műveletek közül vagy mindegyik sikeresen lefut, vagy egyik sem. • Konzisztencia: az adatbázis konzisztens állapotban marad. • Izoláció: a konkurens kliensek nem látják egy másik kliens által még be nem fejezett tranzakció hatásait. • Tartósság: egy sikeresen lefutott tranzakció hatásai még külső hiba (hardver, hálózati) esetén sem vesznek el.
JTA • Izolációs szintek: • Read Uncomitted: a tranzakció még jóvá nem hagyott hatásai mindenki számára láthatóak. • Read Comitted: Csak a jóváhagyott módosítások láthatóak. • Repeatable Read: garantálja hogy egy tranzakción belüli sor, többszöri olvasásra sem változik meg. • Serializable: A konkurens tranzakciók hatása sorosítva fut le. • Alapértelmezett izolációs szint • Az adatbázis beállításától függ. • Izolációs szint betartása • Ún. „zárak” (lock) segítségével. (pl. rekord, ill. tábla szintű)
Persistence Unit • Az Entity manager által kezelt Entity Bean-ek halmaza. • A konfiguráció és egyébb információk a „persistence.xml” fájlban. • Egy Java EE projektben, több Persistence Unit is lehet. • A PU-khoz, egy „Data Source” is tartozik amely az adatbázishoz való kapcsolatot hordozza.
Persistence Context • A „perzisztencia provider” (TopLink) által kezelt entitások halmaza. • Ez a kapcsolat a memóriában lévő entitások, és az adatbázis között. • Használata a session bean-ben: @PersistenceContext private EntityManager em;
Entity Bean • Egy „üzleti objektum”. • Az adatbázistábla a memóriába leképzett egy sora. • Egyszerű Java osztályok. (POJO) • Lekérdezések az EJB QL nyelvvel. • Kezelésük, az „Entity Manager” API-val. • Az osztály, az @Entity annotációval van jelölve. • Van elsődleges kulcsa: @Id annotáció, @EmbeddedId • Az Entitások állapota (a változók jelölései) • @Basic: Egyszerű adattípusok • @Embedded: beágyazott objektum (pl. egy másik osztály) • Az entitások állapota perzisztens, kivéve a @Transient annotációval ellátottakat!
Entitás elsődleges kulcsa • Minden entitásnak van, amely megfelel az adatbázisban lévő elsődleges kulcsnak! • @Id annotáció: egy darab mező esetén. • @GeneratedValues: az ID automatikus generálása. • Az ID beállítása: • Sequence: Az adatbázis által kezelt számláló, amelyet a @SequenceGenerator annotációban kell megadnunk. • Identity: Az adatbázistábla, egy autoinkrementálódó oszlopa lesz az elsődleges kulcs.
Entity Manager API • Az entitások életciklusát és a persistence context-et kezeli. • Entitás életciklus műveletek: • new(): új entitás jön létre amely még nem perzisztens. • persist(): az entitás perzisztens állapotba kerül. Az adatbázis kezelő tranzakciójának a commit-jával kerül beírásra. • remove(): törli a perzisztens entitást. Véglegesítés: commit-kor • refresh(): Az entitás állapota kiolvasódik az adatbázisból. • fluss(): Az entitás állapota beíródik az adatbázisba. • merge(): Entitás módosítása.
Entitások közötti kapcsolat • Egy-egy kapcsolat • A @OneToOne annotációval. • Egy-több kapcsolat • A @OneToMany és a @ManyToOne annotációkkal. • Kétirányú kapcsolat (egy-több): • Tulajdonos oldal: a külső kulcs • Inverz oldal: mapped-by annotáció
Entitások közötti kapcsolat • Több-több kapcsolat • A @ManyToMany annotációval. • A kapcsolótábla (a kulcsok), egy beágyazott osztály lesz.
EJB QL • A query-k típusai • Statikus query: @NamedQuery segítségével deklarálható. • Dinamikus query: az SQL stringet futásidőben hozzuk létre. • Query használata • createNamedQuery(„”): statikus query használata • createQuery(„”): dinamikus query készítése. • createNativeQuery(„”): adatbázis-szerver specifikuk SQL lekérdezés összeállítása.
EJB QL • Minden rekord • SELECT p FROM People p • Feltétel (paraméter) megadása • SELECT p FROM People p WHERE p.name = :name • Rendezés • SELECT p FROM People p ORDER BY p.name • Aggregálás • SELECT count(*) FROM People p • LIKE operátor • SELECT p FROM People p WHERE p.name LIKE ‘B%’
Session Bean • Az üzleti folyamatokat megvalósító szerver oldali komponens • Session Bean típusok • Állapot mentes (@Stateless): • Nem tárol állapotot • Állapottal rendelkező (@Stateful): • Pl. on-line bevásárló kocsi • A kliens végig ugyanazzal a bean-el kommunikál. • Állapot tárolására alkalmas • Message Driven Bean • Aszinkron üzenetkezelés
Session Bean kliense • Egy servlet