SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
Session-Bean-Details
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
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
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
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
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
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
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
Stateless- und Stateful-Lebenszyklus




Präsentation "Enterprise Java Beans 3.1"         © Oliver P. Schell 2011   www.schellsoft.de   46
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
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
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
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

Weitere ähnliche Inhalte

Was ist angesagt?

Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"schellsoft
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Chris Michael Klinger
 
Metadatenbasierte Validierung
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierungos890
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Thorsten Kamann
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Ralf Sigmund
 

Was ist angesagt? (6)

Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"Auszug Seminarunterlagen "Hibernate 3.x"
Auszug Seminarunterlagen "Hibernate 3.x"
 
Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)Introduction to Apache Maven 3 (German)
Introduction to Apache Maven 3 (German)
 
Metadatenbasierte Validierung
Metadatenbasierte ValidierungMetadatenbasierte Validierung
Metadatenbasierte Validierung
 
Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?Maven2 - Die nächste Generation des Buildmanagements?
Maven2 - Die nächste Generation des Buildmanagements?
 
Einführung Maven
Einführung MavenEinführung Maven
Einführung Maven
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 

Andere mochten auch

Presentación de los mapas
Presentación de los mapasPresentación de los mapas
Presentación de los mapasIsa12Graterol
 
importancia de la educacion inicial
importancia de la educacion inicialimportancia de la educacion inicial
importancia de la educacion inicialolondraaa
 
PdeC body art.DORIS CASTRILLÓN
PdeC body art.DORIS CASTRILLÓNPdeC body art.DORIS CASTRILLÓN
PdeC body art.DORIS CASTRILLÓNelizabuiles
 
2015 el año del quiebre o del continuismo
2015 el año del quiebre o del continuismo2015 el año del quiebre o del continuismo
2015 el año del quiebre o del continuismoMario Abate Liotti Falco
 
Las redes sociales
Las redes socialesLas redes sociales
Las redes socialesDavid Valle
 
Hansgrohe se green controlling preis 2012
Hansgrohe se green controlling preis 2012Hansgrohe se green controlling preis 2012
Hansgrohe se green controlling preis 2012ICV_eV
 
Tutorial 2- Crear un blog con blogger
Tutorial 2- Crear un blog con bloggerTutorial 2- Crear un blog con blogger
Tutorial 2- Crear un blog con bloggerJean Saavedra
 
Sommer Rennradwoche 2014 in Südtirol
Sommer Rennradwoche 2014 in SüdtirolSommer Rennradwoche 2014 in Südtirol
Sommer Rennradwoche 2014 in SüdtirolDolcevita Hotels
 
Präsentation strobl
Präsentation stroblPräsentation strobl
Präsentation stroblICV_eV
 
Ganztagsschule von Thomas Höchst
Ganztagsschule von Thomas HöchstGanztagsschule von Thomas Höchst
Ganztagsschule von Thomas HöchstMacht Bildung
 
Bericht pr ausschuss stand november 2012
Bericht pr ausschuss stand november 2012Bericht pr ausschuss stand november 2012
Bericht pr ausschuss stand november 2012ICV_eV
 
Presentacion libre
Presentacion librePresentacion libre
Presentacion libreandyM97
 
La nutrición y alimentación
La nutrición y alimentaciónLa nutrición y alimentación
La nutrición y alimentaciónainoalove17
 
SeHF 2014 | Unified Information Management: Archivierung
SeHF 2014 | Unified Information Management: ArchivierungSeHF 2014 | Unified Information Management: Archivierung
SeHF 2014 | Unified Information Management: ArchivierungSwiss eHealth Forum
 

Andere mochten auch (20)

Higienelym
HigienelymHigienelym
Higienelym
 
Servicios de google
Servicios de googleServicios de google
Servicios de google
 
Presentación de los mapas
Presentación de los mapasPresentación de los mapas
Presentación de los mapas
 
importancia de la educacion inicial
importancia de la educacion inicialimportancia de la educacion inicial
importancia de la educacion inicial
 
