> Inhalt: Einführung in das Programmieren mit Java > Inhalt: Einführung in das Programmieren von Enterprise Java Beans 

Tutorial: Einfache Session Bean, EJB3-Standard (Java_EJB_05) – Packen in EAR-Datei und Ändern des JNDI-Namens

* Bitte beachten Sie die Hinweise und Bestimmungen bezüglich Urheberrecht, Haftungsausschluß und geschützte Marken oder Warenzeichen die für dieses Web-Dokument und möglicherweise auch für 'verlinkte' Dokumente gelten.

  • Der Betreiber dieser Web-Site (www.javascout.biz) ist nicht verantwortlich für den Inhalt von Web-Sites, die innerhalb dieses Web-Dokumentes oder anderer Dokumente von www.javascout.biz verlinkt sind.

  • Wenn dieses Web-Dokument oder andere Dokumente dieser Web-Site (www.javascout.biz) Rechte von Ihnen verletzen, oder sie glauben, dass Rechte Anderer (Dritter Personen) dadurch verletzt werden, informieren Sie bitte den Betreiber dieser Web-Site.
    Eine E-Mail können Sie ganz einfach durch anklicken des Symbols oder Textes im Frame rechts oben senden.

Dieses Dokument drucken.

 Letzte Bearbeitung dieses  Dokuments:
2010-03-24

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:
Ca. 15 bis 30 Minuten, je nach Routine im Umgang mit Eclipse
.

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.

Inhaltsverzeichnis:

Vorigerer Schritt: Packen in JAR-Dateien und 'deploy' 

Vorbedingungen 

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) 

Vorbedingungen

zum Inhaltsverzeichnis

Packen in eine EAR-Datei

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:
Das Project (Java_EJB_05) wird mit der rechten Maustaste angeklickt und aus dem Kontext-Menu wird New > Folder ausgewählt.

 
 

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'.

zum Inhaltsverzeichnis

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.

Zuerst wird das 'Project' ausgewählt.

Anschließend wird im Bereich 'Project archives' durch Auswählen des 'Project' und Anklicken der rechten Maustaste das Kontext-Menu aufgerufen.

Daraus wird New Archive > EAR durch Anklicken mit der linken Maustaste ausgewählt.

 
 

Im anschließend geöffneten Fenster ('New EAR') sind die Standardwerte bereits vorgegeben.
Für dieses Tutorial werden die Standardwerte beibehalten und durch Anklicken der Schaltfläche
[ Next > ] das nächste Fenster aufgerufen.

Im nachfolgenden Fenster wird die Struktur der zu erstellenden Datei mit dem Enterprise-Archiv angezeigt.

Durch die Auswahl 'EAR' für das neue Archiv wurde bereits ein Unterverzeichnis 'META-INF' erstellt und mit den passenden Filterkriterien versehen.

Diese Struktur wird durch Anklicken der Schaltfläche [ Finish ] bestätigt.

  
 

Die erstellte Konfigurationsbeschreibung für das Enterprise-Archiv wird im Bereich für die 'Project archives' angezeigt.

Um zu definieren, welche JAR-Datei (mit den Klassen des EJB) in die Archiv-Datei gepackt werden soll, wird die Datei markiert und mit der rechten Maustaste das Kontext-Menu angezeigt.

Daraus wird New Fileset ausgewählt.

 
 

In diesem Schritt des Tutorials enthält das Enterprise-ARchive als Inhalt nur die Dateien für das EJB.
Diese wurden bereits in die JAR-Datei gepackt.

Deswegen wird als Filterkriterium (Eingabefeld 'Includes') nur die zugehörige JAR-Datei eingegeben.

Die Auswahl wird durch Anklicken der Schaltfläche [  Finish  ] bestätigt und damit das Fenster geschlossen.

Im Bereich des 'Project archives' sind dann die Filterkriterien für die Auswahl der zu packenden Dateien zu sehen.

