+ All Categories
Home > Documents > Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf•...

Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf•...

Date post: 12-Aug-2019
Category:
Upload: dangdat
View: 240 times
Download: 0 times
Share this document with a friend
66
Ralf Gitzel [email protected] 1 Session Beans & Servlet Integration
Transcript
Page 1: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

1

Session Beans & Servlet Integration

Page 2: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

2

Themenübersicht

Page 3: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

3

Übersicht

• Motivation• Das Interface• Stateful und Stateless Session Beans• Programmierung einer Stateful Session

Bean mit Local Interface• Web Client

Page 4: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

4

Motivation für Session Beans

Page 5: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

5

MotivationWeb Container

Servlet/JSF

EJB Container

EntityDB

Per

sist

ence

Pro

vide

r

Session Bean

SichtbarerEinstiegspunktfür das Servlet

Page 6: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

6

Mögliche Clients für eine SessionBean

Servlet/JSF

EJB Container

Entity

Session Bean

GUI-basierteJava Anwendung

Web Service

Bel. Anwendung

Session Bean

Page 7: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

7

Rolle der Session Beans

• Stellen Geschäftslogik nach außen zurVerfügung

• Der JEE Client (z.B. ein Servlet oder eineManaged Bean) greift über die SessionBeans auf die EJB Applikation zu

• Die Session Beans stellen die „Session“der JEE Anwendung dar

Page 8: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

8

Anmerkung: Session Bean vs.Normale Java Klassen im Servlet

• Trennung von Darstellung und Code:– Deployment Logik und Darstellung of verschiedenen

Servern– Mehrere Darstellungsformen für die gleiche Logik

• Enterprise Integration: Logik kann ohne vielAufwand parallel auch als Web Serviceangeboten werden (d.h. Aufruf aus anderenAnwendungen, die in anderen Sprachengeschrieben sind!)

• Containerdienste (Persistenz, Sicherheit,Transaktionen)

Page 9: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

9

Session im EJB Kontext

• Session: Eine (virtuelle) Verbindungzwischen dem Client und dem Server,die eine endliche Zeitspanne anhält

• Lange Session: Stateful Session Bean(merkt sich Daten zwischen Aufrufen)

• „Kurze Session“: Stateless SessionBean (jeder Aufruf ist eine neue Session)

Page 10: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

10

Das Interface

Page 11: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

11

Session Beans

Stateful: Merkt sich denZustand der Bean

Stateless: Zustandslos,jeder Aufruf wie neu

Remote Interface

Local Interface

Session Beans

Entfernter vs. Lokaler Zugriff

EJB Container

Verschiedene Client Typen

Page 12: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

12

Client Szenarien

Servlet

Session Bean

Lokaler Zugriff

Servlet

Session Bean

Entfernter Zugriff

Page 13: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

13

Stateful und Stateless SessionBeans

Page 14: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

14

Session Beans

Stateful: Merkt sich denZustand der Bean

Stateless: Zustandslos,jeder Aufruf wie neu

Remote Interface

Local Interface

Session Beans

Session Länge (lang vs. kurz)

EJB Container

Verschiedene Client Typen

Page 15: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

15

Stateless vs. Stateful SessionBeans: Stateless

@Stateless

Session Bean

Client

@Stateless

Session Bean

@Stateless

Session Bean

Jeder Aufruf ist eine neue Session, alle „Daten“ sind vergessen!

Page 16: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

16

Stateless vs. Stateful SessionBeans: Stateful

@Stateful

Session Bean

Client

Eine Session, d.h. „Daten“ werden zw. den Aufrufen gespeichert!

Page 17: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

17

Stateless Session BeanImplementierung (I)

EJB ContainerSession Bean

Klasse A

Session BeanKlasse B

Session BeanA Objekt 1

Session BeanA Objekt 2

Session BeanA Objekt n

A.doX()

A.doX()

A.doX()

Bea

nP

ool

Page 18: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

18

Stateless Session BeanImplementierung (II)

EJB ContainerSession Bean

Klasse A

Session BeanKlasse B

Session BeanA Objekt 1

Session BeanA Objekt 2

