13
Session-Bean-Details

Auszug Seminarmaterial "EJB 3.x"

Embed Size (px)

Citation preview

Page 1: Auszug Seminarmaterial "EJB 3.x"

Session-Bean-Details

Page 2: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Themenübersicht "Session-Bean-Details"

39

Allgemeines zu Session-Beans

Konversationen

Implementationsdetails

Session-Context

Stateless- und Stateful-Lebenszyklus

Lebenszyklus-Callbacks

Das ungeliebte Home-Interface

Optimierungsstrategien

Voraussetzungen für die Passivierung

Page 3: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Allgemeines zu Session-Beans

40

Session-Bean = netzwerkfähiges Dienstobjekt:• Bietet Remote-Clients Anwendungslogik aller Art an

Stateless-Variante:• Enthalten keine transienten (Sitzungs-)daten (nonconversational)• Gehören Client für die Dauer seines Methodenaufrufs• Müssen nicht rekursiv serialisierbar sein

Stateful-Variante:• Enthalten Sitzungsdaten (conversational state)• Gehören Client für die Dauer einer Sitzung• Müssen rekursiv serialisierbar sein

Gemeinsamkeit beider Varianten:• Unterstützen verteilte JTA-Transaktionen• Besitzen SessionContext-Information

Page 4: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Konversationen

41

Conversional State = Stateful-Bean speichert exklusiv Daten eines Clients (Sitzung):• Z.B. Attributwerte, Datenbankverbindungen, Referenzen auf EJBs, etc.

Nachteile durch den Conversational State:• EJB-Instanzen nehmen stetig zu• Performancesteigerung wird notwendig

Page 5: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Implementationsdetails

42

Vererbungsdetails:• Implementationsklasse erbt ihr Remote- und/oder Local-Interface

Annotierungen:• Festlegung des Konversationstyps auf Klassenebene:•@Stateless // ODER @Stateful public class DemoBean implements Demo { … }

• Festlegung des Remote-Interfaces:•@Remote // ODER @Localpublic interface Demo { … }

•@Remote( Demo.class )public class DemoBean implements Demo, Interface2, Interface3 { … }

Erzeugung einer Instanz:• Instanzen werden pro JNDI-Lookup geliefert:•Demo beanStub = (Demo) ctx.lookup( "/DemoBean/remote" );

Löschung einer Stateful-Instanz:• Geschieht über beliebig viele mit @Remove annotierte Methoden in der Bean-Klasse!•@Remove( retainIfException = true ) public void checkout() { …}

Page 6: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Implementationsdetails

43

Alle Deployment-Descriptor-relevanten Details sind annotierbar:• Deklaration von Transaktionsdetails (s. Transaktionen):•@TransactionManagement, @TransactionAttribute, …

• Deklaration von Berechtigungen (s. Security):•@RolesAllowed , @PermitAll, @RunAs, …

• Aktivierung von Injections (s. JNDI-Dienst):•@Resource, @EJB, @PersistenceContext, …

Page 7: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Session-Context

44

Session-Context = Schnittstelle zum Application-Server:• Bei Stateful- & Stateless-Session-Beans vorhanden:•@Resourceprivate SessionContext context;

• Inhalte ändern sich jeweils beim Wechsel des Bean-Clients

Features des Session-Context:• Identität des Clients (Rechte, etc.):•public Principal getCallerPrincipal()

•public boolean isCallerInRole( Identity role )

• Referenz auf das Home-Objekt:•public EJBHome getEJBHome()

• Referenz auf das EJBObject:•public EJBObject getEJBObject()

• Referenz auf den aktiven Transaktionskontext:•public UserTransaction getUserTransaction()

•public void setRollbackOnly()

•public boolean getRollbackOnly()

• Zugriff auf den Timer-Service:•public TimerService getTimerService()

Page 8: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Session-Context

45

Neue EJB-3-Features des Session-Context:• Zugriff auf die EJB-Umgebung:•public Object lookup( String name )

• Liefert Handle auf die EJB:(z.B. zur Übergabe an den Client)•public getBusinessObject( Class businessInterface )

