> 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 (Java_EJB_04)

* 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-21



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 Methoden des in den Dokumenten beginnend mit Tutorial: Session Bean mit Datenbank-Zugriff (Java_EJB_02) – Einrichten des Projects entwickelten EJB (Enterprise Java Bean) benutzt.

Im ersten Teil wird ein Client-Programm mit Ein- und Ausgabe über die Konsole vorgestellt.
Dessen Code ist im Aufbau fast identisch mit dem im
Tutorial: Client-Programm für Einfache Session Bean dokumentierten Code.
Deswegen wird die Entwicklung des Programms nur mehr in Stichworten beschrieben.

Im zweiten Teil wird ein Client-Programm mit graphischer Benutzeroberfläche (GUI / Graphic User Interface) entwickelt.

Inhaltsverzeichnis:

Vorbemerkung 
Vorbedingungen 
Project eröffnen und einrichten 
Java-Klasse anlegen 
Code für das Client-Programm mit Ein- und Ausgabe auf der Konsole 
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.

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.

Das Eröffnen und das Konfigurieren des Project ist ident wie bereits im Dokument Client Programm für einfache Session Bean > Project eröffnen und Einrichten detailliert und mit Abbildungen beschrieben.

Unterschiedlich sind nur:
Als 'Project name' wird
Java_EJB_04 festgelegt.
Als 'JAR' mit den 'interfaces' des EJB wird
Java_EJB_03/Java_EJB_03-client.jar in den 'Java Build Path' aufgenommen.

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_04) angeklickt und aus dem Kontext-Menu >New>Class ausgewählt.

  

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

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

  • Der Name der Klasse (ChatEntryClient) 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 des Buttons [ Finish ] wird die Datei für den Quell-Code der Klasse angelegt.




zum Inhaltsverzeichnis

Code für das Client-Programm mit Ein- und Ausgabe auf der Konsole

Das Schema des Client-Programms unterscheidet sich nicht wesentlich vom Tutorial: Client-Programm für Einfache Session Bean (Java_EJB_02).
Die Verwendung der Methoden eines EJB in einem Client-Programm hängt nicht davon ab, ob das EJB auf eine Datenbank zugreift oder nicht.

Deswegen wird anschließend der gesamte Code mit eingefügtem Kommentar gelistet.
Die Auswirkungen der einzelnen Teile des Codes entnehmen Sie bitte dem integrierten Kommentar.

package js_ejb04.client;
/*
 * Package mit dem Business Object das einen Chat-Eintrag repräsentiert. */

import js_ejb03.bo.*;
/*
 * Package mit den Schnittstellen-Definitionen zum EJB. */

import js_ejb03.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 die die TCP/IP-Adresse des 'Client'-Computers ermitteln. */

import java.net.*;
/*
 * 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;
/**
 *
 * @author kurt(at)javascout[dot]biz
 * @date 2009-02-20
 *
 * @description
 *  Stand-Alone Programm als Client für das im Tutorial Java_EJB_05
 *  entwickelte EJB (Enterprise Java Bean).
 *
 * @change-log
 * when         who               why
 * --------------------------------------------------------
 *
 */

public class ChatEntryClient {

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

    
/**
     * @param args
    */

    
public static void main(String[] args) {
        // TODO Auto-generated method stub
/*
 * 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 {
/*
 * 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.
 * Diese wird über den in der JNDI eingetragenen Namen ermittelt. */

                ChatManagementHome ChatManagementBeanHome;
                ChatManagementBeanHome =
                    (ChatManagementHome) initialContext.lookup(
"ejb/js_ejb03/ChatManagement");
/*
 * Construction des EJB; dieses läuft auf dem JAS. */

                ChatManagement ChatManagementBeanInstance = ChatManagementBeanHome.create();
/*
 * Ausführen der Methode und Ausgabe des Ergebnisses auf der Konsole. */

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

                Vector vecBO_Set = ChatManagementBeanInstance.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; 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

Weitere Schritte und verwandte Dokumentation

Dokument

Inhalt

Struts (noch zu schreiben)

In diesem Tutorial wird das Erfassen des Chat-Textes und die Anzeige der neuesten Chat-Einträge 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 mehreren Zeilen über den 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