1 Java EE 7 2 EJB Enterprise Java Beans 3 Features 4 EJB • Sind serverseitige Java-Komponenten • Diese stellen dem Programmierer gewisse Dienste zur Verfügung, damit sich dieser auf die Geschäftslogik konzentrieren kann. • Dabei werden auch die Aspektorientierung berücksichtigt (Dependency Injection) 5 Stateful Session Beans • Stateful Session Beans sind POJOs • Halten Status für einen Client vor • @Stateful - Annotation • Werden für den Client durch einen Proxy repräsentiert 6 Stateful Session Beans • Alle öffentlichen Methoden können vom Client aufgerufen werden • @Remove-Annotation auf einer Methode wird den Status der Bean löschen, wenn der Client sie aufruft • No-Interface View • Bean hat nur die @Stateful-Annotation • Ist nur für in derselben Java-EE-Applikation enthaltene Komponenten erreichbar (Web-Schicht etc) • Proxy vom Typ der Klasse 7 Remote View • Um die Bean auch nichtlokalen Clients zugänglich zu machen, benötigt sie eine Remote-Sicht • Interface annotiert mit @Remote • Proxy ist vom Typ des Interface • Clients müssen sich nicht innerhalb derselben Java-EE-Applikation befinden und auch nicht auf demselben Server liegen 8 Injizierung • Lookup und Injizierung wird vom System vorgenommen • @Inject oder @EJB • @EJB erlaubt es, einen JNDI-Pfad zu definieren: @EJB(lookup=„java:comp/env/MyBean") Stateful stateful • @Inject funktioniert nur für Beans innerhalb der lokalen Applikation • @Inject funktioniert nur für No-Interface Views 9 LocalView • Interface ist mit @Local annotiert • Zusätzliches Interface für im selben EJB-Container veröffentlichte Komponenten • • Kann mehr Funktionalitäten bereitstellen • Nutzende Beans muss nicht in derselben JavaEE-Applikation liegen Proxy wird auf dem Interface erzeugt 10 Lebenszyklus 11 Lebenszyklus-Callbacks • @PostConstruct Methode wird nach dem Erzeugen und dem Injizieren von Abhängigkeiten aufgerufen • @PreDestroy Methode wird aufgerufen, bevor der Status der Bean verworfen wird • @PrePassivate Methode wird eingebunden, bevor der Status der Bean gespeichert wird (Passivierung) • @PostActivate Methode wird eingebunden, nach der der Status der Bean geladen und zugewiesen worden ist (Aktivierung) 12 StatefulBean 13 Servlet 14 Problem • Wird aus mehreren Browser-Session auf die Stateful-EJB zugegriffen, so haben alle Sessions den gleichen Zustand. • Ursache: Das Servlet wird einmal erzeugt und bleibt bestehen. • Abhilfe: Eine zustandslose CDI-Bean (BeanManager) wird dazwischengeschaltet 15 Verbesserte Version BeanManager 16 Verbesserte Version Servlet 17 Ergebnis • Nun gibt es zwei getrennte Sessions 18 Lebenszyklusmethoden und Interceptors 19 20 21 Beispiel Erweiterung unseres EJB-Beispiels 22 Wildfly Log 23 24 25 26 nur in full profile 27 Beispiel • [to be continued …] 28