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.421 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

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

Keine Downloads
Aufrufe
Aufrufe insgesamt
4.421
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3.549
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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

×