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

Tutorial: Client-Programm für Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_08)

* 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:
2009-08-18

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. 45 bis 80 Minuten, je nach Routine im Umgang mit Eclipse und beim Schreiben von Java-Code
.

Dieses Dokument enthält die Anleitung für die Programmierung eines einfachen Client-Programms, das die Methoden des in den Schritten beginnend mit Tutorial: Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) – Einrichten des Projects entwickelten EJB (Enterprise Java Bean) benutzt.

Das Schema ist identisch mit dem Tutorial: Client für Einfache Session Bean, EJB3-Standard (Java_EJB_06)deswegen werden in diesem Dokument gleiche Tätigkeiten nur mehr mit Stichworten beschrieben.

Inhaltsverzeichnis:

Entsprechender Tutorial-Schritt für die frühere Version (vor EJB3-Standard) 

Dank für Vorarbeiten 
Vorbemerkung 
Vorbedingungen 
Project eröffnen und einrichten 
* Project eröffnen 
* Verzeichnisse für Quell-Code und kompilierte Java-Klassen festlegen 
* Standard-Source-Verzeichnis prüfen und bei Bedarf korrigieren 
* Einbindung der Libraries (Programm-Bibliotheken) in den Java Build Path 
Java-Klasse anlegen 
Datei
jndi.properties mit den Parametern für die Verbindung zum JAS anlegen 
Test 

Hinweise zur Fehlersuche 

Gesamter Code am Ende des Schrittes 
Datei
jndi.properties 
Datei
ChatManagementClient.java 

Bewusste Vereinfachungen in diesem Tutorial-Schritt – im Vergleich zu professioneller Entwicklung 

Weitere Schritte und verwandte Dokumentation 

Enstprechender Tutorial-Schritt für die frühere Version (vor EJB3-Standard)

Wenn Sie vor der Aufgabe stehen, Java vor Version 1.5 (auch als Java 5 bezeichnet) verwenden zu müssen, Client-Programme für den Zugriff auf EJBs neu schreiben oder adaptieren müssen und die passende Anleitung dafür suchen - dann finden eine ausführliche Anleitung mit zahlreichen Abbildungen im
Tutorial: Client-Programm für Einfache Session Bean (Java_EJB_02).

zum Inhaltsverzeichnis

Dank für Vorarbeiten

Eine exzellente Einführung in die generelle Programmierung von EJB war der JBoss-IDE 1.3.0 Tutorial Guide von Hans Dockter und Laurent Etiemble.
Beispiele, die über das Tutorial in diesem Dokument hinausgehen, schrieb Mirza Jahic in Working with JBoss and Eclipse.

Speziell auf EJB 3 adaptiert ist das First EJB 3 Ant Tutorial von Sebastian Hennebrueder.

zum Inhaltsverzeichnis

Vorbemerkung

Obwohl Eclipse in 'deutscher Version' installiert werden kann, sind die Abbildungen in diesem Tutorial mit der 'english Version' erstellt.
Grund ist, daß zum Zeitpunkt der Erstellung dieses Dokumentes (Februar 2009) die Eclipse-Texte nur sehr unvollständig ins Deutsche übersetzt sind.
Damit ist (meiner Meinung nach)
1.) Eclipse in deutscher Version wesentlich schwerer verständlich als in englischer Version und
2.) wenn Eclipse weiter übersetzt wird, ist dieses Dokument stark abweichend von den dann vorhandenen deutschen Texten.

Viele der in diesem Tutorial auszuführenden Abschnitte (z.B. Eröffnen des Project) sind gleich oder sehr ähnlich zu Abschnitten, die bereits im Tutorial für die Entwicklung der Einfachen Session Bean beschrieben wurden.
Um diese – bei jedem Project wiederkehrenden - Tätigkeiten zu üben, wird in diesem Tutorial nicht immer jede Tätigkeit im Detail beschrieben und eine Abbildung gezeigt.
Statt dessen wird auf die entsprechende Beschreibung in einem Tutorial, das als Vorbedingung durchzuarbeiten war, verwiesen.

zum Inhaltsverzeichnis

Vorbedingungen:

