Contenu connexe
Similaire à Auszug Seminarmaterial "EJB 3.x" (20)
Auszug Seminarmaterial "EJB 3.x"
- 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 Passivierung
Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 39
- 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-Information
Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 40
- 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 notwendig
Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 41
- 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. 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. 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. 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
- 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. 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. 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 EJBs
Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 49
- 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