Session BeanA Objekt n

Bea

nP

ool

Client bekommt eine zufällige Instanz aus dem Pool zugewiesen!

Page 19: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

19

Stateless Session BeanImplementierung (III)

EJB ContainerSession Bean

Klasse A

Session BeanKlasse B

Session BeanA Objekt 1

Session BeanA Objekt 2

Session BeanA Objekt n

Bea

nP

ool

Aufrufe hintereinander könnenbei unterschiedl. Objekten dergleichen Klasse enden!

1. Aufruf

2. Aufruf

Page 20: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

20

Gruppendiskussion

• Erklärt diese Implementierung, warumStateless Session Beans keinen Zustandspeichern können?

• Welche Vorteile bietet die Implementierung alsPool?

Page 21: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

21

Stateful Session BeanImplementierung (I)

EJB ContainerSession Bean

Klasse A

Session BeanA Objekt für I

A.doX()

A.doX()

Client I

Client II

Session BeanA Objekt für II

1-zu-1 Zuordnung bis zum Ende der Session

Page 22: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

22

Passivierung

Aktiv, d.h. im Hauptspeicher

Passiv, d.h. auf derPlatte gespeichert

Keine

Client

Aktivität

Ern

eute

Clie

ntA

ktiv

ität

Hält die Belastung desHauptspeichers durch inaktiveSessions gering.

Timeout: Sehr lange nichtverwendete Sessions werdenganz beendet.

Page 23: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

23

Gruppendiskussion

• Was ist der Nachteil, was ist der Vorteilgegenüber einer Stateless SessionBean?

• Warum sind nicht alle Session Beansstateful?

Page 24: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

24

Programmierung einer StatefulSession Bean mit Local Interface

Page 25: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

25

Interfaces

• Jede Session Bean muss mindestensein Interface haben

• Methodennamen dürfen nicht mit derBuchstabenfolge „ejb“ beginnen

• Ein Interface kann nur eine Annotationhaben, d.h. man muss jedes Interfaceeinzeln definieren

• Local Interface Annotation: @Local

Page 26: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

26

Beispiel: Local Interface

Datei: IPersonenQuelle.javaAnm.: Methoden können beliebig sein

Page 27: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

27

Session Bean Klasse• Markierung mit Annotation: Stateless oder Stateful• Implementiert Interface(s)• Einschränkungen:

– nicht „abstract“ oder „final“– Methoden dürfen nicht final sein– Keine Methoden, deren Name mit „ejb“ beginnt

• Kann von anderen Klassen erben (auch von anderenSession Bean Klassen)

• Kann auch Methoden enthalten, die nicht im Interfacedefiniert sind

• Muss einen parameterlosen Konstruktor haben

Page 28: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

28

Zusätzliche Programmier-Regelnfür Stateful Session Beans

• Speicherung des Zustandes in denInstanzvariablen

• Instanzvariablen müssen serialisierbar sein(wegen möglicher Passivierung)

• Stateful Session Beans müssen mit @Removeexplizit zerstört werden, sonst wirdSpeicherplatz vergeudet!

Page 29: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

29

Beispiel: Stateful Session BeanKlasse

Datei: PersonenQuelle.java

Page 30: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

30

Web Client

Page 31: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

31

Zugriff auf eine Session Bean

• Trivial für Stateless Session Beans (sog.Dependency Injection, s. letzteVorlesung – Hello World)

• Für Stateful Session Beans benötigen wireinen JNDI-Lookup

Page 32: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

32

Wie verwende ich die StatefulSession Bean im Servlet?

1. JNDI Lookup

„StartServlet“(erster Aufruf

der Applikation!)

Referenz auf EJB

Andere Servlets

2. Speicherungin Session

Session Attributauslesen

Referenz auf EJB

Page 33: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

33

Wie verwende ich die StatefulSession Bean im Servlet?

1. JNDI Lookup

„StartServlet“(erster Aufruf

der Applikation!)

Referenz auf EJB

Andere Servlets

2. Speicherungin Session

Session Attributauslesen

Referenz auf EJB

Page 34: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

34

EJB aus Session verwenden