zum Inhaltsverzeichnis

Project eröffnen und Einrichten

Kriterien für das Gruppieren von Projects in einen Workspace wurden in Tutorial: Hello World (Java_Intro_01) > Eclipse Workspace und Project eröffnen diskutiert.
Dort ist auch eine Beschreibung mit Screenshots enthalten wie ein Workspace eingerichtet wird – diese Anleitung wird in diesem Dokument nicht mehr wiederholt.

zum Inhaltsverzeichnis

Project eröffnen

Um ein neues Project zu beginnen wird >File >New >Project ausgewählt.

Im anschließenden Fenster (New Project) wird Java Project ausgewählt und durch Anklicken der Schaltfläche [ Next > ] fortgesetzt.

Detaillierte Anleitungen inklusive Abbildungen der Fenster finden Sie im Dokument Einfache Session Bean, EJB3-Standard (Java_EJB_05) – Einrichten des Projects > Project eröffnen .

Im Fenster (New Java Project) wird

  • Der 'Project name' (Java_EJB_08) festgelegt.

  • Das verwendete 'JRE' (Java-Runtime-Environment) gewählt
    (Use default JRE belassen).

  • Das 'Project layout' festgelegt.
    (Create separate folders for sources and class files) wird gewählt weil es zweckmäßig ist, nur den Source-Code alleine in einem Verzeichnis zu haben und nicht auch noch pre-compiled Java-Klassen.

Durch Anklicken der Schaltfläche [Next > ] wird das nächste Fenster mit weiteren Einstellungsmöglichkeiten aufgerufen.


zum Inhaltsverzeichnis

Verzeichnisse für Quell-Code und kompilierte Java-Klassen festlegen

Im geänderten Fenster (New Java Project) wird

  • Zuerst der 'Default output folder' geändert (Java_EJB_08/gen/classes).

    Das Verzeichnis gen enthält dann alle Dateien, die generiert werden:
    neben dem Verzeichnis für die kompilierten Java-Klassen werden später auch noch Verzeichnisse für 'Steuer'-Dateien des Enterprise Java Beans festgelegt.

  • Durch anklicken des Textes Create new source folder ein weiteres Fenster (zum Festlegen eines Verzeichnisses für den Quell-Code der Java-Klassen) geöffnet.

Detaillierte Anleitungen inklusive Abbildungen der Fenster finden Sie im Dokument Einfache Session Bean. EJB3-Standard (Java_EJB_05) – Einrichten des Projects>Verzeichnis für Quell-Code und kompilierte Java-Klassen festlegen .

Im erscheinenden Fenster (New Source Folder) wird

  • Der 'Folder Name' (im Beispiel auf src/java) festgelegt.

    Im Verzeichnis src/java werden dann von Eclipse die Java-Packages (als weitere Verzeichnisse) und Java-Klassen mit dem Quell-Code (als Dateien) angelegt wenn eine neue Java-Klasse (Class) eröffnet wird.

    Da vorher (automatisch)
    src als Verzeichnis für die Dateien mit dem Quell-Code definiert war, wird eine Nachricht angezeigt, daß dieses Verzeichnis nicht weiter verwendet wird.

Durch Anklicken der Schaltfläche [ Finish ] wird das neue Verzeichnis erstellt und das Fenster geschlossen.

Es wird auch noch eine Schaltfläche [ Next > ] als aktiv angezeigt.
Damit würden verfeinerte Definitionen ermöglicht, welche Dateien automatisch innerhalb des Verzeichnisses angelegt würden.
Diese Verfeinerung ist für dieses Tutorial aber nicht notwendig.


Im noch immer offenen Fenster (New Java Project) werden jetzt die neu erstellten Verzeichnisse angezeigt.

  • Der immer noch bestehende Eintrag 'src' wird mit der rechten Maustaste angeklickt.

  • Aus dem angezeigten Kontext-Menu wird Remove from Build Path ausgewählt und mit der linken Maustaste angeklickt.
    Dadurch wird das Verzeichnis 'src' als 'Source Folder' (Verzeichnis mit Java-Quellcode) entfernt..

