Beispiel: Stateless Session Bean


Beispiel für eine Stateless Session Bean, auf die per Webclient und mittels Application Client zugegriffen wird (Sun Application Server).

Aufbau des Beispieles


a) Bean-Klasse mit Local und Remote-Interfaces.
b) Webclient: JSP-Seite
c) WebClient: Servlet
d) App-Client.


Quellcode

Der Quellcode des Beispiels wurde als Projekt vom Typ "Dynamic Web Project" erstellt, siehe allgemeine Eclipse-Anleitung für den SunAppServer.
Hier gibt es den Code als Export (siehe Anleitung zum Importieren eines Dynamic Web Projects) StatelessExport.zip.
Hier steckt die EAR-Datei des Deploytools: Stateless.ear

Anlegen der Application

Schritt 1: Starten des Deploytools (entweder im Startmenü über "Programme"\"Sun Microsystems"\ "Application Server"\"Deploytool" oder durch Aufruf von "C:\Programme\Sun\AppServer\bin\deploytool.bat").
Schritt 2: Anlegen einer neuen Application über "File"->"New"->"Application...". Im Textfeld "Application File Name" gibt man den Namen der anzulegenden EAR-Datei an. Im Feld "Application Display Name" wird der Anzeigename angegeben, wie ihn das Deploytool (oder später auch der Application Server) anzeigt.
Erzeugen einer Application


Deploy der StatelessBean

Die Application im Deploytool auswählen.
Im Menü "File" den Punkt "New" -> "Enterprise Bean" wählen. Es öffnet sich der Assistent zum Anlegen einer Bean.
Schritt 1: Einstellungen siehe Screenshot. In der Radiobutton-Gruppe "Jar-Location" wird (falls nicht automatisch vorgewählt) der Punkt "Create New JAR Modul in Application" gewählt, die Anwendung sollte die eben erzeugte sein.
Rechts wird ein JAR-Name angegeben. In diesem JAR werden alle Klassen dieses Moduls gespeichert, es ist in der EAR-Datei enthalten. Im Beispiel ist dies "StatelessBeanJAR"
Schließlich muss der Inhalt des JARs definiert werden. Dies geschieht über "Edit Contents". Im oberen Baum wählt man die .class-Dateien (nur die der Bean und die Exception "InvalidParameterException", nicht aber den Application-Client, dessen .class-Datei sich im selben Verzeichnis befindet) und klickt auf "Add". Die ".class"-Dateien liegen im Unterverzeichnis ".deployables\Stateless\WEB-INF\classes\com\knauf\ejb\stateless" unseres Workspaces.
Bean-Deploy, Schritt 1a

Bean-Deploy, Schritt 1
Schritt 2: Bean-Klasse sowie die Interfaces auswählen.
Bean-Deploy, Schritt 2
Damit ist das Bean-Deploy fast fertig. Im nächsten Schritt belässt man den Radiobutton "Expose bean as web service endpoint" auf "No" und kann auf "Finish" klicken.

Deploy der Web-Anwendung

Schritt 1: Hinzufügen einer neuen Web Componente mit der JSP, dem Servlet, Local/Remote Interface
und Local/Remote Home der Bean sowie der Exception-Klasse "InvalidParameterException". Den Assistenten erreicht man über "File" -> "New" -> "Web Component..."
Webclient Schritt 1
Schritt 2: Typ der Komponente ist "JSP Page"
Webclient Schritt 2
Schritt 3: Als JSP-Filename die einzige JSP-Seite der Anwendung verwenden.
Webclient Schritt 3

Für das Deploy des Servlets erneut eine Webcomponente zu der bestehenden WAR-Datei zufügen. Es müssen keine weiteren Dateien gewählt werden, da die Servlet-Klasse bereits im vorherigen Schritt gewählt war.
Schritt 2: Typ der Komponente ist diesmal "Servlet".
Schritt 3: Die Servlet-Klasse auswählen, alle anderen Werte auf Defaults belassen.
Servlet Schritt 3

Nachbearbeitung