• Liefert das Interface, über dass gerade operiert wird:•public Object getInvokedBusinessInterface()

• Liefert Zugriff auf den JAX-RPC-Kontext, falls vorhanden:•public MessageContext getMessageContext()

Deprecated in EJB 3.0:• Folgende Methoden liefern nun eine Exception:•public Object getEJBObject()

•public Object getEJBLocalObject()

Page 9: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Stateless- und Stateful-Lebenszyklus

46

Page 10: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Lebenszyklus-Callbacks

47

Callback zur Initialisierung:• Reagiert auf Erzeugung durch den Client:•@PostCreatepublic void myPostCreateMethod() { … }

Callback zur Passivierung:• Serialisiert Stateful-Beans nach definiertem Timeout:•@PrePassivate public void myPostPassivateMethod() { … }

Callback zur Aktivierung:• Reaktiviert für zuvor serialisierte Stateful-Beans:•@PostActivatepublic void myPostActivateMethod() { … }

Callback zur Zerstörung:• Reagiert auf Löschung durch den Client oder auf System-Exceptions:•@PreDestroypublic void myPreDestroyMethod() { … }

• Wird bei der Löschung passivierter Stateful-Beans nicht berücksichtigt!

Page 11: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Das ungeliebte Home-Interface

48

Home-Interfaces sind deprecated, werden aber weiter unterstützt:• Home-Interfaces erzeugen oder verwerfen EJB-Instanzen• Sie werden weiterhin in Remote- und Local-Varianten unterschieden

Explizites Coding des Home-Interface:• Aufbau des Interfaces:•public interface DemoHome extends javax.ejb.EJBHome { public Demo create() // ruft startBean() throws CreateException, RemoteException; public Demo create( String greeting ) // ruft startBean( String ) throws CreateException, RemoteException;}

• Verweis aus der Implementationsklasse:•@RemoteHome( DemoHome.class ) // ODER @LocalHome( … )public class DemoBean implements Calculator { … @Init public void startBean() { … } @Init public void startBean( String greeting ) { … } …}

Page 12: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Optimierungsstrategien

49

Verfahren der "Passivierung" bei Stateful-Session-Beans:• Deaktivierung (Caching) der EJB-Instanz nach Timeout• EJB-Client-Assoziation existiert weiterhin• Löschung der EJB-Instanz nach weiterem Timeout

Verfahren des "Pooling" bei Stateless-Session-Beans:• Container bereitet EJB-Instanzen vor und hält sie im Pool vorrätig

Timeout = Zeit bis zu einem Stateful-EJB-Zustandswechsel:• Max-Age: Zeit bis zur Passivierung• Max-Life: Zeit bis zur Entfernung aus dem passiven Zustand

Meist werden Timeouts von Tasks bzw. Threads kontrolliert:• Overager: Prüft auf passivierbare EJBs• Remover: Prüft auf löschbare EJBs

Page 13: Auszug Seminarmaterial "EJB 3.x"

© Oliver P. Schell 2011 www.schellsoft.dePräsentation "Enterprise Java Beans 3.1"

Voraussetzungen für die Passivierung

50

Der Container serialisiert den Conversional State in einen Cache:• Die EJB wird darüber per Callback informiert: •@PrePassivatepublic void beanWillPassivate() { … }

•@PostActivate public void beanWasActivated() { … }

Risiko beim Serialisierungsvorgang:• Eine "java.io.NotSerializableException" könnte entstehen!

Serialisierbare Bean-Attribute:• Serialisierbares Objekt• Referenz auf NULL• Remote-Interface, Home-Interface, Local-Interface, Local-Home-Interface, SessionContext,

JNDI-Namensdienst, UserTransaction, Resource-Factory

Varianten, falls ein Attribut nicht serialisierbar ist:A) Attribut-Deklaration mit "transient":•transient private ResultSet results;

B) In @PrePassivate-Methode referenz auf NULL setzen:•public void beanWillPassivate() { this.results.close(); this.results = null;}