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

Tutorial: Client-Programm für Einfache Session Bean (Java_EJB_02)

* 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, daß 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:
2008-01-08

Dieses Tutorial ist nur mehr sinnvoll, wenn Sie Kenntnisse für EJBs vor dem EJB3-Standard erwerben wollen.

Mit der Einführung des Standards EJB3 wird der Aufbau der Verbindung in Heavyweight- (Fat-) Clients zu EJBs vereinfacht.
Das dem EJB3-Standard entsprechende Tutorial finden Sie im Dokument
Tutorial: Client-Programm für Einfache Session Bean, EJB3-Standard (Java_EJB_06).
Die Anleitungen im neuen Tutorial sind auch dann anwendbar, wenn auf dem JAS (Java Application Server) EJBs, die noch nicht dem EJB3-Standard entsprechen, eingesetzt sind.

Die Kenntnisse in diesem Tutorial. sind nur dann notwendig, wenn Sie Client-Programme adaptieren oder neu schreiben müssen und Ihnen noch keine Java-Version ab 1.5 (auch als Java 5 bezeichnet) zur Verfügung steht.
Die Vereinfachungen im Code sind geringfügig und beziehen sich nur auf die Anweisungen im Abschnitt
Vorbereiten der Verbindungsdaten zum JAS codieren.

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

Diesem Dokument enthält die Anleitung für die Programmierung eines einfachen Client-Programms das die Methode des in den Dokumenten beginnend mit Tutorial: Einfache Session Bean (Java_EJB_01) – Einrichten des Projects entwickelten EJB (Enterprise Java Bean) benutzt.

Inhaltsverzeichnis:

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 
Eingabe des Länder-Codes abfragen 
Vorbereiten der Verbindungsdaten zum JAS codieren 
Verbindung zum 'Bean' und Ausführen der Methode codieren 
Kompletter Code ohne Test-Ausgaben 
Weitere Schritte und verwandte Dokumentation 

Dank für Vorarbeiten

Eine exzellente Einführung 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.

Vorbemerkung

Obwohl Eclipse in 'deutscher Version' installiert werden kann, sind die Abbildungen in diesem Dokument mit der 'english Version' erstellt.
Grund ist, daß zum Zeitpunkt der Erstellung dieses Dokumentes (Oktober 2007) 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.

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 Klicken der Schaltfläche [ Next > ] fortgesetzt.

  

Im Fenster (New Java Project) wird

  • Der 'Project name' (Java_EJB_02) 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.



Für Details und Abbildungen sehen Sie bitte im Dokument Einfache Session Bean – Einrichten des Projects nach.

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_02/gen/classes).

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



Für Details und Abbildungen sehen Sie bitte im Dokument Einfache Session Bean – Verzeichnisse für Quell-Code und kompilierte Java-Klassen festlegen nach.

Im erscheinenden Fenster (New Source Folder) wird

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

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.

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

Die Meldung im vorigen Absatz ließe darauf schließen, daß das Standard-Source-Verzeichnis (Java_EJB_02/src) als Source-Verzeichnis gelöscht ist.
Bei meiner neuesten installierten Version von Eclipse (Version: 3.3.1.1., Build id: M20071023-1652) ist das wider Erwarten nicht der Fall.

Aus diesem Grund ist die folgende Beschreibung vorhanden.
Überprüfen Sie bitte die Definition der Source-Verzeichnisse bei Ihrer Installation und wenn der beschriebene 'Fehler' auch bei Ihnen aufgetreten ist, führen Sie die beschriebene Korrektur durch.

Die definierten Source-Verzeichnisse sind unter 'Java Build Path' 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 Source angeklickt.

Unter den gelisteten Verzeichnissen wird vom Java-Compiler 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_02/src/java) zu erlauben.

