Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Session-Bean-Details
Themenübersicht "Session-Bean-Details"               Allgemeines zu Session-Beans               Konversationen            ...
Allgemeines zu Session-Beans               Session-Bean = netzwerkfähiges Dienstobjekt:                • Bietet Remote-Cli...
Konversationen               Conversional State =               Stateful-Bean speichert exklusiv Daten eines Clients (Sitz...
Implementationsdetails               Vererbungsdetails:                • Implementationsklasse erbt ihr Remote- und/oder L...
Implementationsdetails               Alle Deployment-Descriptor-relevanten Details sind annotierbar:                • Dekl...
Session-Context               Session-Context = Schnittstelle zum Application-Server:                • Bei Stateful- & Sta...
Session-Context               Neue EJB-3-Features des Session-Context:                • Zugriff auf die EJB-Umgebung:     ...
Stateless- und Stateful-LebenszyklusPräsentation "Enterprise Java Beans 3.1"         © Oliver P. Schell 2011   www.schells...
Lebenszyklus-Callbacks               Callback zur Initialisierung:                • Reagiert auf Erzeugung durch den Clien...
Das ungeliebte Home-Interface               Home-Interfaces sind deprecated, werden aber weiter unterstützt:              ...
Optimierungsstrategien               Verfahren der "Passivierung" bei Stateful-Session-Beans:                • Deaktivieru...
Voraussetzungen für die Passivierung               Der Container serialisiert den Conversional State in einen Cache:      ...
Nächste SlideShare
Wird geladen in …5
×

Auszug Seminarmaterial "EJB 3.x"

4.483 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Auszug Seminarmaterial "EJB 3.x"

  1. 1. Session-Bean-Details
  2. 2. Themenübersicht "Session-Bean-Details" Allgemeines zu Session-Beans Konversationen Implementationsdetails Session-Context Stateless- und Stateful-Lebenszyklus Lebenszyklus-Callbacks Das ungeliebte Home-Interface Optimierungsstrategien Voraussetzungen für die PassivierungPräsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 39
  3. 3. Allgemeines zu Session-Beans 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-InformationPräsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 40
  4. 4. Konversationen 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 notwendigPräsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 41
  5. 5. Implementationsdetails 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 @Local public 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() { … }Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 42
  6. 6. Implementationsdetails 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, …Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 43
  7. 7. Session-Context Session-Context = Schnittstelle zum Application-Server: • Bei Stateful- & Stateless-Session-Beans vorhanden: • @Resource private 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()Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 44
  8. 8. Session-Context 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()Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 45
  9. 9. Stateless- und Stateful-LebenszyklusPräsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 46
  10. 10. Lebenszyklus-Callbacks Callback zur Initialisierung: • Reagiert auf Erzeugung durch den Client: • @PostCreate public 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: • @PostActivate public void myPostActivateMethod() { … } Callback zur Zerstörung: • Reagiert auf Löschung durch den Client oder auf System-Exceptions: • @PreDestroy public void myPreDestroyMethod() { … } • Wird bei der Löschung passivierter Stateful-Beans nicht berücksichtigt!Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 47
  11. 11. Das ungeliebte Home-Interface 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 ) { … } … }Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 48
  12. 12. Optimierungsstrategien 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 EJBsPräsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 49
  13. 13. Voraussetzungen für die Passivierung Der Container serialisiert den Conversional State in einen Cache: • Die EJB wird darüber per Callback informiert: • @PrePassivate public 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; }Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 50

×