Durch Anklicken der Schaltfläche [ Finish ] wird das neue Project erstellt und das Fenster geschlossen.


zum Inhaltsverzeichnis

Standard-Source-Verzeichnis prüfen und bei Bedarf korrigieren

Bei älteren Versionen von Eclipse (bei mir: Version: 3.2.2., Build id: M20070212-1330) wird das Source-Verzeichnis nicht geändert.

Überprüfen Sie daher bitte die Definition der Source-Verzeichnisse bei Ihrer Installation und wenn der Fehler auch bei Ihrer Installation von Eclipse aufgetreten ist, führen Sie die beschriebenen Korrektur durch.

Die definierten Source-Verzeichnisse sind unter Java Build Path in den Properties (Eigenschaften) des Project definiert.

Um die Properties ansehen und ändern zu können, wird das Project mit der rechten Maustaste angeklickt, dann Properties ausgewählt und mit der linken Maustaste angeklickt.

  
  

Im anschließend geöffneten Fenster wird im linken Teil Java Build Path ausgewählt und dann der Reiter Source angeklickt.

Unter den gelisteten Verzeichnissen wird vom Java-Compiler der Quell-Code erwartet.
Mit anderen Worten: Quell-Code in anderen Verzeichnissen wird vom Java-Compiler nicht gefunden und damit auch nicht kompiliert.

Weiters wird das Verzeichnis für den Quell-Code bei der Eröffnung von Java-Klassen oder -Interfaces vorgeschlagen bzw. die Eingabe gegen hier definierte Verzeichnisse geprüft.

Um eine spätere irrtümliche Verwendung eines unerwünschten Verzeichnis zu vermeiden, ist es empfehlenswert hier nur ein Verzeichnis (nämlich Java_EJB_08/src/java) zu erlauben.