Sollte noch das ungewünschte Verzeichnis (Java_EJB_02/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, welche Arten von Bibliotheken wie eingebunden werden ist unter Einfache Session Bean – Einbindung der Libraries (Programm Bibliotheken) in den Java Build Path beschrieben.

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 instaliert haben.

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


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 Zug um Zug codiert und zwischenzeitlich wird getestet um Fehler frühzeitig erkennen zu können.

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

  

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

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

  • Der Name der Klasse (ShowTimeDateClient) 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.


In den nächsten Abschnitten wird der Programm-Code Schritt für Schritt entwickelt und nach jedem Schritt wird getestet, ob die Verbindung zum JAS und der Aufruf der Methode des EJB wie erwartet funktioniert.

zum Inhaltsverzeichnis

Eingabe des Länder-Codes abfragen

Dieser Teil des Codes hat noch keinen Bezug zur Programmierung mit EJB.
Hier wird nur in einer Schleife auf die Eingabe des Länder-Codes gewartet.

Code in Normal-Schrift wurde beim Anlegen der Klasse generiert; Code in Fettschrift ist der individuell erstellte Code.

package js_ejb02.client;
/*
 * Package mit den Länder-Codes und -Langnamen. */

import js_ejb01.staticvalues.CountryConstants;
/*
 * Package mit verschiedenen Methoden für Ein- und Ausgabe. */

import java.io.*;

public class ShowTimeDateClient {

    
public ShowTimeDateClient() {
        // TODO Auto-generated method stub
      
super();
    }

    
/**
     * @param args
    */

    
public static void main(String[] args) {
        // TODO Auto-generated method stub
/*
 * Anzahl der Länder-Codes im Array;
 * Index für das Ansprechen der Länder-Codes und Langnamen im Array. */

        
int CountryArraySize = CountryConstants.Country.length;
        
int CountryArrayIndex = 0;
/*
 * Bauen des Strings mit der Konsol-Ausgabe
 * (Erklärung was als Konsol-Eingabe erwartet wird). */

        String strKonsolErklaerung =
"Bitte geben Sie den möglichen Länder-Code [";
        
for (CountryArrayIndex = 0; CountryArrayIndex < CountryArraySize; CountryArrayIndex++) {
            strKonsolErklaerung +=
                CountryConstants.
Country[CountryArrayIndex][0].trim().toUpperCase();
            
if (CountryArrayIndex < (CountryArraySize - 1)) strKonsolErklaerung += ", ";
        }
        strKonsolErklaerung +=
"] 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);
/*
 * Umwandeln in Grossbuchstaben und führende und nachfolgende Leerzeichen entfernen. */

                strKonsolAntwort = strKonsolAntwort.toUpperCase().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);
        }
    }
}

Dieser Teil des Codes kann jetzt getestet 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 bzw. bei der Eingabe von Leerzeichen das Programm beendet.



Mögliche Fehler:
Abgesehen von Tippfehlern kann die importierte Interface
js_ejb01.staticvalues.CountryConstants nicht vorhanden sein.
Prüfen Sie bitte, ob im Abschnitt
Einbindung der Libraries (Programm-Bibliotheken) in den Java Build Path die Datei 'Java_EJB_01-client.jar' aufgenommen wurde.

zum Inhaltsverzeichnis

Vorbereiten der Verbindungsdaten zum JAS codieren

In diesem Abschnitt wird der Code, der die 'Namen', die als Parameter für die Verbindung zum JAS benötigt werden, vorbereitet erstellt.

Mit diesem Abschnitt wird geprüft, ob die externen JAR-Dateien mit Bibliotheken korrekt im 'Java Build Path' definiert sind.

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

import java.util.*;
/*
 * Package mit Methoden für die Namensbezeichnung von JAS und EJB. */

import javax.naming.*;

public class ShowTimeDateClient {
......
......

/*
 * Eingabe als Rückmeldung wieder ausgeben. */

