> Inhalt: Einführung in das Programmieren mit Java > Inhalt: Einführung in das Programmieren von Enterprise Java Beans |
|
Letzte
Bearbeitung dieses Dokuments: |
Voraussetzungen für das Verständnis dieses Dokuments:Grundkenntnisse in der Programmierung von Java (Klassen, Methoden, Schleifen) oder anderer Objekt-Orientierter Programmiersprachen (z.B. C++, Modula-2, Pascal). Kenntnisse im Umgang mit Eclipse; empfohlen ist das Durcharbeiten der Einführungsbeispiele für das Programmieren mit Java. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
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.
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
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.
Obwohl
Eclipse in 'deutscher Version' installiert werden kann, sind
die Abbildungen in diesem Dokument mit der 'english Version'
erstellt. |
Session Bean entwickelt und wie in Session Bean mit Datenbank-Zugriff - Packen der Dateien in Java-Archive (JAR) und 'deploy' > JAR-Datei an den JAS übergeben ('deploy') beschrieben an einen JAS (Java Application Server) übergeben.
JAR-Datei mit den Schnittstellen für die Client-Programme (wie in Session Bean mit Datenbank-Zugriff - Packen der Dateien in Java-Archive (JAR) und 'deploy' > JAR-Datei für Client-Programme erstellen beschrieben) vorhanden.
Und natürlich alle Vorbedingungen für die beiden oberen Vorbedingungen ;-) .
Für
das im zweiten Teil zu entwickelnde Programm mit Graphischer
Benutzeroberfläche:
einführung: GUI-Programm (noch zu
schreiben !!! )
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.
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
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. |
|
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. |
|
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.
Dokument |
Inhalt |
In
diesem Tutorial wird das Erfassen des Chat-Textes und die Anzeige
der neuesten Chat-Einträge mit einem Web-Browser
durchgeführt. |