Unter Umständen sind die Verzeichnisse und Filterkriterien nicht sofort sichtbar sondern werden erst angezeigt, wenn mit der linken Maus-Taste das kleine Dreieck neben dem Project bzw. dem Verzeichnis angeklickt wird.

 
 

Letzte Tätigkeit in diesem Abschnitt ist, die EAR-Datei mit den definierten Dateien als Inhalt zu erstellen.

Dazu wird mit der linken Maustaste der Name der zu erstellenden Datei ('Java_EJB_05.ear' in diesem Tutorial) angeklickt und aus dem Kontext-Menu Build Archive (Full) ausgewählt.
Das Erstellen der EAR-Datei dauert weniger als eine Sekunde.

Die erstellte Datei ist im Bereich 'Package Explorer' als Teil des 'Project' sichtbar.

Unter Umständen sind die Verzeichnisse und Dateien nicht sofort sichtbar sondern werden erst angezeigt, wenn mit der linken Maus-Taste das kleine Dreieck neben dem Project bzw. dem Verzeichnis angeklickt wird.

  
 



zum Inhaltsverzeichnis

'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:

zum Inhaltsverzeichnis

'Deploy' bei JBoss

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.

zum Inhaltsverzeichnis

'Deploy' bei Glassfish

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.
Nachdem bereits in der zuvor übergebenen Datei mit dem Namen 'Java_EJB_05.jar' der JNDI-Namen des EJB zugeordnet ist, kann eine weitere Datei mit dem gleichen JNDI-Namen nicht 'deployed' 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.
Die Auswahl der Datei wird durch einen Klick auf die Schaltfläche [  Öffnen  ] bestätigt – damit wird auch das Fenster 'Datei hochladen' geschlossen.

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.

zum Inhaltsverzeichnis

Ändern des JNDI-Namens

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.
Bei der Suche im Internet habe ich gefunden, dass der Fehler durch Installation des aktuellsten 'EJB3-Plugin' behoben werden kann.
Die Installation des 'EJB3-Plugin' ist nicht einfach und es ist mir trotzdem nicht gelungen, ein 'deploy' der JAR- oder EAR-Datei ohne 'Null Pointer Exception' auszuführen.

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:

Die Festlegung des 'nach außen wirksamen' JNDI-Namens wird in diesem Abschnitt beschrieben.

zum Inhaltsverzeichnis

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:
Das Verzeichnis 'gen' (innerhalb des Project Java_EJB_05) wird mit der rechten Maustaste angeklickt und aus dem Kontext-Menu wird New > Folder ausgewählt.

 
 

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'.

zum Inhaltsverzeichnis

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.
Damit wird das Fenster wieder geschlossen.

  
  

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 unter
Packen der Dateien in Java-Archive (JAR) und 'deploy' > Jar-Datei neu erstellen
und
Erstellen 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.

zum Inhaltsverzeichnis

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.

zum Inhaltsverzeichnis

Gesamter Code am Ende des Schrittes

Datei CountryConstants.java

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,
    };
}

zum Inhaltsverzeichnis

Datei ShowTimeDateBeanLocal.java

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);
}

zum Inhaltsverzeichnis

Datei ShowTimeDateBeanRemote.java

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);
}

zum Inhaltsverzeichnis

Datei ShowTimeDateBean.java

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;
    };
}

zum Inhaltsverzeichnis

Datei application.xml

<?xml version="1.0"?>
<application>
  <display-name>
JavaScout EJB-Tutorial 05</display-name>
    <module>
      <ejb>
Java_EJB_05.jar</ejb>
    </module>

</application>

zum Inhaltsverzeichnis

Datei ejb-jar.xml

<?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>

zum Inhaltsverzeichnis

Weitere Schritte und verwandte Dokumentation

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.
Führen Sie dieses Tutorial aus als Nächstes aus - sofern Sie das nicht bereits vor diesem Schritt erledigt haben.

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.

zum Inhaltsverzeichnis