Beispiel: Stateful Session Bean (JBoss 4.0)
Beispiel für eine Stateful Session Bean, auf die per Webclient zugegriffen wird.
Die Deployanleitung bezieht sich auf JBoss 4.0.3.
Hier gibt es das Projekt zum Download (dies ist ein EAR-Export, die
Importanleitung findet man im Stateless-Beispiel): Stateful.ear
ACHTUNG: XDoclet-Builder im EJB-Projekt aktivieren !
Aufbau des Beispieles
a) Stateless Bean-Klasse mit Remote-Interfaces.
b) Stateful Bean-Klasse mit Remote-Interfaces.
c) Webclient: JSP-Seite
Inhalt:
Anlegen der Enterprise Application
Anlegen der GeometricModelBean
Anlegen der GeometricModelStoreBean
Anlegen des WebClient
Testen des WebClient
Anlegen der Application
Ein "Enterprise Application Project" mit dem Namen "Stateful" erstellen.
Zu erzeugende Module definieren. Dieses Beispiel benötigt ein EJB-Projekt und
ein Webprojekt.
Die J2EE-Hierarchie sollte so aussehen (die angezeigten Fehler kommen von einer nicht bestehenden
Internetverbindung, deshalb kein Valideren der XML-Dateien möglich):
Anlegen der StatelessBean
Die Schritte sind identisch mit denen des letzten Beispiels, einschließlich der Geschäftsmethoden.
Einziger Unterschied ist dass das Package ein anderes ist.
Abschließend definieren wir dass die Bean nur ein Remote-Interface haben soll (der Default ist
"Both"): in die XDoclet-Deklarationen von GeometricModelBean die Definition des View-Type einfügen:
* @ejb.bean name="GeometricModel"
* description="A session bean named GeometricModel"
* display-name="GeometricModel"
* jndi-name="GeometricModel"
* type="Stateless"
* transaction-type="Container"
* view-type="remote"
Jetzt sind immer noch die beim ersten Generieren erzeugten Remote- UND Local-Interfacecs vorhanden
(scheinbar ein Bug im WebTools-Plugin, er merkt nicht wenn wir die XDoclet-Deklaration ändern),
deshalb zuerst die beiden LocalInterfaces löschen, anschließend im Menü "Project" den
Punkt "Clean..." aufrufen und die Option "Clean all projects" auswählen.
Vorbereiten der Business-Methoden: die eigene Exception-Klasse "InvalidParameterException"
zufügen (siehe Anleitung im Stateless-Beispiel).
Hinzufügen der Business-Methoden:
Die Bean-Klasse "StatelessBean" wird bearbeitet und zwei methoden "computeCuboidVolume" und "computeCuboidSurface" zugefügt.
Der Code ist mit dem aus dem letzten Beispiel identisch, einziger Unterschied: in der XDoclet-
Deklaration wird die Methode ins Remote-Interface eingebunden:
* @ejb.interface-method
* view-type="remote"
*/
public double computeCuboidSurface(double a, double b, double c)
throws InvalidParameterException {
Anlegen der StatefulBean
Die Bean hat den Namen "GeometricModelStoreBean" im Package "com.knauf.ejb.stateful".
Im nächsten Schritt muss als "Sitzungstyp" natürlich "Stateful" gewählt werden.
Wie bei der vorherigen Bean ändern wir in der XDoclet-Deklaration den View-Type auf "Remote",
damit nur Remote-Interfaces erzeugt werden.
Implementieren der Bean:
- Es müssen die Membervariablen "vectorA", "vectorB" und "vectorC" zugefügt werden
- In ejbCreate müssen die drei Vektoren initialisiert werden.
- Die Business-Methoden "addCalculation" und "getAllCalculations" werden implementiert.
.
Die beiden Methoden werden dem Remote-Interface zugefügt.
Anlegen des Webclients
In der J2EE-Hierarchie einen Rechtsklick auf "Dynamic Web Projects" -> "StatefulWeb" ->
"WebContent" ausführen und im Contextmenü "New" -> "Other..." -> "Web" -> "JSP" wählen.
Als Dateiname wird "GeometricModelTest" angegeben.
Nach dem Klick auf "Finish" hat man die JSP-Seite erstellt und kann den Quellcode
der JSP-Datei einfügen.
Nachbearbeitung:
Damit die JSP-Seite die EJB referenzieren kann, muss eine Referenz auf die JAR-Datei zugefügt werden.
Dazu einen Rechtsklick auf den J2EE-Hierarchie-Knoten "Dynamic Web Projects \ StatefulWeb" ausführen und "Properties" wählen.
Unter dem Punkt "J2EE Module Dependencies" -> "J2EE Modules" wählt man die Option "Use EJB Client JARs" und setzt den
Haken beim JAR der EJB-Datei.
Deklaration der EJB-Referenzen:
Da wir hier kein Servlet verwenden greift XDoclet nicht und wir müssen "web.xml" manuell editieren.
Per Doppelklick auf "DynamicWebProjects" -> "StatefulWeb" -> "WebContent" -> "WEB-INF" -> "web.xml"
öffnen. im Elelemt "web-app" wird folgendes eingefügt:
<ejb-ref>
<ejb-ref-name>ejb/GeometricModel</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.knauf.ejb.stateful.GeometricModelHome</home>
<remote>com.knauf.ejb.stateful.GeometricModel</remote>
<ejb-link>GeometricModel</ejb-link>
</ejb-ref>
<ejb-ref>
<ejb-ref-name>ejb/GeometricModelStore</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>com.knauf.ejb.stateful.GeometricModelStoreHome</home>
<remote>com.knauf.ejb.stateful.GeometricModelStore</remote>
<ejb-link>GeometricModelStore</ejb-link>
</ejb-ref>
Die JSP-Seite "GeometricModelTest.jsp" soll als Startseite möglich sein. Auch das stellen
wir über "web.xml" ein:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>GeometricModelTest.jsp</welcome-file>
</welcome-file-list>
Testen des Webclients
Der Test erfolgt über diese URL: http://localhost:8080/StatefulWeb
Version 1.0.0.1, Stand 27.10.2005
Historie:
1.0.0.0 (18.09.2005): Erstellt
1.0.0.1 (27.10.2005): Screenshot für JAR-Dependency an WPT 1.0M8 angepaßt.
EAR-Datei: Local Interfaces entfernt, GeometricModelBean ist Stateless.
Verweis auf zu aktivierenden XDoclet-Builder.