Wenn Sie nur das eine Verzeichnis in der Liste sehen ist das korrekt und Sie können mit dem Abschnitt Einbindung der Libraries (Programm-Bibliotheken in den Java Build Path fortfahren.

  
  

Das folgende Beispiel für den Fehler ist von einem früheren Tutorial weil ich inzwischen Eclipse Version 3.4 installiert habe und der Fehler nicht mehr auftritt.
Lassen Sie sich bitte durch die andere Bezeichnung des 'Project' nicht verwirren.

Sollte noch das nicht gewünschte Verzeichnis (im Beispiel: Java_EJB_01/src) aufscheinen, so wird es mit der linken Maustaste markiert und dann die Schaltfläche [ Remove ] angeklickt.

Anschließend wird im Fenster nur mehr das gewünschte Verzeichnis angezeigt.

Durch Anklicken der Schaltfläche [ OK ] wird die neue Einstellung gesichert und das Fenster geschlossen.

zum Inhaltsverzeichnis

Einbindung der Libraries (Programm-Bibliotheken) in den Java Build Path

In diesem Project wird der Code (Klassen) in Programmteilen, die nicht innerhalb des Projects oder der Eclipse-Workspace vorhanden sind, eingebunden.

Eine detaillierte Anleitung, wie Bibliotheken eingebunden werden ist unter Einfache Session Bean, EJB3-Standard (Java_EJB_05) – Einbindung der Libraries (Programm Bibliotheken) in den Java Build Path beschrieben. Die dort aufgelisteten Dateien werden für ein Client-Programm aber nicht benötigt.

Wenn Sie vorläufig keine JAR-Datei mit den benötigten Klassen zur Verfügung haben (weil noch kein JAS installiert ist), können Sie eine der folgenden Dateien herunterladen:
* Für JBoss:
jbossall-client.jar 
* Für Glassfish:
appserv-rt.jarjavaee.jar 

Der Java Build Path ist in den 'Properties' (Eigenschaften) des Projects definiert.

Um die Properties ansehen und ändern zu können, wird das Project mit der rechten Maustaste angeklickt, dann 'Properties' ausgewählt und mit der linken Maustaste angeklickt.


Im anschließend geöffneten Fenster wird im linken Teil Java Build Path ausgewählt und dann der Reiter Libraries angeklickt.

Über die Schaltfläche [ Add External JARs... ] wird folgende Datei aufgenommen:
/opt/jboss/client/jbossall-client.jar

  • Dabei ist /opt/jboss das Verzeichnis, in dem die Dateien des JAS liegen.
    Dieses Verzeichnis kann abweichen wenn Sie einen anderen JAS verwenden oder JBoss in einem individuell gewählten Verzeichnis installiert haben.

  • Diese Datei enthält die Klassen mit dem JBoss-eigenen Protokoll für die Übertragung zwischen dem Client-Programm und dem JBoss Java-Application-Server (JAS).
    Wenn sie einen anderen JAS verwenden benötigen Sie die entsprechende(n) JAR-Datei(en) des verwendeten JAS.

  • Für den Test ist auf jeden Fall notwendig, die zur jeweiligen Version des JAS passende Datei zu verwenden.
    Beim Schreiben dieses Tutorials habe ich bemerkt, dass JBoss Version 5.0.1.GA und JBoss Version 5.1.0.GA unterschiedliche JAR-Dateien enthalten die untereinander nicht kompatibel sind.

Über die Schaltfläche [ Add JARs... ] wird folgende Datei aufgenommen:
Java_EJB_07/Java_EJB_07-client.jar

  • Diese Datei enthält die Schnittstellenbeschreibung (Java-Interface) des auf dem JAS 'laufenden' EJB.
    Darin sind die Methoden definiert, die von Client-Programmen aufgerufen werden können.


Die eingebundenen Bibliotheks-Dateien sollten wie in der nebenstehenden Abbildung gelistet sein.

Durch Anklicken der Schaltfläche [  OK  ] wird die Auswahl wirksam und das Fenster geschlossen.

  
  

zum Inhaltsverzeichnis

Java-Klasse anlegen

In diesem Abschnitt wird die Klasse für das Client-Programm erstellt und der Algorithmus codiert.

Um eine neue Java-Klasse zu eröffnen wird mit der rechten Maustaste das Project (Java_EJB_08) angeklickt und aus dem Kontext-Menu >New >Class ausgewählt.

  
  

Im darauf hin erscheinenden Fenster (New Java Class / Ohne Abbildung) wird

  • Das 'Package' (js_ejb08.client) festgelegt.

  • Der Name der Klasse (ChatManagementClient) festgelegt.

  • Folgende Auswahl-Möglichkeiten werden markiert:
    [X ] public static void main(String[] args)
    [X ] Constructors from superclass

    [X ] Inherited abstract methods

Die anderen bereits vorgegebenen Werte werden nicht verändert.

Durch Anklicken der Schaltfläche [ Finish ] wird die Datei für den Quell-Code der Klasse angelegt.


Der Java-Code ist unter Gesamter Code am Ende des Schrittes > Datei ChatManagementClient.java dokumentiert und kann in die geöffnete Datei kopiert werden.
Anschließend wird der Code durch Anklicken des Save-Symbols ( / Diskette links oben) gespeichert.

Die Struktur des Client-Programms ist gleich wie bei jenem im Tutorial: Client-Programm für Einfache Session Bean, EJB3-Standard (Java_EJB_06). Für eine Erklärung der importierten Java-Packages und -Klassen lesen Sie bitte dort nach.
Eine Erklärung des Algorithmus ist in den Kommentaren zum Java-Code enthalten.

zum Inhaltsverzeichnis

Datei jndi.properties mit den Parametern für die Verbindung zum JAS anlegen

Das Anlegen des entsprechenden Verzeichnisses und der Datei wurden bereits unter Tutorial: Client-Programm für Einfache Session Bean, EJB3-Standard (Java_EJB_06) > Datei jndi.properties mit den Parametern für die Verbindung zum JAS anlegen im Detail und mit Abbildungen beschrieben.
Dort ist auch eine Erklärung er einzelnen Teile der 'Eigenschaften' beschrieben.

zum Inhaltsverzeichnis

Test

Bemerkung:
Damit der Code getestet werden kann, muss das EJB an den JAS übergeben ('deployed') sein; die Anleitung dazu finden Sie unter
Tutorial: Einfache Session Bean, EJB3-Standard (Java_EJB_05) – Packen der Dateien in Java-Archive (JAR) und 'deploy' > JAR-Datei an den JAS übergeben ('deploy').
Um nicht durch Firewalls oder andere Sicherheitsmechanismen behindert zu werden – und damit unnötige Zeit in Fehlersuche zu investieren – wird empfohlen, den JAS (z.B. JBoss) auf dem gleichen Computer laufen zu lassen wie das entwickelte Programm.
Die TCP/IP-Adresse (127.0.0.1; festgelegt in der Datei 'jndi.properties') bezieht sich auf den lokalen Computer und erlaubt die Verbindung zum EJB innerhalb einer möglichen Firewall.

Weiters sind als JAR-Dateien für die Verbindung zum JAS jene JAR-Dateien, die mit dem JAS geliefert wurden, zu verwenden.
Im Abschnitt
Einbundung der Libraries (Programm-Bibliotheken) in den Java Build Path wurden eventuell nicht zum JAS passende JAR-Dateien eingebunden damit der Code vorerst compiliert werden kann ohne das ein Fehler auftritt weil benötigte Packages fehlen.
Damit der Test fehlerfrei ausgeführt werden kann, müssen dafür die zur jeweiligen Version des JAS passenden JAR-Dateien eingebunden werden.

Aus dem Eclipse-Menu wird Run >Run ausgewählt.

Im Bereich 'Console' erscheint anschließend der Text mit der Aufforderung zur Eingabe.

Klicken Sie mit der Maus in diesen Bereich, damit Sie dort Text eingeben können !

Nach Eingabe von Text und Betätigen der Eingabe-Taste wird der eingegebene Text wieder ausgegeben.
Anschließend werden die jüngsten 5 Einträge auf der Datenbank ausgegeben.

Nach der Eingabe von Leerzeichen wird das Programm beendet.


 


zum Inhaltsverzeichnis

Hinweise zur Fehlersuche

Bedingt durch die Trennung in Server-seitigen Code (EJB) und Code im Client-Programm können verschiedene Fehler nicht wie Syntax-Fehler sofort beim Tippen des Codes identifiziert werden.
Ein – vielleicht leicht zu übersehender – Tippfehler führt dazu, dass das EJB nicht korrekt im JAS 'deployed' wird oder das Client-Programm keine Verbindung zum EJB aufnehmen kann.
Zusätzlich werden Parameter für die Verbindung in einer externen Datei ('jndi.properties') bereitgestellt. Ein einziger Tippfehler in dieser Datei führt ebenfalls dazu, dass die benötigte Klasse für die Verbindung nicht geladen werden kann oder versucht wird, eine Verbindung zu einer unpassenden TCP/IP-Adresse aufzunehmen.

Als LeserIn dieses Tutorials haben Sie vermutlich überhaupt keine Erfahrung mit der Eingrenzung eines Fehlers – deswegen folgen leicht auszuführende Schritte zur Eingrenzung des Fehlers.

'Fertige' JAR- und EAR-Datei für den JAS

Wenn Sie einen Fehler in der Klasse für das EJB vermuten können Sie mit JBoss (Version 5.1.0) und Glassfish (Version 2.1.1) getestete Archiv-Dateien herunter laden und für einen Test auf korrekte Funktion des Client-Programms (dieses Tutorials) verwenden.
Die für das EJB passenden Schnittstellen für das (in diesem Dokument vorgestellte) Client-Programm finden Sie in der Datei Java_EJB_07-client.jar.

Prüfen ob das JAR 'deployed' ist

JBoss bietet die Möglichkeit über eine Web-Abfrage die laufenden EJBs zu sehen.
In den folgenden Beispielen ist JBoss auf dem gleichen Computer installiert wie die verwendete Eclipse-Entwicklungsumgebung.
Dazu wird im Web-Browser

eingegeben - damit wird eine Übersicht von JBoss aufgerufen.

In dieser Übersicht sehen Sie eine Liste der laufenden EJB – darunter sollte das 'Java_EJB_07.jar' zu finden sein.


Das Beispiel ist für den JBoss Java Application Server – andere JAS haben ähnliche Abfragen.

Wenn Sie das EJB nicht finden dann wiederholen Sie den Abschnitt Tutorial: Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) – Packen der Dateien in Java-Archive (JAR) und 'deploy' > JAR-Dateien an den JAS übergeben ('deploy') und beobachten, ob beim 'deploy' Fehler auftreten.

