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 Távoli A kliens ugyanabban a JVM-ben fut Paraméterátadás referencia szerint 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 <transaction-type>container</transaction-type> <trans-attribute></trans-attribute> 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 degi.adatkezeles@gmail.com címre Témamegjelölés a neptun kód