Datei: PersonAnlegenServltAufruf über: StartServlet

Page 35: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

35

EJB aus Session verwenden

• Verwendung des Objekts aus der Session wiebisher auch

• Interessante Details:– Wir müssen das Interface als statischen Typ

verwenden– Wir speichern nicht mehr die Daten sondern das

Datenzugriffsobjekt in der Session(PersonenQuelle statt List<Person>)

• Aber: Wie bekommen wir das Objekt in dieSession?

Page 36: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

36

Wie verwende ich die StatefulSession Bean im Servlet?

1. JNDI Lookup

„StartServlet“(erster Aufruf

der Applikation!)

Referenz auf EJB

Andere Servlets

2. Speicherungin Session

Session Attributauslesen

Referenz auf EJB

Page 37: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

37

EJB Objekt in die Sessionspeichern

Datei: StartServlet.java

Bis auf dieObjekterzeugung

wie gehabt!

Page 38: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

38

Wie verwende ich die StatefulSession Bean im Servlet?

1. JNDI Lookup

„StartServlet“(erster Aufruf

der Applikation!)

Referenz auf EJB

Andere Servlets

2. Speicherungin Session

Session Attributauslesen

Referenz auf EJB

Page 39: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

39

Konzept des JNDI Aufrufs auseinem Servlet

Bean Informationenkonfigurieren

Context vomContainer holen

Eine Referenz aufdie Bean aus dem

Context holen

Für weitereVerwendung in der

HttpSession ablegen

(Automatisch)Session Bean im

Context anmelden

Page 40: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

40

Konzept des JNDI Aufrufs auseinem Servlet

Bean Informationenkonfigurieren

Context vomContainer holen

Eine Referenz aufdie Bean aus dem

Context holen

Für weitereVerwendung in der

HttpSession ablegen

(Automatisch)Session Bean im

Context anmelden

Page 41: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

41

EJB Objekt in die Sessionspeichern

Datei: StartServlet.java

1

1

2

2

Page 42: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

42

Konzept des JNDI Aufrufs auseinem Servlet

Bean Informationenkonfigurieren

Context vomContainer holen

Eine Referenz aufdie Bean aus dem

Context holen

Für weitereVerwendung in der

HttpSession ablegen

(Automatisch)Session Bean im

Context anmelden

Page 43: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

43

Context Zugriff

Datei: StartServlet.javaAnm: Die Befehle könnten auch direkt in doGet/Post stehen…

Page 44: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

44

Erläuterung zur vorherigen Folie

• Context-Objekt wird immer auf diese Weiseerzeugt

• Zugriff auf JNDI ist immer gleich, bis auf:– Name des Interfaces (z.B. IPersonenQuelle)– Name der Session Bean (z.B. PersonenQuelle)

• Wichtig: Exceptions abfangen!

Page 45: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

45

Lernziele

Page 46: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

46

Lernziele

• Stateful vs. Stateless verstehen• Stateful Session Bean programmieren

können• Session Bean im Client verwenden

können• JNDI Lookup nur passiv verwenden (der

Code muss nicht auswendig gekonntwerden)

Page 47: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

47

Übungsaufgabe

Page 48: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Übungsaufgabe

• Hinweis: Verwendet keine SessionBeans nur JSF!

• Aufgabe: Programmieren Sie eineWebseite, auf der man verschiedeneKöpfe und Körper kombinieren kann!

48

Page 49: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Screenshot 1

49

Page 50: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Screenshot 2

50

Page 51: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Hinweise zur Bearbeitung

51

Kopfbilder

Körperbilder

Hinweis: Man kann den Bildnamen aus einer Expression und einemString zusammenbauen!Als Lösung nicht akzeptiert ist es, den Bildnamen in der ManagedBeanzusammenzusetzen.

Page 52: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

52

Bonusmaterial

Page 53: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

53

Remote Interface

• @Remote Annotation• Alle Parameter müssen Serializable sein• Einsatz wird hier nicht vertieft

Page 54: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

54

Web Service Interface

• Kann nur für Stateless Session Beansdefiniert werden, da Web Services immerzustandslos sind