Wenn Sie nicht sicher sind, ob das von Ihnen erstellte EJB fehlerfrei ist, können Sie die Datei Java_EJB_07.jar hier herunterladen und deployen.
Diese Datei wurde mit der JBoss Version 5.0.1.GA getestet.

Prüfen ob die Datei 'Java_EJB_07-client.jar' zur EJB passt

Die Datei mit der (Java-) Interface muss zum 'deployed' EJB passen. Möglicherweise haben Sie die EJB verändert und vergessen, einen 'Build'
der Datei auszuführen (siehe
Tutorial: Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) – Packen der Dateien in Java-Archive (JAR) und 'deploy' > JAR-Datei für Client-Programme erstellen).

Wenn Sie die Datei 'Java_EJB_07.jar' von dieser Webseite verwenden dann können Sie die passende Datei Java_EJB_07-client.jar hier herunterladen.

Prüfen auf Tippfehler in der Datei 'jndi.properties'

Der Inhalt der Datei 'jndi.properties' ist kritisch weil darin die Parameter für die Verbindung zum JAS enthalten sind.
Der eingegebene Text kann während des Tippens nicht geprüft werden und eventuelle Tippfehler fallen erst auf wenn die entsprechende Klasse nicht während der Laufzeit geladen werden kann oder eine unpassende TCP/IP-Adresse enthalten ist.