PdeC body art.DORIS CASTRILLÓN
PdeC body art.DORIS CASTRILLÓNPdeC body art.DORIS CASTRILLÓN
PdeC body art.DORIS CASTRILLÓN
 
Actividad 7
Actividad 7Actividad 7
Actividad 7
 
Lectura
LecturaLectura
Lectura
 
2015 el año del quiebre o del continuismo
2015 el año del quiebre o del continuismo2015 el año del quiebre o del continuismo
2015 el año del quiebre o del continuismo
 
Außenwirtschaft im Fokus 2012
Außenwirtschaft im Fokus 2012Außenwirtschaft im Fokus 2012
Außenwirtschaft im Fokus 2012
 
Las redes sociales
Las redes socialesLas redes sociales
Las redes sociales
 
Hansgrohe se green controlling preis 2012
Hansgrohe se green controlling preis 2012Hansgrohe se green controlling preis 2012
Hansgrohe se green controlling preis 2012
 
Tutorial 2- Crear un blog con blogger
Tutorial 2- Crear un blog con bloggerTutorial 2- Crear un blog con blogger
Tutorial 2- Crear un blog con blogger
 
10 Gebote der Fotografie
10 Gebote der Fotografie10 Gebote der Fotografie
10 Gebote der Fotografie
 
Sommer Rennradwoche 2014 in Südtirol
Sommer Rennradwoche 2014 in SüdtirolSommer Rennradwoche 2014 in Südtirol
Sommer Rennradwoche 2014 in Südtirol
 
Präsentation strobl
Präsentation stroblPräsentation strobl
Präsentation strobl
 
Ganztagsschule von Thomas Höchst
Ganztagsschule von Thomas HöchstGanztagsschule von Thomas Höchst
Ganztagsschule von Thomas Höchst
 
Bericht pr ausschuss stand november 2012
Bericht pr ausschuss stand november 2012Bericht pr ausschuss stand november 2012
Bericht pr ausschuss stand november 2012
 
Presentacion libre
Presentacion librePresentacion libre
Presentacion libre
 
La nutrición y alimentación
La nutrición y alimentaciónLa nutrición y alimentación
La nutrición y alimentación
 
SeHF 2014 | Unified Information Management: Archivierung
SeHF 2014 | Unified Information Management: ArchivierungSeHF 2014 | Unified Information Management: Archivierung
SeHF 2014 | Unified Information Management: Archivierung
 

Ähnlich wie Auszug Seminarmaterial "EJB 3.x"

Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeldgedoplan
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.David Jardin
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Seleniumx-celerate
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10inovex GmbH
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsJosef Adersberger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!OPEN KNOWLEDGE GmbH
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondUlrich Krause
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeos890
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101gueste4be40
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance ReloadedGregor Goldbach
 
Feige sein
Feige seinFeige sein
Feige seingedoplan
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistencegedoplan
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardOPEN KNOWLEDGE GmbH
 

Ähnlich wie Auszug Seminarmaterial "EJB 3.x" (20)

Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
Hibernate Tuning
Hibernate TuningHibernate Tuning
Hibernate Tuning
 
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
 
Robustes Testen mit Selenium
Robustes Testen mit SeleniumRobustes Testen mit Selenium
Robustes Testen mit Selenium
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Arquillian
ArquillianArquillian
Arquillian
 
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Dnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyondDnug35 ak-dev.071111-beyond
Dnug35 ak-dev.071111-beyond
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
Flexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpikeFlexibilitaet mit CDI und Apache DeltaSpike
Flexibilitaet mit CDI und Apache DeltaSpike
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
Perl Renaissance Reloaded
Perl Renaissance ReloadedPerl Renaissance Reloaded
Perl Renaissance Reloaded
 
Feige sein
Feige seinFeige sein
Feige sein
 
Speeding up Java Persistence
Speeding up Java PersistenceSpeeding up Java Persistence
Speeding up Java Persistence
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
 
JBoss ESB
JBoss ESBJBoss ESB
JBoss ESB
 

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
  • 9. Stateless- und Stateful-Lebenszyklus Präsentation "Enterprise Java Beans 3.1" © Oliver P. Schell 2011 www.schellsoft.de 46
  • 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