• @WebService Annotation, ohneParameter

• Wird hier nicht weiter vertieft

Page 55: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

55

Vererbung der Annotationen

• @Stateless und @Stateful werden nichtvererbt

• Life Cycle Annotationen an denMethoden werden vererbt (s. später)

Page 56: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

56

Probleme und Antworten• Warum kriege ich eine NullPointerException bei

Verwendung der Dependency Injection (z.B. mit@EJB)?– Verwende ich die richtigen Versionen von EJB (3.0) und

Servlets (2.5)?– Manchmal ist Undeploy/Server-Stop/Server-Start/Deploy keine

schlechte Idee.– Was sagt das Glassfish/JBoss Server Log?– Stateful Session Bean? Dann brauchen wir JNDI und nicht

Injection!• Warum ist alles so langsam?

– Evtl. läuft der Server im Hintergrund und führt für jedeÄnderung ein „Hot Deploy“ durch – Server stoppen!

Page 57: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

57

Voller Lebenszyklus der StatefulSession Bean

Nicht existent

Zerstörung

Aktiviert

Passiviert(Auf FestplatteAusgelagert)

Ern

eute

Anf

rageC

lientlängerInaktiv

oder

sehr

lang

ein

aktiv

Sehr lange inaktiv

Neue Anfrage

Page 58: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

58

LifeCycleCallBacks (I)

• Wenn man Ressourcen wie JDBC,Messaging usw. verwendet, dann mussman ggf. zu verschiedenen ZeitpunktenRessourcen initialisieren oder freigeben

• Hierzu verwendet man dieLifeCycleCallback Methoden, dieautomatisch aufgerufen werden, wennein bestimmter Zustand erreicht wird

Page 59: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

59

LifeCycle Callbacks (II)

• @Remove ist keine Callback Methode!• Callbacks:

– @PostConstruct: Nach der Initialisierung derKlasse. (Z.B. Datenbank öffnen)

– @PreDestroy: Kurz vor der Zerstörung. (Z.B.Datenbank schließen)

– @PrePassivate: Vor der Passivierung einerStateless Session Bean. (Z.B. Datenbanköffnen)

– @PostActivate: Nach der Aktivierung…

Page 60: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

60

Gruppendiskussion letzte Stunde:Was ist hier falsch?

Page 61: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

61

Antwort zu letzter StundeWeb Container

Servlet

EJB Container

Session Bean(Hello User)

Das war gewollt

Web Container

Servlet

EJB Container

Session Bean(Hello User)

Das passiert tatsächlich

Java Klasse(Hello User)

Page 62: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

Ralf [email protected]

62

Stateless Session Beans

Page 63: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

63

Local Interface der Bean

Die @Local-Annotation

Interface: minimo.help.IPersonTaskMatcher im Projekt SessionBeansEJBClient-Aufruf erfolgt in minimo.servlet.SetupAssignPersonPageHandler

Page 64: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

64

Beispiel Stateless Session Bean

Klasse: minimo.help.PersonTaskMatcher im Projekt SessionBeansEJB

Die @Stateless-Annotation(Parameter optional und im

Moment unwichtig)

Implementiert das LocalInterface

Page 65: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

65

Client für Session Beans

• Wie besprochen über Dependency Injection(@EJB)

• In Ausnahmefällen JNDI Lookup (s. später)

Page 66: Session Beans & Servlet Integration - ralf-gitzel.inforalf-gitzel.info/JEE-14-09-SessionBeans.pdf• Stateful und Stateless Session Beans • Programmierung einer Stateful Session

66

Tipps zur Verwendung vonStateful Session Beans

• Lieber Stateless als Stateful (wenn möglich)• Wegen der Kosten der Passivierung/Aktivierung

und Clustering möglichst wenig Daten in einer StatefulSession Bean speichern (z.B. lieber Lookup-Namenals ganzes Person-Objekt)

• Remove-Methode immer verwenden um „verwaiste“Sessions zu vermeiden

• (Anmerkung: Falls beim Server Passivierungsintervalleeingestellt werden können, kann ein falscher Wertmehr Performanceschaden als –nutzen verursachen)


Recommended