Wenn Sie für Ihre Entwicklungsumgebung ebenfalls JBoss mit den empfohlenen Einstellungen verwenden, dann vergleichen Sie bitte genau den Inhalt Ihrer Datei mit den Werten der Datei 'jndi.properties' in diesem Tutorial.

Als letzte Möglichkeit können Sie die Werte aus diesem Tutorial in Ihre Datei kopieren.

Prüfen, ob die Bibliothek für die Verbindung zum JAS vom verwendeten JAS stammt

Für das Verbinden zum JAS muss die jeweils passende Bibliothek verwendet werden.
Das Einbinden der Bibliothek wurde im Abschnitt
Einbindung der Libraries (Programm-Bibliotheken) in den Java Build Path beschrieben.

Eine mögliche Fehlermeldung beim Verwenden einer 'falschen' Bibliothek ist:


Die Fehlermeldung stammt von JBoss Version 5.0.1.GA weil die Bibliothek von JBoss 5.1.0.GA verwendet wurde:

Beachten Sie die Hinweise der (Java-) 'Exception'

Abhängig vom jeweiligen Fehler wird bei der 'Exception' (Ausnahmebehandlung nach einem Fehler' eine Fehlermeldung auf der Konsole angezeigt.
Mit etwas Kombinationsgabe kann meistens aus der Fehlermeldung der Grund des Fehlers erkannt werden.

In diesem Beispiel

wurde
java.naming.factory.initial=org.jnp.interface.NamingContextFactory
statt
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
als Wert erfasst.

Prüfen Sie die Einträge in den XML-Dateien (Deployment Descriptors) auf Groß-/Kleinschreibung

Das 'Mapping' der JNDI-Namen für EJB und Datasource muss genau übereinstimmen.
Beachten Sie besonders die Groß- und Kleinschreibung und die Bindestriche (-) und Unterstriche (_) in den Namen.

Das Verbinden mit der Datasource ist in verschiedenen Dateien ('ejb-jar.xml' und einer JAS-spezifischen Datei, z.B. 'sun-ejb-jar.xml', 'jboss.xml') Dateien definiert.
Vergleichen Sie die Einträge in diesen Dateien dort mit den symbolischen Namen in der Klasse für das EJB und mit dem im JAS definierten Namen der Datasource.

zum Inhaltsverzeichnis

Gesamter Code am Ende des Schrittes

Datei jndi.properties (bei Verwendung von JBoss)

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=
org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=127.0.0.1:1099

zum Inhaltsverzeichnis

Datei jndi.properties (bei Verwendung von Glassfish)

org.omg.CORBA.ORBInitialHost=127.0.0.1
org.omg.CORBA.ORBInitialPort=3700
java.naming.factory.initial=com.sun.enterprise.naming.SerialInitContextFactory
java.naming.factory.url.pkgs=com.sun.enterprise.naming
java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl

zum Inhaltsverzeichnis

Datei ChatManagementClient.java

package js_ejb08.client;
/*
 * Package mit verschiedenen Methoden für Ein- und Ausgabe. */

import java.io.*;
/*
 * Package mit verschiedenen Methoden für 'Hilfsdienste'. */

import java.util.*;
/*
 * Package mit Methoden die die TCP/IP-Adresse des 'Client'-Computers ermitteln. */

import java.net.*;
/*
 * Package mit verschiedenen Klassen für die Verbindung zum Java Application Server (JAS). */

import javax.naming.*;
/*
 * Package mit dem Business Object das einen Chat-Eintrag repräsentiert. */

import js_ejb07.bo.*;
/*
 * Interface zur EJB die auf dem JAS läuft. */

import js_ejb07.ejb.interfaces.remote.ChatManagementBeanRemote;

public class ChatManagementClient {

    
public ChatManagementClient() {
      
super();
    }
/* */
    
public static void main(String[] args) {
/*
 * Business-Object für die Übertragung eines Chat-Eintrags zum EJB definieren. */

        Chat_BO structChat_BO =
new Chat_BO();
/*
 * Vector mit mehreren Business-Objects als Ergebnis der Abfrage. */

        Vector structChat_BO_Set =
new Vector();
/*
 * Bauen des Strings mit der Konsol-Ausgabe
 * (Erklärung was als Konsol-Eingabe erwartet wird). */

        String strKonsolErklaerung =
          
"Bitte geben Sie den Chat-Text ein oder lassen sie das Feld leer um das Programm zu beenden: ";
/*
 * Variablen für die Eingabe auf der Konsole. */

        String strKonsolAntwort =
"";
        
byte byteKonsolBuffer[] = new byte[80];
        
int intKonsolBufferLaenge;
/*
 * Schleife für das Abfragen der Eingabe auf der Konsole und Aufrufen des EJB. */

        
for (;;) {
/*
 * Anzeigen der Erklärung auf der Konsole. */

            System.
out.print(strKonsolErklaerung);
/*   */
            
try {
/*
 * Antwort (Eingabe auf der Konsole) einlesen. */

                intKonsolBufferLaenge = System.
in.read(byteKonsolBuffer, 0, 80);
                strKonsolAntwort =
new String(byteKonsolBuffer, 0, intKonsolBufferLaenge);
/*
 * Führende und nachfolgende Leerzeichen entfernen. */

                strKonsolAntwort = strKonsolAntwort.trim();
            }
            
catch (IOException e) {
/* Unerwarteter Fehler bei der Konsol-Eingabe; Fehlermeldung auf die Konsole ausgeben. */
                e.printStackTrace();
            }
/*
 * Prüfen ob 'leere' Antwort und in diesem Fall Programm beenden. */

            
if (strKonsolAntwort.length() <= 0) {
              System.
out.println("Programm beendet");
              System.exit(0);
            }
/*
 * Eingabe als Rückmeldung wieder ausgeben. */

            System.
out.println("Eingegeben: " + strKonsolAntwort);
/*
 * TCP/IP des Computers, auf dem dieses Programm läuft, ermitteln.   */

            String strTCPIPAdresse =
"";
            
try {
/* Net-Parameter des localen Computers ermitteln und dann TCP/IP-Adresse herauslesen. */
                InetAddress addr = InetAddress.getLocalHost();
                strTCPIPAdresse = addr.getHostAddress();
            }
            
catch (UnknownHostException e) {
/* Unerwarteter Fehler beim Ermitteln der Werte; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("UnknownHostException");
                e.printStackTrace();
            }
/*
 * Business-Object für die Übertragung zum EJB füllen.   */

            structChat_BO.
Erstellt_TCPIP_Adresse = strTCPIPAdresse;
            structChat_BO.
Message_Text = strKonsolAntwort;
/*
 * Beginn des Codes für das Nutzen der Methoden des EJB. */

            
try {
/*
 * Objekt der Klasse 'InitialContext' erstellen.
 * Dabei werden die Werte für den Aufbau der Verbindung zum EJB ('Properties', deutsch: Eigenschaften)
 * aus einer Datei eingelesen.
 * Der Name der Datei mit den 'Properties' ist in der Klasse 'InitialContext', die mit dem Java-package
 * 'javax.naming' importiert wird, enthalten.
 * Das package 'java.naming' ist in der JAR-Datei, die zum verwendeten JAS (Java-Application-Server)
 * gehört, enthalten.
 * Für die Beispiele in diesem Tutorial wird JBoss verwendet – aber der Code hier ist völlig neutral
 * und für jeden JAS passend.
 * Die Festlegung, dass die Werte für die Verbindung in der Datei 'jndi.properties' enthalten sind,
 * ist spezifisch für JBoss und in folgender Kette festgelegt:
 * Bibliothek: jbossall-client.jar (JBoss-spezifisch) >
 * package: javax.naming (Java-spezifisch, für alle JAS gültig – aber vom Hersteller des JAS codiert) >
 * Klasse: InitialContext (Java-spezifisch, für alle JAS gültig – aber vom Hersteller des JAS codiert)
 *  */

                Context initialContext =
new InitialContext();
/*
 * Construction der Interface, über die ein Objekt des EJB am JAS konstruiert wird und
 * später dessen Methoden aufgerufen werden. */

                ChatManagementBeanRemote remoteChatManagementBean;
                remoteChatManagementBean = (ChatManagementBeanRemote)
                    initialContext.lookup(
"ejb/ChatManagementBeanJNDI");
/*
 * Ausführen der Methode und Ausgabe des Ergebnisses auf der Konsole. */

                String result =
                  remoteChatManagementBean.storeChatEntry(structChat_BO);
/*
 * Abrufen von X neuesten Chat-Einträgen auf der Datenbank. */

                Vector vecBO_Set = remoteChatManagementBean.getChatEntryList(5);
/*
 * Ausgabe der Werte der Chat-Einträge auf der Konsole. */

                
int intVectorSize = vecBO_Set.size();
                
int intVectorIndex;
                
for (intVectorIndex = 0; intVectorIndex < intVectorSize; intVectorIndex++) {
/* Verwenden des bereits definierten Business Objects für das Auslesen eines Vector-Eintrags. */
                  structChat_BO = (Chat_BO) vecBO_Set.elementAt(intVectorIndex);
/* Ausgeben der Werte auf die Konsole. */
                  System.
out.println("Chat-Beitrag: " +
                           structChat_BO.
Erstellt_Timestamp.toString() + " / " +
                           structChat_BO.
Erstellt_TCPIP_Adresse + " / " +
                           structChat_BO.
Message_Text);
                }
            }
            
catch (NamingException e) {
/* Unerwarteter Fehler beim Erstellen des InitialContext oder beim Ausführen der Methoden des EJB;
 * Fehlermeldung auf die Konsole ausgeben. */

                System.
out.println("NamingException");
                e.printStackTrace();
            }
        }
    }
}

zum Inhaltsverzeichnis

Weitere Schritte und verwandte Dokumentation

Dokument

Inhalt

Tutorial: JSF zur Erfassung und Anzeige von Daten

In diesem Tutorial wird die Eingabe des Chat-Textes und die Ausgabe der bereits bestehenden Einträge mit einem Web-Browser durchgeführt.
Zur Entwicklung der Benutzeroberfläche und der Programm-Logik wird das JSF- (Java-Server-Faces-) Framework benutzt; besonders die Möglichkeit, eine Tabelle, die von den Daten aus der Datebank gefüllt wurde, im Web-Browser anzuzeigen.
JSF ist eine Sammlung von Klassen, die das Entwickeln von Zugriffen auf ein EJB über einen Web-Browser unterstützen.

zum Inhaltsverzeichnis