In der WebApp müssen die benötigten EJB-Referenzen zugefügt werden. Dazu die WebApplication auswählen und auf der Registerkarte "EJB Ref's" den Button "Add" klicken.
EJB-Referenzen der Webapplication
Remote-Interfaces: "ejb/GeometricModel" referenziert "com.knauf.ejb.stateless.GeometricModelHome" und "com.knauf.ejb.stateless.GeometricModel". Hier haben wir in der Group Box "Target EJB" die Wahl zwischen einem "Enterprise Bean Name" und einem JNDI Name. Wir wählen hier den "Enterprise Bean Name" da die J2EE-Verifikation bei Verwendung von "JNDI Name" eine Warnung ausspuckt. Wahrscheinlich weil der JNDI-Name nur für Referenzen innerhalb EJBs gültig ist, nicht aber bei Web-Clients die theoretisch auf einem anderen Server laufen könnten.
Remote-Referenzen
Local Interfaces: "ejb/LocalGeometricModel" referenziert "com.knauf.ejb.stateless.LocalGeometricModelHome" und "com.knauf.ejb.stateless.LocalGeometricModel".
Local-Referenzen

Auf der Registerkarte "General" eine Context Root angeben, z.B. "stateless".
Context-Root der Webapplication
Jetzt ist der Webclient über http://localhost:8080/stateless/ erreichbar. Es erscheint eine Tomcat-Standard-Seite mit einer Auflistung aller Dateien in diesem Context. Man muss die JSP "GeometricModelTest.jsp" auswählen. Für Fortgeschrittene: Man kann die JSP-Datei unter "File Ref's" als "Welcome File" angeben und erhält sie dann direkt beim Aufrufen des obenstehenden Links.

Für das Servlet muss ein Alias angelegt werden, der den Namen angibt, unter dem es von außen erreichbar ist. Dies geschieht, indem man die Servlet-Komponente wählt und auf der Registerkarte "Aliases" einen Alias namens "/servlet/GeometricModelServlet" zufügt. Wichtig ist, dass der Servletname "GeometricModelServlet" lautet, da er so im Code beim Aufbau des Formulars verwendet wird.
Das Servlet ist über http://localhost:8080/stateless/servlet/GeometricModelServlet erreichbar.
Servlet-Alias


Deploy des Application Clients


Durch Aufruf von "File" -> "New" -> "Application Client..." gelangt man in den Assistenten für Application Clients. Schritt 1: Hinzufügen eines Application Clients, bestehend aus der Application-Datei, den Interfaces der Bean und der Exception-Klasse "InvalidParameterException".
Application Client, Schritt 1
Schritt 2: Auswählen der MainClass "GeometricModelApplicationClient".

Nachbearbeitung: Hinzufügen der EJB-Referenz. Wichtig: Es MUSS das RemoteInterface sein, die Eingabe einer lokalen Referenz ist im Dialog möglich, ist allerdings inhaltlich falsch und verursacht ungültiges XML in der Config-Datei.


Endgültiges Deploy

Für den ApplicationClient müssen wir ein ClientJar zurückgeben lassen. Hierzu die Checkbox "Return client jar" setzen und ein Zielverzeichnis irgendwo im Dateisystem wählen. Der Name der JAR-Datei ergibt sich aus dem Namen, den man beim Erstellen des ApplicationClients im Deploytool angegeben hat. In der Version "2004Q4" und früher des AppServers hieß diese Datei "StatelessAppClient.jar", in Version "8_1_02_2005Q2" nur noch "StatelessClient.jar" (vermutlich weil früher der "EAR Display Name" für den Dateinamen verwendet wurde, mittlerweile der Name der ear-Datei)
Deploy
Start des Appclients durch diesen Aufruf
appclient -client StatelessAppClient.jar
bzw.
appclient -client StatelessClient.jar
"appclient" ist eine Bat-Datei im Verzeichnis "C:\Programme\Sun\AppServer\bin". Falls beim Aufruf die Meldung "Datei nicht gefunden" erscheint, fehlt wahrscheinlich der Pfad in der PATH-Umgebungsvariablen.
Hier gibt es eine Batch-Datei für das Starten des Application Clients: StatelessClient.bat