Adatkezelés
11. előadás (Entity Beans)
Java EE – konténerek (ismétlés)
Szerver oldali
Szerver (tartalmazza a másik kettőt)
EJB konténer
Web konténer
Kliens oldali
Alkalmazás konténer
Böngésző java pluginje
Enterprise Java Beans (ismétlés)
Implementálnia kell bizonyos interfészeket
Meg kell felelnie egyes követelményeknek
A kliens sosem fér hozzá közvetlenül
A konténer menedzseli
A konténer elérhetővé teszi JNDI-n keresztül
Az EJB fajtái (ismétlés)
Szakasz (Session)
Entitás (Entity)
Bean által menedzselt
Konténer által menedzselt
Üzenetvezérelt (Message-driven)
Interfészek (ismétlés)
Szerep
Home interfész (életciklus)
Interfész (üzleti logika)
Működés
Lokális
A kliens ugyanabban a JVM-ben fut Paraméterátadás referencia szerint
Távoli
Távoli metódushívást használ Paraméterátadás érték szerint
EJB konténer működése (ismétlés)
Interfészek implementációját legenerálja a konténer A home interfészhez hozzáfér a kliens A home interfésztől referenciát kap az EJB interfészhez
create() vs. ejbCreate()
A kliens meghívja az EJB interfész metódusát Az implementáció meghívja az EJB vonatkozó metódusát
metódusNév() vs. EjbMetódusNév()
A Home interfész – használat (ismétlés)
Távoli InitialContext ic= new InitialContext(); Object oRef= ic.lookup( "java:comp/env/ejb/MyEJBBean" ); MyEJBRemoteHome MyEJBHome= (MyEJBRemoteHome) PortableRemoteObject.narrow( oRef,MyEJBRemoteHome.class );
Lokális InitialContext ic= new InitialContext(); MyEJBLocalHome MyEJBHome= (MyEJBLocalHome) ic.lookup( "java:comp/env/ejb/MyEJBBean" );
EJB konténer működése (ismétlés)
Interfészek implementációját legenerálja a konténer A home interfészhez hozzáfér a kliens A home interfésztől referenciát kap az EJB interfészhez
create() vs. ejbCreate()
A kliens meghívja az EJB interfész metódusát Az implementáció meghívja az EJB vonatkozó metódusát
metódusNév() vs. EjbMetódusNév()
Stateless Session Bean (ismétlés)
Stateful Session Bean (ismétlés)
Session Bean interfész (ismétlés) package javax.ejb; import java.rmi.RemoteException; public interface SessionBean extends EnterpriseBean { public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException; public void ejbRemove() throws EJBException, RemoteException; public void ejbActivate() throws EJBException, RemoteException; public void ejbPassivate() throws EJBException, RemoteException; }
Stateless Session Bean
Nem létezik → kész
Class.newInstance()
setSessionContext()
ejbCreate()
Kész → nem létezik (ejbRemove())
Állapot
Kliens
create()
remove()
Stateless Session Bean (tulajdonságok)
Egyetlen ejbCreate() üres paraméterlistával
Minden kliensre vonatkozó adatok
Hatékony pooling
Stateful Session Bean
Nem létezik → kész
Class.newInstance()
setSessionContext()
ejbCreate()
Kész → nem létezik (ejbRemove())
Kész → passzív (ejbPassivate())
Passzív → kész (ejbActivate())
Serialization
java.io.Serializable
Mentés háttértárolóra
Object Pooling
Nem szerializálható például
Szálak
Adatbáziskapcsolatok
Egyéb erőforrások
Object Pooling
ejbPassivate
Nem szerializálható erőforrások felszabadítása
ejbActivate
Nem szerializálható erőforrások visszaállítása
Stateful Session Bean (tulajdonságok)
Több ejbCreate() is lehet, az üres paraméterlistás kötelez Egyetlen kliensre vonatkozó adatok Skálázhatóság az ejbActivate() és az ejbPassivate() segítségével
Entity Bean metódusok
create()/ejbCreate()
remove()/ejbRemove()
findByPrimaryKey()/ejbFindByPrimaryKey()
findValami()/ejbFindValami()
homeValami()/ejbHomeValami()
A Home interfészben kell deklarálni
Elsődleges kulcs
Csak objektum lehet
Tulajdonságai
Publikus
Van paraméter nélküli publikus konstruktora
Minden mezője publikus
A változónevek a konténer által menedzselt mezők egy részhalmaza Felül kell definiálnia a hashCode() és az equals() metódusokat
Konténer által menedzselt
Absztrakt osztály
Adatbázishozzáférést generált kód végzi
Az állapotot virtuális perzisztens mezők tárolják
A findByPrimaryKey() metódust a konténer kezeli A többi finder metódust is a konténer generálja, EJB QL lekérdezésekkel kell megadni őket Az ejbCreate() visszatérési értéke null
Bean által menedzselt
Nem absztrakt osztály
A fejlesztő kódolja
Az állapotot példánymezők tárolják
A findByPrimaryKey() metódust a fejlesztő kódolja A többi finder metódust is a fejlesztő kódolja Az ejbCreate() visszatérési értéke az elsődleges kulcs
EntityBean package javax.ejb; import java.rmi.RemoteException; public interface EntityBean extends EnterpriseBean { public void setEntityContext(EntityContext ctx) throws EJBException, RemoteException; public void unsetEntityContext() throws EJBException, RemoteException; public void ejbRemove() throws RemoveException, EJBException, RemoteException; public void ejbActivate() throws EJBException, RemoteException; public void ejbPassivate() throws EJBException, RemoteException; public void ejbLoad() throws EJBException, RemoteException; public void ejbStore() throws EJBException, RemoteException; }
EntityBean életciklusa
EntityBean életciklusa
Nem létezik → pool
Class.newInstance()
SetEntityContext()
Pool → kész
create()
ejbCreate()
ejbPostCreate()
Pool → kész (activate()/ejbActivate())
Kész → pool (remove()/ejbRemove())
Kész → pool (passivate()/ejbPassivate())
Pool → nem létezik (unsetEntityContext())
EntityBean (metódusok)
A poolban meghívható
Home metódusok
Egyéb finder metódusok
ejbLoad()/ejbStore
Rollback – ejbCreate()/ejbPostCreate()
Bean Managed eset
Tranzakciók
Piszkos olvasás - másik tranzakciónak nem kommitolt változásai vannak Nem megismételhető olvasás – a tranzakció közben kétszer olvas be egy sort és a két beolvasás között az érték megváltozik Fantom olvasás – két azonos lekérdezés különböző eredményt ad
Tranzakciók – izolációs szint
TRANSACTION_NONE
TRANSACTION_READ_COMMITTED
TRANSACTION_READ_UNCOMMITTED
TRANSACTION_REPEATABLE_READ
TRANSACTION_SERIALIZABLE
EJB Tranzakciókezelés
Bean által kezelt
Session
Message-driven
Konténer által kezelt
Session
Message-driven
Entity
Bean által kezelt
javax.transaction.UserTransaction
EJBContext
UserTransaction
begin()
commit()
rollback()
JDBC tranzakciókezelő használata tilos
Konténer által kezelt
Container
Mandatory
Never
NotSupported
Required
RequiresNew
Supports
Rendszerkivételek
Alkalmazásszintű kivételek
EJBContext.setRollbackOnly()
Beadandó feladat
Péntek 23:00 után lesz fent a honlapon
http://www.inf.unideb.hu/~follathj
Határidő csütörtök éjfél
Beadandó feladat akkor is van, ha valamelyik óra elmarad
Határidő ilyen esetben is változatlan
A megoldások beküldése ●
[email protected] címre
●
Témamegjelölés a neptun kód