> Inhalt: Einführung in das Programmieren mit Java > Inhalt: Einführung in das Programmieren von Enterprise Java Beans |
|
Letzte
Bearbeitung dieses Dokuments: |
Voraussetzungen für das Verständnis dieses Dokuments:Grundkenntnisse in der Programmierung von Java (Klassen, Methoden, Schleifen) oder anderer Objekt-Orientierter Programmiersprachen (z.B. C++, Modula-2, Pascal). Kenntnisse im Umgang mit Eclipse; empfohlen ist das Durcharbeiten der Einführungsbeispiele für das Programmieren mit Java. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
In diesem Dokument werden zwei zusätzliche Tätigkeiten, durch die ein EJB (Enterprise Java Bean) für die Verwendung in Standard-Software tauglich wird, vorgestellt.
Das
Packen in eine Datei mit Enterprise-ARchive- (EAR-) Struktur.
Dieses
ermöglicht, neben der JAR-Datei mit den Klassen für das
EJB auch die Dateien für eine Web-Site (in einer Datei mit
Web-ARchive- / WAR-Struktur) in die EAR-Datei zu packen.
Damit
kann ein komplettes Programmpaket in die EAR-Datei gepackt und so
ausgeliefert werden.
Das
Ändern des JNDI-Namens des/der EJB-Klasse/n in der
JAR-Datei.
Damit kann bei Standard-Software flexibel auf die
Anforderungen des Anwenders reagiert werden wenn gefordert wird,
dass der JNDI-Namen bestimmten Namenskonventionen entsprechen muss.
Vorigerer Schritt: Packen in JAR-Dateien und 'deploy'
Packen
in eine EAR-Datei
* Konfigurationsdatei
application.xml
erstellen
* Erstellen
der 'Packaging Configuration' für die Enterprise-ARchive- (EAR-)
Datei
'Deploy'
der EAR-Datei im Java Application Server (JAS) und Test
* 'Deploy'
bei JBoss
* 'Deploy'
bei Glassfish
Ändern
des JNDI-Namens
* Konfigurationsdatei
ejb-jar.xml
erstellen
* Verzeichnis
'META-INF' mit Konfigurationsdatei in die Packaging Configuration
aufnehmen
Test
und Fehlersuche (erst nach Fertigstellung des Client-Programms
möglich)
Gesamter Code
am Ende des Tutorials
Datei
CountryConstants.java
Datei
ShowTimeDateBeanLocal.java
Datei
ShowTimeDateBeanRemote.java
Datei
ShowTimeDateBean.java
Datei
application.xml
Datei
ejb-jar.xml
Weitere Schritte und verwandte Dokumentation
Nächste
Tutorials:
Client-Programm
für Einfache Session Bean, EJB3-Standard
(Java_EJB_06)
oder
Session
Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07)
Schritt 3 Packen in JAR-Dateien und 'deploy' ausgeführt – und dessen Vorbedingungen auch.
JBoss-IDE Plugin in Eclipse installiert.
Konfigurationsdatei
application.xml
erstellen
Diese
Datei enthält die Anweisungen an den Java Application Server
(JAS) in Form einer XML-Struktur.
.
Die Bedeutung der einzelnen
XML-Elemente wird später im Detail erklärt
Der JAS erwartet die Datei 'application.xml' im Verzeichnis META INF. Dieses
Verzeichnis wird auf folgende Weise erstellt: |
|
Im geöffneten Fenster (New Folder) wird der Name des Verzeichnisses (META-INF / Bitte Großschreibung beachten !) erfasst und durch Anklicken der Schaltfläche [ Finish ] bestätigt. Anschließend ist das erstellte Verzeichnis in der Verzeichnisstruktur des Bereichs 'Package Explorer' zu sehen. |
|
Das gerade erstellte Verzeichnis (META-INF) wird mit der rechten Maustaste angeklickt und aus dem Kontext-Menu wird New > File ausgewählt. |
|
Im geöffneten Fenster (New File) wird der Name der Datei (application.xml / Bitte Kleinschreibung beachten !) erfasst und durch Anklicken der Schaltfläche [ Finish ] bestätigt. Anschließend ist das erstellte Verzeichnis in der Verzeichnisstruktur des Bereichs 'Package Explorer' zu sehen. |
|
Die XML-Struktur mit den Anweisungen für den JAS ist unter Gesamter Code am Ende des Schrittes > Datei application.xml dokumentiert und kann in die geöffnete Datei kopiert werden. |
|
Hier eine kurze Erklärung der Einträge in der Datei 'application.xml'.
<?xml
version
=
"1.0"
?>
Diese
Anweisung beschreibt welche Version von XML für die Struktur
verwendet wird.
<application>
.
. .
</application>
Dieses
XML-Element umfasst alle Beschreibungen für das
Anwendungsprogramm.
In diesem Schritt des Tutorials werden nur
die Teile für das EJB beschrieben.
In weiteren Schritten des
Tutorials werden dann die Teile für die Beschreibung von
Bibliotheken mit Java-Code und mit Beschreibungen für die
Verbindung zu Datenbanken vorgestellt.
<display-name>
JavaScout
EJB-Tutorial 05
</display-name>
Hier
wird eine Beschreibung des Anwendungsprogramms eingefügt.
Dieser
Text hat keine Funktion für die Ausführung des
Anwendungsprogramms.
Die meisten Java Application Server (JAS)
zeigen aber eine Übersicht der Archiv-Dateien an und dabei wird
dieser beschreibende Text ebenfalls angezeigt.
Das
XML-Element <module>
erlaubt
eine weitere Unterteilung.
Das Verwenden mehrerer
<module>
-Blöcke
ist bei größeren Anwendungsprogramm sinnvoll um einzelne
Archiv-Dateien in Themengruppen zusammen fassen zu können.
<ejb>
Java_EJB_05.jar
</ejb>
In
diesem XML-Element ist die Referenz auf das JAR (Java-ARchive) mit
den Klassen, die zum EJB (Enterprise Java Bean) gehören,
enthalten.
Erstellen
der 'Packaging Configuration' für die Enterprise-ARchive- (EAR-)
Datei
Das
Erstellen der Konfiguration und das Packen ist ähnlich wie
bereits im vorigen Schritt
Packen
der Dateien in Java-Archive (JAR) und 'deploy'
beschrieben;
deswegen sind die Beschreibungen in diesem Abschnitt auf eine
Kurzfassung beschränkt.
'Deploy'
der EAR-Datei im Java Application Server (JAS) und Test
Eine
ausführliche Anleitung mit Screenshots für das 'deploy'
einer JAR-Datei finden Sie im vorigen Schritt
Packen
der Dateien in Java-Archive (JAR) und 'deploy'
.
Nachdem
das 'deploy' einer EAR-Datei nur unwesentlich davon abweicht sind
hier nur wesentliche Abweichungen ausführlich dokumentiert.
Auf jeden Fall ist es notwendig, die zuvor an den JAS übergebene JAR-Datei 'Java_EJB_05.jar' zu löschen. Das Löschen ist weiter unten beschrieben.
Eclipse
bietet zwar die Möglichkeit die fertige EAR-Datei per
'Mausklicks' an verschiedene Java Application Server (JAS) zu
übergeben ('deploy').
Die Konfiguration und die
Benutzeroberfläche dieser Funktionalität ist aber häufigen
Änderungen unterzogen – deswegen verzichte ich auf eine
Beschreibung dieser Möglichkeit.
Neuere
Versionen verschiedener JAS bieten andere komfortable Möglichkeiten
eine Archiv-Datei zu übergeben:
JBoss
durch Kopieren der fertigen Archiv-Datei in das entsprechende
Verzeichnis des JAS.
Wenn JBoss manuell in einem
'Terminal'-Fenster gestartet ist, werden in diesem Fenster auch eine
Bestätigungsmeldung bzw. eventuelle Fehlermeldungen angezeigt.
Glassfish
ermöglicht das 'Hochladen' der Archiv-Datei über einen
Webbrowser.
Damit kann auch ein 'deploy' ausgeführt werden
wenn Glassfish auf einem anderen Computer gestartet ist.
Zum
eingeben des Kommandos ist ein 'Terminal'-Window notwendig.
Das
kann bei Fedora-Linux über die Auswahl Anwendungen
> Systemwerkzeuge > Terminal aufgerufen
werden.
Zum
Entfernen der im vorigen Schritt übergebenen Datei
'Java_EJB_05.
jar
'
wird
im Terminal-Window für das 'deploy' folgendes Kommando
eingegeben:
rm
/jboss_home
/server/default/deploy/Java_EJB_05.jar
Zum
Übergeben der EAR-Datei
wird
im Terminal-Window für das 'deploy' folgendes Kommando
eingegeben:
cp
/workspace_and_project_directory
/Java_EJB_05.ear
/jboss_home
/server/default/deploy
Im
Fenster, in dem JBoss gestartet wurde, wird folgende Bestätigung
angezeigt::
Ein
Test der Änderungen ist erst in
Tutorial:
Client-Programm für Einfache Session Bean, EJB3Standard
(Java_EJB_06) > Verbindungsdaten zum JAS codieren, Methode des EJB
aufrufen und Ergebnis anzeigen, Code testen
möglich.
Im
folgenden Beispiel ist 192.168.0.99
die
TCP/IP-Adresse des Computer auf dem Glasfish gestartet ist.
4848
ist
das Port unter dem die Administrator-Konsole zum Übergeben des
Archivs aufgerufen werden kann.
8080
ist
das Port unter dem die mit dem Archiv übergebene Anwendung
aufgerufen werden kann.
Die
TCP/IP-Adresse (192.168.0.99)
wird bei Ihrer Installation mit hoher Wahrscheinlichkeit verschieden
sein.
Die Nummern der Ports (4848
und
8080)
werden vom Installationsprogramm so festgelegt und werden auch bei
Ihrer Installation gültig sein – sofern Sie die Ports
nicht nach der Installation geändert haben.
Eine detaillierte Beschreibung für das 'deploy' bei Glassfish finden Sie unter Glassfish Java Application Server (JAS) installieren > Verwalten des JAS über Webbrowser und 'deploy'eines WAR(Web-ARchive); in diesem Abschnitt werden nur die wesentlichsten Schritte dokumentiert
Eröffnen Sie einen Webbrowser und geben Sie als URL die TCP/IP-Adresse (im Beispiel: 192.168.0.99) und den Port (Standardwert nach der Installation: 4848) für die Glassfish-Administration ein. Anschließend erscheint die Anmeldekonsole (ohne Abbildung); auf dieser geben Sie bitte den 'User Name' (Standardwert nach der Installation: admin) und das 'Password' (Standardwert nach der Installation: adminadmin) ein und klicken danach mit der linken Maustaste auf die Schaltfläche [ Login ]. |
|
Zuerst
muss die im vorigen Schritt übergebene Datei
'Java_EJB_05.jar' entfernt werden. Um ein 'undeploy' von 'Java_EJB_05.jar' zu beginnen klicken Sie bitte in der Liste den Punkt 'EJB Modules' an. |
|
Um ein 'undeploy' von 'Java_EJB_05.jar' auszuführen markieren Sie bitte die Checkbox (links neben dem Eintrag in der Liste) und klicken anschließend auf die Schaltfläche [ Undeploy ]. |
|
In der folgenden Anzeige können Sie erkennen, dass die markierte Archiv-Datei nicht mehr vorhanden ist. |
|
Um eine Datei mit einen Enterprise-Archive (EAR) an den JAS zu übergeben ('deploy') klicken Sie bitte in der Liste den Punkt 'Enterprise Applications' an und in der anschließend im rechten Teil erscheinenden Anzeige die Schaltfläche [ Deploy ]. |
|
Im
folgenden Fenster klicken Sie zuerst auf die Schaltfläche
[ Durchsuchen ] und wählen im
anschließend geöffneten Fenster die erstellte
Archiv-Datei aus. Durch einen Klick auf die Schaltfläche [ OK ] (rechts oben) wird das 'deploy' der Archiv-Datei ausgeführt. |
|
Im folgenden Fenster sehen Sie als Bestätigung eine Liste aktiven EAR-Anwendungen des JAS. |
|
Ein
Test der Änderungen ist erst in
Tutorial:
Client-Programm für Einfache Session Bean, EJB3Standard
(Java_EJB_06) > Verbindungsdaten zum JAS codieren, Methode des EJB
aufrufen und Ergebnis anzeigen, Code testen
möglich.
Bei JBoss (getestet mit Versionen 5.0.1 und 5.1.0, jeweils 'GA') funktioniert das JAR mit der Standard-Datei 'ejb-jar.xml' nicht ! Durch
einen Fehler in den Versionen 5.0.1 GA und 5.1.0 GA kann JBoss die
Anweisungen in der Datei 'ejb-jar.xml' nicht verarbeiten und es
tritt beim 'deploy' eine 'Null Pointer Exception' auf. Solange der Fehler durch eine neuere Version von JBoss nicht behoben ist empfehle ich, mit Glassfish Version 2.1.1 zu testen ! |
Um
Enterprise Java Beans (EJB) universell einsetzen zu können sieht
die Spezifikation für EJB vor, dass ein JAS (Java Application
Server) keine speziellen Anforderungen bei der Entwicklung von EJB
stellen darf.
Umgekehrt heißt das, dass bei der Entwicklung
eines EJB nur die Spezifikationen für EJB (aktuell EJB 3)
beachtet werden müssen und nicht schon auf den (später zu
wählenden JAS) Rücksicht genommen werden muss.
Das
vereinfacht die Entwicklung von Standard-Software erheblich.
Zum
Testen während der Entwicklung wurde in der Injection
@Stateless(name=..)
(siehe
Schritt 2:
Codieren
> Class ShowTimeDateBean mit den Implementierungen der Methoden
erstellen
)
ein JNDI-Namen festgelegt.
Mit diesem JNDI-Namen können
Client-Programme (siehe Tutorial:
Client-Programm für Einfache Session Bean, EJB3-Standard
(Java_EJB_06)
)
die Verbindung zum EJB herstellen.
Wenn
das entwickelte EJB in der Produktion eingesetzt wird, können
folgende Konflikte auftreten:
Der
vorgegebene JNDI-Name ist bereits einem anderen EJB
zugeordnet.
Dieser Fall wird bei einem entsprechend langen
JNDI-Namen, der z.B. auch den Hersteller des JNDI enthält,
nicht auftreten – ist aber statistisch nicht auszuschließen.
Beim
Einsatz von Standard-Software entspricht der definierte JNDI-Name
nicht den Vorgaben des Kunden (dem End-Anwender der Software).
Das
wird der Fall sein, wenn die Standard-Software in einem
Groß-Rechenzentrum mit hunderten oder gar tausenden EJBs
eingesetzt wird.
Um einen Überblick zu behalten ist es dort
üblich, einen Code für den Anwendungsbereich oder die
nutzende Sparte des Unternehmens in den JNDI-Namen aufzunehmen.
Die
Festlegung des 'nach außen wirksamen' JNDI-Namens wird in
diesem Abschnitt beschrieben.
Konfigurationsdatei
ejb-jar.xml
erstellen
Die
Datei 'ejb-jar.xml' kann eine Vielzahl von Konfigurationen enthalten;
für dieses Tutorial wird aber nur die Änderung des 'nach
außen wirksamen' JNDI-Namens konfiguriert.
Der JAS erwartet die Datei 'ejb-jar.xml' im Verzeichnis META INF innerhalb der Datei mit dem Java-ARchiv – in diesem Beispiel die Datei 'Java_EJB_05.jar'. Damit das jetzt zu erstellende Verzeichnis META INF nicht mit jenem Verzeichnis für das Enterprise-ARchiv (Datei 'Java_EJB_05.ear') kollidiert, wird das Verzeichnis META INF innerhalb des Verzeichnis 'gen' angelegt. Das
Verzeichnis wird auf folgende Weise erstellt: |
|
Im geöffneten Fenster (New Folder) wird der Name des Verzeichnisses (META-INF / Bitte Großschreibung beachten !) erfasst und durch Anklicken der Schaltfläche [ Finish ] bestätigt. Anschließend ist das erstellte Verzeichnis in der Verzeichnisstruktur des Bereichs 'Package Explorer' zu sehen. |
|
Das gerade erstellte Verzeichnis ('META-INF') wird mit der rechten Maustaste angeklickt und aus dem Kontext-Menu wird New > File ausgewählt. |
|
Im geöffneten Fenster (New File) wird der Name der Datei (ejb-jar.xml / Bitte Kleinschreibung beachten !) erfasst und durch Anklicken der Schaltfläche [ Finish ] bestätigt. Anschließend ist die erstellte Datei in der Verzeichnisstruktur des Bereichs 'Package Explorer' zu sehen. |
|
Die XML-Struktur mit den Anweisungen für den JAS ist unter Gesamter Code am Ende des Schrittes > Datei ejb-jar.xml dokumentiert und kann in die geöffnete Datei kopiert werden. |
|
Hier eine kurze Erklärung der Einträge in der Datei 'ejb-jar.xml'.
<?xml
version
=
"1.0"
?>
Diese
Anweisung beschreibt welche Version von XML für die Struktur
verwendet wird.
<ejb-jar
version
=
"3.0"
>
.
. .
</ejb-jar>
Dieses
XML-Element umfasst alle Beschreibungen für das EJB (Enterprise
Java Bean) innerhalb der JAR-Datei.
In diesem Schritt des
Tutorials wird nur jener Teil beschrieben, der für die
Definition eines 'nach außen wirksamen' JNDI-Namens notwendig
ist.
Wichtig
ist die Definition version
=
"3.0"
;
damit wird dem JAS mitgeteilt, dass dieses EJB dem EJB3-Standard
entspricht.
In diesem XML-Element können auch sehr
spezielle Definitionen enthalten sein – eine komplette
Erklärung würde aber die Aufgabe dieses Tutorials bei
weitem überschreiten.
Von Bedeutung ist noch die Definition
von 'Data-Sources' – das sind die Verbindung zu Datenbanken
oder anderen Datenquellen.
Dies wird im Tutorial:
Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07)
behandelt.
<display-name>
ShowDateTime
EJB
</display-name>
Hier
wird eine Beschreibung des Anwendungsprogramms eingefügt.
Dieser
Text hat keine Funktion für die Ausführung des
Anwendungsprogramms.
Die meisten Java Application Server (JAS)
zeigen aber eine Übersicht der Archiv-Dateien an und dabei wird
dieser beschreibende Text ebenfalls angezeigt.
<description>
EJB
aus dem JavaScout EJB-Tutorial 05
</description>
Hier
wird eine detailliertere Erklärung der Funktion des
Anwendungsprogramms eingefügt.
Dieser Text hat keine
Funktion für die Ausführung des Anwendungsprogramms.
Die
meisten Java Application Server (JAS) zeigen aber eine Übersicht
der Archiv-Dateien an und dabei wird dieser beschreibende Text
ebenfalls angezeigt.
Das
XML-Element <enterprise-beans>
beschreibt
die Gesamtheit der in die JAR-Datei gepackten EJB.
Das Verwenden
des <enterprise-bean>
-Blocks
grenzt die Konfiguration von EJB gegen andere Konfigurationen, z.B.
Data-Sources (Verbindungen zu Datenbanken), ab.
Das
XML-Element <session>
beschreibt
ein EJB vom Typ 'Session Bean'.
Das Verwenden mehrerer
<session>
-Blöcke
ist dann notwendig wenn mehrere Java-Klassen, die jeweils ein EJB
repräsentieren in eine JAR-Datei gepackt werden.
Durch den
<session>
-Block
wird dann jeweils ein EJB konfiguriert.
<ejb-name>
Java_EJB_05_Tutorial
</ejb-name>
In
diesem XML-Element ist die Referenz auf den bei der Injection
@Stateless(name=
"Java_EJB_05_Tutorial"
,..)
festgelegten
Namen eingetragen.
Die Injection
@Stateless(name=
"Java_EJB_05_Tutorial"
,..)
wurde
im Schritt 2:
Codieren
> Class ShowTimeDateBean mit den Implementierungen der Methoden
erstellen
innerhalb
des Java-Codes festgelegt.
<mapped-name>
mapped_ShowTimeDateBeanJNDI
</mapped-name>
In
diesem XML-Element ist der 'nach außen wirksame' JNDI-Namen
festgelegt.
Dieser Wert ersetzt den bei der Injection
@Stateless(name=
"Java_EJB_05_Tutorial"
,
mapped-name=
"ejb/ShowTimeDateBeanJNDI"
)
festgelegten
'mapped-name'.
Die Injection
@Stateless(name=
"Java_EJB_05_Tutorial"
,
mapped-name=
"ejb/ShowTimeDateBeanJNDI"
)
wurde
im Schritt 2:
Codieren
> Class ShowTimeDateBean mit den Implementierungen der Methoden
erstellen
innerhalb
des Java-Codes festgelegt.
Verzeichnis
'META-INF' mit Konfigurationsdatei in die Packaging Configuration
aufnehmen
Abhängig
von Ihrer Eclipse-Version bzw. des Plugins für die JBoss-IDE
kann das Verzeichnis 'META-INF' in Ihrer Packaging Configuration
bereits vorhanden sein.
Überspringen Sie in diesem Fall die
Anweisungen.
Zum Erstellen des Verzeichnisses 'META-INF' wird die Packaging Configuration für das JAR angeklickt, mit der rechten Maustaste das Kontext-Menu aufgerufen und daraus New Folder ausgewählt. |
|
Im
nachfolgend geöffneten Fenster (Create a folder) wird der
Name des Verzeichnisses ('META-INF') erfasst und durch Anklicken
der Schaltfläche [ OK ]
bestätigt. |
|
Im Bereich des 'Project archives' ist dann das erstellte Verzeichnis sichtbar. Die Struktur für die JAR-Datei kann durch Anklicken des kleinen Dreiecks links neben den Datei- bzw. Verzeichnis-Namen angezeigt oder verborgen werden. |
|
Als Nächstes wird definiert, welche Dateien und eventuell Unterverzeichnisse (samt Dateien und weiteren Unterverzeichnissen) in das Verzeichnis 'META-INF' der zu erstellenden Archiv-Datei aufgenommen werden. Dazu wird der gerade erstellte Eintrag für das Unterverzeichnis angeklickt, mit der rechten Maustaste das Kontext-Menu aufgerufen und daraus New Fileset ausgewählt. |
|
Im folgenden Fenster (Fileset Wizard) wird festgelegt, welche Dateien (und eventuell weitere Unterverzeichnisse mit Dateien) in die Archiv-Datei aufgenommen werden. Zum Auswählen des Unterverzeichnisses mit der/den Quell-Datei(en) wird die Schaltfläche [ Workspace... ] angeklickt. |
|
Im neu geöffneten Fenster (Select a destination) wird zum Unterverzeichnis mit der/den zu packenden Datei(en) manövriert (in diesem Tutorial: 'gen/META-INF') und die Auswahl durch Anklicken der Schaltfläche [ OK ] bestätigt. Nach dem Anklicken der Schaltfläche wird das Fenster wieder geschlossen. |
|
Im Fenster 'File Wizard' sehen Sie, dass die Auswahl der Dateien eingeschränkt wurde; die Auswahl ist im Feld 'Preview' gelistet. Als Filter für die ausgewählten Dateien wird im Eingabefeld 'Includes' der Wert */** eingegeben. */** bedeutet, dass alle Dateien im Unterverzeichnis und eventuell vorhandene Unterverzeichnisse mit den enthaltenen Dateien in die Archiv-Datei gepackt werden. Die Auswahl wird durch Anklicken der Schaltfläche [ Finish ] bestätigt. Nach dem Anklicken der Schaltfläche wird das Fenster wieder geschlossen. |
|
Im Bereich des 'Project archives' ist dann sichtbar, welche Filter-Kriterien für das Packen von Dateien in die Archiv-Datei angewendet werden. Die Struktur für die JAR-Datei kann durch Anklicken des kleinen Dreiecks links neben den Datei- bzw. Verzeichnis-Namen angezeigt oder verborgen werden. |
|
Nach
der Änderung der 'Packaging Configuration' ist ein neues 'Build'
für die JAR-Datei und (wenn erstellt) die EAR-Datei
notwendig.
Die
Anleitungen dazu finden Sie unterPacken
der Dateien in Java-Archive (JAR) und 'deploy' > Jar-Datei neu
erstellen
undErstellen
der 'Packaging Configuration' für die Enterprise ARchive- (EAR-)
Datei > EAR-Datei erstellen
.
Die
neue Datei muss auch, so wie im Abschnitt
Deploy
der EAR-Datei im Java Application Server (JAS) und Test
beschrieben,
'deployed' werden.
Ein
Test der Änderungen ist erst in
Tutorial:
Client-Programm für Einfache Session Bean, EJB3Standard
(Java_EJB_06) > Verbindungsdaten zum JAS codieren, Methode des EJB
aufrufen und Ergebnis anzeigen, Code testen
möglich.
Da
ist dann die Anweisung
remoteShowTimeDateBean
= (ShowTimeDateBeanRemote)
initialContext.lookup("ejb/ShowTimeDateBeanJNDI"
);
(mit
dem JNDI-Namen aus der Injection
@Stateless(name=
"Java_EJB_05_Tutorial"
,
mapped-name=
"ejb/ShowTimeDateBeanJNDI"
)
)
durch
die Anweisung
remoteShowTimeDateBean
= (ShowTimeDateBeanRemote)
initialContext.lookup("mapped_ShowTimeDateBeanJNDI"
);
(mit
dem JNDI-Namen aus der soeben erstellten Konfigurations-Datei
'ejb-jar.xml')
zu ersetzen.
Test
und Fehlersuche (erst nach Fertigstellung des Client-Programms
möglich)
Ein
Test und eine eventuelle Suche nach Fehlern ist erst nach
Fertigstellung des Client-Programms (
Tutorial:
Client-Programm für Einfache Session Bean, EJB3-Standard
(Java_EJB_06)
)
möglich.
In diesem Dokument finden Sie im Abschnitt >
Verbindungsdaten zum JAS codieren, Methode des EJB aufrufen und
Ergebnis anzeigen; Code testen
die
Anleitung für den Test.
Sollte der Test nicht das gewünschte
Ergebnis liefern finden Sie unter >
Hinweise zur Fehlersuche
eventuelle
Ursachen dafür.
Gesamter
Code am Ende des Schrittes
package
js_ejb05.staticvalues;
import
java.util.*;
/**
*
* @author kurt(at)javascout[dot]biz
* @date
2009-02-07
*
* @description
* Interface
mit den Werten für möglichen Input in das
EJB
* Java_EJB_05 (erstellt im Tutorial für
das Session Bean).
* Nähere Beschreibungen
sind bei den Datenstrukturen zu finden.
*
*
@change-log
* when who why
*
--------------------------------------------------------
*
*/public
interface
CountryConstants
{
/*
* Zwei-dimensionales
Array für die 'implementierten' Länder-Codes und
* den
erklärenden Text in der jeweiligen Landessprache. */
public
static final
String[][]
Country
=
{
{"US"
,
"Time/Date-representation
in US-style"
},
{"FR"
,
"Indication
de Temps et Date en Format francaise"
},
{"DE"
,
"Datums/Zeit-Anzeige
in deutschem Format"
},
};/*
* Array
für die 'Locale' der einzelnen Länder. Im Locale iat auch
* die Information, wie Datum/Zeit in einem Textstring
dargestellt wird. */
public
static final
Locale[]
Country_Locale
=
{
Locale.US
,
Locale.FRANCE
,
Locale.GERMANY
,
};}
package
js_ejb05.ejb.interfaces.local;
/*
* Basisklasse
für die 'lokale' Funktionalität eines EJB gemäß
dem EJB3-Standard.
* 'Lokal' bedeutet, dass die
Methoden des EJB von einem anderen EJB innerhalb des
* Java-Application-Server (JAS) aufrufbar sind.
* Die
Funktionalität dieser Basisklasse wird nicht durch 'Vererbung'
übertragen
* sondern durch die (im EJB3-Standard
neue) 'Injection': @Local . */
import
javax.ejb.Local;
/*
'Injection' der Funktionalität für ein 'lokales' EJB
*/@Local
/**
*
* @author kurt(at)javascout[dot]biz
* @date
2009-02-07
*
* @description
* Interface
mit den Methoden die von anderen EJBs innerhalb des JAS aufrufbar
sind.
*
* @change-log
*
when who why
*
--------------------------------------------------------
*
*/public
interface
ShowTimeDateBeanLocal
{
/*
* Methode
zum Bilden einer länder-spezifischen Zeichenkette mit aktuellem
Datum und Uhrzeit.
* Die Implementierung der Methode
erfolgt in der Klasse 'ShowTimeDateBean'. */
public
String[]
getTimeDateString(String parmCountryCode);
}
package
js_ejb05.ejb.interfaces.remote;
/*
* Basisklasse
für die 'entfernte' Funktionalität eines EJB gemäß
dem EJB3-Standard.
* 'Entfernt / remote' bedeutet, dass
die Methoden des EJB von einem Client-Programm
* außerhalb
des Java-Application-Server (JAS) aufrufbar sind.
* Die
Funktionalität dieser Basisklasse wird nicht durch 'Vererbung'
übertragen
* sondern durch die (im EJB3-Standard
neue) 'Injection': @Remote . */
import
javax.ejb.Remote;
/*
'Injection' der Funktionalität für ein 'remote' EJB
*/@Remote
/**
*
* @author kurt(at)javascout[dot]biz
* @date
2009-02-07
*
* @description
* Interface
mit den Methoden die von Client-Programmen außerhalb des JAS
aufrufbar sind.
*
* @change-log
*
when who why
*
--------------------------------------------------------
*
*/public
interface
ShowTimeDateBeanRemote
{
/*
* Methode
zum Bilden einer länder-spezifischen Zeichenkette mit aktuellem
Datum und Uhrzeit.
* Die Implementierung der Methode
erfolgt in der Klasse 'ShowTimeDateBean'. */
public
String[]
getTimeDateString(String parmCountryCode);
}
package
js_ejb05.ejb.beans;
/*
* Basisklasse
für ein Stateless Session Bean.
* 'Stateless'
bedeutet, dass in einem Bean-Objekt keine Werte 'aufgehoben' werden.
* Durch die Anweisung 'Stateless' braucht der JAS
(Java Application Server) nicht ein
* neues Objekt der
Bean konstruieren wenn eine Anforderung eines anderen Clients
erfolgt
* sondern kann die angeforderte Methode des
bereits bestehenden Bean-Objekts ausführen.
* Die
Funktionalität dieser Basisklasse wird nicht durch 'Vererbung'
übertragen
* sondern durch die (im EJB3-Standard
neue) 'Injection': @Stateless . */
import
javax.ejb.Stateless;
/*
* Basisklassen
für die Ermittlung von aktuellem Datum und Uhrzeit und
Umwandlung in
* länderspezifischen Text. */
import
java.text.DateFormat;
import
java.util.Date;
/*
* Interface
mit den definierten Länder-Codes und dazu passender
(Java-Klasse) 'Locale'. */
import
js_ejb05.staticvalues.CountryConstants;
/*
* Interfaces
mit den Methoden die für 'lokalen' und 'entfernten / remote'
Aufruf freigegeben sind. */
import
js_ejb05.ejb.interfaces.local.*;
import
js_ejb05.ejb.interfaces.remote.*;
/*
* 'Injection' der Funktionalität für ein
'stateless' EJB. */@Stateless(name=
"Java_EJB_05_Tutorial"
,
mappedName=
"ejb/ShowTimeDateBeanJNDI"
)
/**
*
* @author kurt(at)javascout[dot]biz
* @date
2009-02-07
*
* @description
* Klasse
für das Session-Bean Java_EJB_05 – erstellt im
gleichnamigen Tutorial.
* Nähere
Beschreibungen der Funktionalität sind bei den Methoden zu
finden.
*
* @change-log
*
when who why
*
--------------------------------------------------------
*
*/public
class
ShowTimeDateBean
implements
ShowTimeDateBeanLocal,
ShowTimeDateBeanRemote
{
/*
* Implementierung
derMethode zum Bilden einer länder-spezifischen Zeichenkette
* mit aktuellem Datum und Uhrzeit. */
public
String[]
getTimeDateString(String parmCountryCode) {
/* Array
für return erstellen. */
String[]
arrayReturnValue = new
String[2];
/* 1.
Teil des Array: übergebener Länder-Code.
*/
arrayReturnValue[0]
= parmCountryCode;/* 2.
Teil des Array: vorläufig
Fehler-Hinweis;
* wenn
übergebener Wert gültig ist: Text mit Datum Uhrzeit später.
*/
arrayReturnValue[1]
= "Unbekannter
Länder-Code"
;
/*
* Durchsuchen
des Arrays ob der Input-Parameter darin vorhanden ist. */
int
intIndex;
int
intCountryArraySize
= CountryConstants.
Country
.
length
;
for
(intIndex
= 0; intIndex < intCountryArraySize; intIndex++) {
/* Vergleichen
ob der Länder-Code aus dem Input-Parameter jenem im Array
entspricht. */
if
(parmCountryCode.trim().compareToIgnoreCase(
CountryConstants.Country
[intIndex][0].trim())
== 0) {
/* Passenden
Array-Eintrag gefunden;
* Zeit/Datum ermitteln, in
Länderspezifischen String bringen und zurückliefern.
*/
Date
now = new
Date();
/* Sprachspezifischen
String in den Länderspezifischen String übertragen.
*/
arrayReturnValue[1]
= CountryConstants.Country
[intIndex][1]
+
": "
;
/* Datum
in voller Länge entsprechend dem länderspezifischen Format
aufbereiten
* und zum Länderspezifischen String
hinzufügen. */
arrayReturnValue[1]
+= DateFormat.getTimeInstance(
DateFormat.FULL
,
CountryConstants.
Country_Locale
[intIndex]).format(now);
/* for-loop
beenden. */
break
;
}
}/*
* Gefülltes
Array zurückliefern. */
return
arrayReturnValue;
};}
<?xml
version
=
"1.0"
?>
<application>
<display-name>JavaScout
EJB-Tutorial
05
</display-name>
<module>
<ejb>Java_EJB_05.jar
</ejb>
</module></application>
<?xml
version
=
"1.0"
?>
<ejb-jar
version
=
"3.0"
>
<display-name>ShowDateTime
EJB
</display-name>
<description>EJB
aus dem JavaScout EJB-Tutorial
05
</description>
<enterprise-beans>
<session>
<ejb-name>Java_EJB_05_Tutorial
</ejb-name>
<mapped-name>mapped_ShowTimeDateBeanJNDI
</mapped-name>
</session>
</enterprise-beans></ejb-jar>
Dokument |
Inhalt |
Client-Programm für Einfache Session Bean, EJB3-Standard (Java_EJB_06) |
In diesem Tutorial
wird ein einfaches Client-Programm, das die in diesem Tutorial
entwickelte EJB nutzt, vorgestellt. |
Einfache Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) |
In diesem Tutorial wird gezeigt, wie in einer EJB-Klasse die Verbindung zu einer Datenbank hergestellt wird und Datenbank-Operationen ausgeführt werden. |