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.
Erzeugen einer Application (Module)
Die J2EE-Hierarchie sollte so aussehen (die angezeigten Fehler kommen von einer nicht bestehenden Internetverbindung, deshalb kein Valideren der XML-Dateien möglich):
Erzeugte J2EE-Hierarchie


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.
Stateless Session Bean, Step 1
Stateless Session Bean, Step 2
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".
Stateful Session Bean, Step 1
Im nächsten Schritt muss als "Sitzungstyp" natürlich "Stateful" gewählt werden.
Stateful Session Bean, Step 2
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:

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.
JSP-Seite
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.
Webclient, EJB-Referenz
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.