            System.
out.println("Eingegeben: " + strKonsolAntwort);
/*
 * Beginn des Codes für das Nutzen der Methoden des EJB. */

            
try {
/*
 * Hashtable mit den Parametern zur Identifikation des JAS füllen. */

                Hashtable JASContextProperties =
new Hashtable();
/*
 * Protokoll und TCP/IP-Adresse des JAS festlegen.
 * Annahme: JAS läuft auf dem selben Computer wie dieses Übungsbeispiel. */

                JASContextProperties.put(InitialContext.
PROVIDER_URL, "jnp://127.0.0.1:1099");
/*
 * Klasse für die Kommunikation mit dem JAS festlegen;
 * Damit könnten spezielle Verschlüsselungsmethoden verwendet werden.
 * Für dieses Beispiel wird das Standard-Protokoll genommen.
 * Dieses wurde mit der Datei 'jbossall-client.jar' über den 'Java Build Path' eingebunden. */

                JASContextProperties.put(InitialContext.
INITIAL_CONTEXT_FACTORY,
                                         
"org.jnp.interfaces.NamingContextFactory");
/*
 * Initial Context für den Zugriff auf den JAS erstellen. */

                InitialContext initialContext =
new InitialContext(JASContextProperties);
/*
 * Rückmeldung, daß der 'InitialContext' aufgebaut wurde. */

                System.
out.println("'InitialContext' erstellt.");
            }
            
catch (NamingException e) {
/* Unerwarteter Fehler beim Erstellen des InitialContext; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("NamingException");
                e.printStackTrace();
            }
        }
    }
}

Dieser Teil des Codes kann jetzt getestet 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 bzw. bei der Eingabe von Leerzeichen das Programm beendet.
Weiters wird die Meldung, daß der Code für das Erstellen des 'InitialContext' ausgeführt wurde, ausgegeben.




Mögliche Fehler:
Wenn für die Typen
InitialContext oder NamingException kein Java-'package' gefunden wird oder während des Ausführens des Programms eine dynamisch eingebundene Klasse nicht gefunden wird, prüfen Sie bitte, ob im Abschnitt Einbindung der Libraries (Programm-Bibliotheken) in den Java Build Path die Datei 'jbossall-client.jar' aufgenommen wurde.

.zum Inhaltsverzeichnis

Verbindung zum 'Bean' und Ausführen der Methode Codieren

In diesem Abschnitt wird der Code, der die Verbindung zum JAS aufbaut, das Enterprise-Java-Bean (EJB) 'konstruiert' und die gewünschte Methode des EJB ausführt, entwickelt.

Bemerkung:
Damit der Code getestet werden kann, muß das EJB an den JAS übergeben ('deployed') sein.
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 im folgenden Beispiel-Code (127.0.0.1) bezieht sich auf den lokalen Computer.

package js_ejb02.client;
/*
 * Package mit den Länder-Codes und -Langnamen. */

import js_ejb01.staticvalues.CountryConstants;
/*
 * Package mit den Schnittstellen-Definitionen zum EJB. */

import js_ejb01.ejb.interfaces.*;
/*
 * Package mit verschiedenen Methoden für Ein- und Ausgabe. */

......
......
 * Package mit Methoden für die Namensbezeichnung von JAS und EJB. */
import javax.naming.*;
/*
 * Packages mit den Ausnahmezuständen (Exceptions),
 * die bei der Verbindung zum EJB auftreten können. */

import java.rmi.RemoteException;
import javax.ejb.CreateException;

public class ShowTimeDateClient {
......
......
/*
 * Rückmeldung, daß der 'InitialContext' aufgebaut wurde. */

                System.
out.println("'InitialContext' erstellt.");
/*
 * Construction der Klasse, die Schnittstelle zum EJB ist. */

                ShowTimeDateHome ShowTimeDateBeanHome;
                ShowTimeDateBeanHome =
                    (ShowTimeDateHome) initialContext.lookup(ShowTimeDateHome.
JNDI_NAME);
/* Rückmeldung, daß der Code bis hierher ausgeführt wurde. */
                System.
out.println("'ShowTimeDateBeanHome' konstruiert.");
/*
 * Construction des EJB; dieses läuft auf dem JAS. */

                ShowTimeDate ShowTimeDateBeanInstance = ShowTimeDateBeanHome.create();
/* Rückmeldung, daß der Code bis hierher ausgeführt wurde. */
                System.
out.println("'ShowTimeDateBeanInstance' auf dem JAS konstruiert.");
/*
 * Ausführen der Methode und Ausgabe des Ergebnisses auf der Konsole. */

                String[] result = ShowTimeDateBeanInstance.getTimeDateString(strKonsolAntwort);
                System.
out.println("Result[0]: " + result[0]);
                System.
out.println("Result[1]: " + result[1]);
            }
            
catch (NamingException e) {
/* Unerwarteter Fehler beim Erstellen des InitialContext; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("NamingException");
                e.printStackTrace();
            }
            catch (RemoteException e) {
/* Unerwarteter Fehler beim Verbinden zum JAS; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("RemoteException");
                e.printStackTrace();
            }
            
catch (CreateException e) {
/* Unerwarteter Fehler beim Erstellen des EJB im JAS; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("CreateException");
                e.printStackTrace();
            }
        }
    }
}

Der gesamte Code für das Client-Programm kann jetzt durch Auswahl von Run>Run ausgeführt werden.

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 bzw. bei der Eingabe von Leerzeichen das Programm beendet.
Weiters wird die Meldung, daß der Code für das Erstellen des 'InitialContext' ausgeführt wurde, ausgegeben.




Mögliche Fehler:
Der Java-Application-Server läuft nicht oder es ist durch eine Sicherheitseinrichtung nicht möglich, Verbindung mit dem JAS aufzunehmen.
Bitte sehen Sie im Dokument JBOSS nach, wie Sie die Web-Interface aufrufen (zur Kontrolle, ob JBoss überhaupt läuft) und wie Sie die Sicherheitseinstellungen ändern können.

.zum Inhaltsverzeichnis

Kompletter Code ohne Test-Ausgaben

package js_ejb02.client;
/*
 * Package mit den Länder-Codes und -Langnamen. */

import js_ejb01.staticvalues.CountryConstants;
/*
 * Package mit den Schnittstellen-Definitionen zum EJB. */

import js_ejb01.ejb.interfaces.*;
/*
 * 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 für die Namensbezeichnung von JAS und EJB. */

import javax.naming.*;
/*
 * Packages mit den Ausnahmezuständen (Exceptions),
 * die bei der Verbindung zum EJB auftreten können. */

import java.rmi.RemoteException;
import javax.ejb.CreateException;

public class ShowTimeDateClient {

    
public ShowTimeDateClient() {
        // TODO Auto-generated method stub
      
super();
    }

    
/**
     * @param args
    */

    
public static void main(String[] args) {
        // TODO Auto-generated method stub
/*
 * Anzahl der Länder-Codes im Array;
 * Index für das Ansprechen der Länder-Codes und Langnamen im Array. */

        
int CountryArraySize = CountryConstants.Country.length;
        
int CountryArrayIndex = 0;
/*
 * Bauen des Strings mit der Konsol-Ausgabe
 * (Erklärung was als Konsol-Eingabe erwartet wird). */

        String strKonsolErklaerung =
"Bitte geben Sie den möglichen Länder-Code [";
        
for (CountryArrayIndex = 0; CountryArrayIndex < CountryArraySize; CountryArrayIndex++) {
            strKonsolErklaerung +=
                CountryConstants.
Country[CountryArrayIndex][0].trim().toUpperCase();
            
if (CountryArrayIndex < (CountryArraySize - 1)) strKonsolErklaerung += ", ";
        }
        strKonsolErklaerung +=
"] 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);
/*
 * Umwandeln in Grossbuchstaben und führende und nachfolgende Leerzeichen entfernen. */

                strKonsolAntwort = strKonsolAntwort.toUpperCase().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);
/*
 * Beginn des Codes für das Nutzen der Methoden des EJB. */

            
try {
/*
 * Hashtable mit den Parametern zur Identifikation des JAS füllen. */

                Hashtable JASContextProperties =
new Hashtable();
/*
 * Protokoll und TCP/IP-Adresse des JAS festlegen.
 * Annahme: JAS läuft auf dem selben Computer wie dieses Übungsbeispiel. */

                JASContextProperties.put(InitialContext.
PROVIDER_URL, "jnp://127.0.0.1:1099");
/*
 * Klasse für die Kommunikation mit dem JAS festlegen;
 * Damit könnten spezielle Verschlüsselungsmethoden verwendet werden.
 * Für dieses Beispiel wird das Standard-Protokoll genommen.
 * Dieses wurde mit der Datei 'jbossall-client.jar' über den 'Java Build Path' eingebunden. */

                JASContextProperties.put(InitialContext.
INITIAL_CONTEXT_FACTORY,
                                         
"org.jnp.interfaces.NamingContextFactory");
/*
 * Initial Context für den Zugriff auf den JAS erstellen. */

                InitialContext initialContext =
new InitialContext(JASContextProperties);
/*
 * Construction der Klasse, die Schnittstelle zum EJB ist. */

                ShowTimeDateHome ShowTimeDateBeanHome;
                ShowTimeDateBeanHome =
                    (ShowTimeDateHome) initialContext.lookup(ShowTimeDateHome.
JNDI_NAME);
/*
 * Construction des EJB; dieses läuft auf dem JAS. */

                ShowTimeDate ShowTimeDateBeanInstance = ShowTimeDateBeanHome.create();
/*
 * Ausführen der Methode und Ausgabe des Ergebnisses auf der Konsole. */

                String[] result = ShowTimeDateBeanInstance.getTimeDateString(strKonsolAntwort);
                System.
out.println("Result[0]: " + result[0]);
                System.
out.println("Result[1]: " + result[1]);
            }
            
catch (NamingException e) {
/* Unerwarteter Fehler beim Erstellen des InitialContext; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("NamingException");
                e.printStackTrace();
            }
            
catch (RemoteException e) {
/* Unerwarteter Fehler beim Verbinden zum JAS; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("RemoteException");
                e.printStackTrace();
            }
            
catch (CreateException e) {
/* Unerwarteter Fehler beim Erstellen des EJB im JAS; Fehlermeldung auf die Konsole ausgeben. */
                System.
out.println("CreateException");
                e.printStackTrace();
            }
        }
    }
}

.zum Inhaltsverzeichnis

Weitere Schritte und verwandte Dokumentation

Dokument

Inhalt

Tutorial: Session Bean mit Datenbak-Zugriff (Java_EJB_03) – einrichten des Projects

In diesem Tutorial wird beschrieben, wie ein Datenbank-Zugriff innerhalb eines EJB programmiert wird.

Struts (noch zu schreiben)

In diesem Tutorial wird die Auswahl des Länder-Codes und die Anzeige der sprachabhängigen Datums- und Zeit-Anzeige mit einem Web-Browser durchgeführt.
Zur Entwicklung der Benutzeroberfläche und der Programm-Logik wird das Struts-Framework benutzt; besonders die Möglichkeit, eine Liste mit einer Auswahlmöglichkeit (Combo-Box) im Web-Browser anzuzeigen.
Struts ist eine Sammlung von Klassen, die das Entwickeln von Zugriffen auf ein EJB über einen Web-Browser unterstützen.

zum Inhaltsverzeichnis