> 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:Grundverständnis der Software-Entwicklung und des Datenbank-Entwurfes. Dieses Dokument ist ein Teil des Tutorials Session Bean mit Datenbank-Zugriff, EJB-Standard (Java_EJB_07) – Einrichten des Projects und folgenden Dokumenten – kann aber auch alleine als Referenz verwendet werden, wie das MySQL-Datenbanksystem mit dem JBoss oder Glassfish Java-Application-Server (JAS) verwendet wird. |
Ungefährer Zeitbedarf zum Durcharbeiten dieses Dokuments:Arbeitszeit:
|
Die
Anleitung in diesem Dokument beschreibt die Maßnahmen, um JBoss
oder Glassfish
mit einem MySQL-Datenbanksystem
zu betreiben.
Dieses Dokument ist Teil des Tutorials Session Bean
mit Datenbank-Zugriff.
Gegenüber dem im Java-Application-Server (JAS) JBoss integrierte Hypersonic ist MySQL ein Datenbanksystem für professionelle Verwendung.
In diesem Dokument wird beschrieben, welche Veränderungen notwendig sind, um MySQL für die Datenspeicherung zu verwenden.
Nach
der Installation der notwendigen Dateien werden 2 Möglichkeiten
zur Veränderung der META-INFormation eines EJB
vorgestellt:
* Änderung des XDoclet-Parameters im Code
des EJB.
Damit wird eine Datei mit der passenden
XML-Struktur erzeugt.
* Nachträgliche Änderung der
Datei mit der verantwortlichen XML-Struktur.
Die nachträgliche
Änderung ist dann notwendig, wenn eine Software bei der
Installation an die bestehende Umgebung (JAS und DB-System) angepaßt
werden muß.
Vorigerer Schritt: Packen der Dateien in Java-Archive (JAR) und 'deploy'
Datenbank-Tabelle in MySQL erstellen
XML-Datei ejb-jar.xml erstellen
Anleitungen
bei Verwendung von JBoss
* Vorbedingungen
* XML-Datei
für eine 'Datasource' des MySQL Datenbanksystems
bearbeiten
* Allgemeine
Bemerkungen zum Namen einer 'Datasource'-Datei
* XML-Datei
im EJB für die Zuordnung der Datasource erstellen
Anleitungen
bei Verwendung von Glassfish
* Vorbedingungen
* Einen
Connection Pool erstelen
* Eine
Datasource festlegen
* XML-Datei
im EJB für die Zuordnung der Datasource erstellen
Packaging
Configuration für Java_EJB_07.jar
erweitern
Test
und Fehlersuche (erst nach Fertigstellung des Client-Programms
möglich)
Packaging
Configuration für das Enterprise Archive (EAR-Datei)
erstellen
Gesamter Code am
Ende des Tutorials
Java-Klassen
für das EJB (abgeschlossen im Schritt Codieren)
Datei
ejb-jar.xml
Datei
jboss.xml
Datei
sun-ejb-jar.xml
Weitere
Schritte und verwandte Dokumentation
Nächstes
Tutorial:
Tutorial:
Client-Programm für Session Bean mit Datenbank-Zugriff,
EJB-Standard (Java_EJB_08)
Die
Anleitung unter
http://wiki.jboss.org/community/wiki/SetUpAMysqlDatasource
enthält eine leicht verständliche Erklärung mit
Beispielen für JBoss.
Ein großer Dank an den/die
anonymen Autor/en/innen.
Für
Glassfish schrieb Torsten Horn eine komplette Anleitung für ein
EJB.
Die Anleitung finden Sie unter
http://www.torsten-horn.de/techdocs/jee-sunglassfish.htm.
Datenbank-Tabelle
in MySQL erstellen
Die
folgenden Anweisungen setzen voraus, dass die Datenbank 'js_tutorial'
so wie unter
MySQL
Datenbank für die Verwendung mit Java-Programmen einrichten
erstellt
wurde und auch die Rechte wie beschrieben an den Benutzer 'mysql'
vergeben wurden.
Öffnen Sie ein 'Terminal'-Fenster durch Auswahl von Anwendungen > Systemwerkzeuge > Terminal. |
|
Zum
Aufrufen des Datenbank-Monitors geben Sie im 'Terminal'-Fenster
folgendes Kommando ein: Geben Sie nach der Aufforderung das Passwort ein. Daraufhin meldet sich der Datenbank-Monitor und wartet auf die Eingabe von SQL-Kommandos. |
|
Erstellen
Sie die neue Datenbank mit folgendem SQL-Kommando: Bitte beachten Sie, dass Sie das SQL-Kommando in einer Zeile oder über mehrere Zeilen verteilt schreiben können aber mit einem Strichpunkt (;) abschließen müssen ! Beenden Sie den Datenbank-Monitor durch das Kommando quit und schließen Sie das Terminal-Fenster durch das Kommando exit. |
|
Diese
Datei enthält die allgemeine Konfiguration für eine EJB.
In
Tutorial:
Einfache Session Bean, EJB3-Standard (Java_EJB_05) – Packen in
EAR-Datei und Ändern des JNDI-Namens > Ändern des
JNDI-Namens
wurde
gezeigt, wie dem EJB ein beliebiger JNDI-Name zugeordnet wird.
In
diesem Abschnitt werden in die Datei 'ejb-jar.xml' allgemeine
Informationen über die Datasource aufgenommen.
Vorbemerkung: Damit das jetzt zu erstellende Verzeichnis META-INF nicht mit einem (später zu erstellenden) Verzeichnis für das Enterprise-ARchiv (Datei 'Java_EJB_07.ear') kollidiert, wird das Verzeichnis META-INF innerhalb des Verzeichnis 'gen' angelegt. Das
Verzeichnis wird auf folgende Weise erstellt: |
|
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 (ebj-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 (unterhalb der Abbildung) mit den Anweisungen für JBoss kann in die geöffnete Datei kopiert werden. |
|
Die
Datei enthält folgende XML-Struktur:
<?xml
version=
"1.0"
?>
<ejb-jar
version=
"3.0"
>
<display-name>ChatManagement
EJB
</display-name>
<description>EJB
aus dem JavaScout EJB-Tutorial
07
</description>
<enterprise-beans>
<session>
<ejb-name>Java_EJB_07_Tutorial
</ejb-name>
<mapped-name>mapped_ChatManagementBeanJNDI
</mapped-name>
<resource-ref>
<res-ref-name>ds/Chat_DS
</res-ref-name>
<res-type>javax.sql.DataSource
</res-type>
<res-auth>Container
</res-auth>
</resource-ref>
</session>
</enterprise-beans>
</ejb-jar>
Die
Bedeutung der XML-Elemente für die Zuordnung des JNDI-Namens zum
EJB und der Beschreibung wurde bereits unter
Tutorial:Einfache
Session Bean, EJB3-Standard (Java_EJB_05) – Packen in EAR-Datei
und Ändern des JNDI-Namens > Ändern des JNDI-Namens >
Konfigurationsdatei ejb-jar.xml erstellen
erklärt.
Anschließend
sind die XML-Elemente, die für die Datasource notwendig sind,
beschrieben:
<resource-ref>
ist
jener XML-Bereich in dem genauer beschrieben ist, welche Art von
Datasource vom EJB erwartet wird.
<res-ref-name>
ist
jener symbolische Name der innerhalb des EJB für die Datasource
verwendet wird.
Dieser Name wurde in der Klasse des EJB (siehe
Tutorial:
Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) -
Codieren > Gesamter Code am Ende des Schrittes > Datei
ChatManagementBean.java)
unter @Resource(name="ds/Chat_DS",
mappedName="...")
festgelegt.
<res-type>
ist
eine Festlegung, welcher Art die Datasource ist.
Durch die
Verwendung der Klasse javax.sql.DataSource
wird
bestimmt, dass eine SQL-Datenbank verwendet wird.
Der
EJB3-Standard bietet die Flexibilität, Daten von jeder
beliebigen Datenquelle zu beziehen – z.B. auch von einer
Schnittstellenkarte mit der Messwerte erfasst werden oder über
die Informationen an ein externes Gerät (z.B.
Produktionsmaschine) übertragen werden.
In diesem Fall muss
vom Hersteller der Schnittstellenkarte eine passende Java-Klasse zur
Verfügung gestellt werden.
<res-auth>
ist
eine Festlegung, wann und wie eine Authentifizierung gegenüber
der Datasource statt findet.Container
bedeutet,
dass Benutzername und Passwort für den Zugriff auf die
Datenbank bei der Definition der Datasource im JAS festgelegt
sind..
Für dieses Tutorial erfolgt das in den Abschnitten
Anleitungen
bei der Verwendung von JBoss > XML-Datei für eine
'Datasource' des MySQL Datenbanksystems bearbeiten
bzw.
Anleitungen
bei Verwendung von Glassfish > Einen Connection Pool
erstellen.
Alternativ
gibt es mit Application
die
Möglichkeit, eine Authentifizierung bei jedem Zugriff auf die
Datenbank (bei jedem Ausführen eines SQL-Kommandos)
durchzuführen.
Dazu muss allerdings im Anwendungsprogramm
der Name des Benutzers und dessen Passwort bekannt sein – z.B.
durch Abfrage der Werte auf einer Chip-Karte.
Wegen des erhöhten
Aufwandes (beim Erstellen des Anwendungsprogramms und an
Computerleistung bei der Ausführung) wird Application
nur
sinnvoll sein wenn besonders hohe Sicherheitsanforderungen erfüllt
werden müssen.
Bei JBoss (getestet mit Versionen 5.0.1 und 5.1.0, jeweils 'GA') funktioniert ein 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. Solange
der Fehler durch eine neuere Version von JBoss
nicht behoben ist empfehle ich, mit Glassfish
Version 2.1.1 zu testen ! |
JBoss Java Application Server installiert und dessen Vorbedingungen auch.
JAR- (Java-ARchive-) Datei mit den Klassen für die Verbindung zum MySQL-Datenbanksystem im passenden Verzeichnis von JBoss installiert; siehe MySQL Datenbank für die Verwendung mit Java-Programmen einrichten > Java-Archiv (JAR) Datei mit dem 'Connector' zu MySQL – Installation für JBoss JAS.
Eine MySQL-Datenbank mit dem Namen 'js_tutorial' ist eingerichtet; die Beispiele in diesem Dokument beziehen sich auf die im MySQL Datenbank für die Verwendung mit Java-Programmen einrichten erstellte Datenbank.
Ein
Unterverzeichnis 'META-INF' innerhalb des Verzeichnisses 'gen' im
Project erstellt.
Das Erstellen des Unterverzeichnisses
'META-INF' erfolgt im Abschnitt XML-Datei
ejb-jar.xml
erstellen.
XML-Datei für eine 'Datasource' des MySQL Datenbanksystems bearbeiten
Konzept
bei der Zuordnung von Datenbanken zu EJB ist, dass auch die
Verbindung zu einer Datenbank mit einem JNDI- (Java Naming and
Directory Interface) Namen versehen ist.
Die Zuordnung zwischen
einem EJB und der Datenbank erfolgt in Konfigurationsdateien.
Diese
Konfigurationsdateien werden in einem späteren Abschnitt
besprochen.
Die
Zuordnung eines JNDI-Namens an eine Datenbank ist in einer
XML-Struktur definiert. Diese XML-Struktur kann in jeder Datei mit
XML-Struktur und einem beliebigem Namen enthalten sein –
soferne diese Datei im Verzeichnis 'deploy' von JBoss enthalten
ist.
Um leichter den Überblick behalten zu können ist es
aber sinnvoll, den Namen der Datei entweder an das Datenbanksystem
oder den Aufgabenbereich anzupassen.
In diesem Beispiel ist die
mit JBoss gelieferte Datei entsprechend dem Datenbanksystem benannt
und dieser Name wird beibehalten.
Zu beachten ist allerdings, dass ein JNDI-Name für eine Verbindung zur Datenbank nur einmal innerhalb des 'deploy'-Verzeichnisses vorhanden sein darf – gleich in welcher Datei mit XML-Struktur; mehr dazu ist im Abschnitt Allgemeine Bemerkungen beschrieben.
Eine Muster-Datei für eine MySQL-'Datasource' wird bei der Installation von JBoss unter dem Verzeichnis-/Datei-Namen '/opt/jboss/docs/examples/jca/mysql-ds.xml' installiert.
Diese Datei wird unter gleichem Dateinamen in das Verzeichnis '/opt/jboss/server/default/deploy' kopiert.
Dabei können folgende Teile des Verzeichnisses bei Ihrer Installation vom Beispiel abweichen:
/opt/jboss/server/default/deploy
wenn
Sie JBoss in einem anderen Verzeichnis installiert haben.
/opt/jboss/server/default/deploy
'default'
ist das Konfigurations-Verzeichnis das JBoss beim Start verwendet
wenn Sie keine anderes Verzeichnis als Option (--configuration)
angegeben haben.
Wenn Sie ein anderes Verzeichnis
für die Konfiguration verwenden, dann ist die XML-Datei in das
'deploy' Unterverzeichnis des verwendeten
Konfigurations-Verzeichnisses zu kopieren.
Als Datenbank wird jene verwendet, die im Dokument MySQL Datenbank für die Verwendung mit Java-Programmen einrichten erstellt wurde; diese hat den Namen 'js_tutorial'.
Eine detaillierte Beschreibung der individuellen Werte folgt anschließend an die Beispiel-Datei; klicken Sie bitte auf die jeweiligen Zeilen um zur Beschreibung zu gelangen.
<?xml
version=
"1.0"
encoding=
"UTF-8"
?>
<!--
$Id: mysql-ds.xml 63175 2007-05-21 16:26:06Z rrajesh $ -->
<!--
Datasource config for MySQL using 3.0.9 available
from:
http://www.mysql.com/downloads/api-jdbc-stable.html
--><datasources>
<local-tx-datasource>
<jndi-name>MySqlDS_JS_Tutorial
</jndi-name>
<driver-class>
com.mysql.jdbc.Driver
</driver-class>
<connection-url>
jdbc:mysql://192.168.0.99:3306/js_tutorial
</connection-url>
<user-name>
mysql
</user-name>
<password>
drowssap
</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
<!--
Should only be used on drivers after 3.22.1 with "ping"
support
-->
<valid-connection-checker-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker
</valid-connection-checker-class-name>
<!--
-->
<!-- sql to call when connection is
created
<new-connection-sql>some arbitrary
sql</new-connection-sql>
-->
<!--
sql to call on existing pooled connection when it is obtained from
pool -
MySQLValidConnectionChecker is preferred for
newer drivers
<check-valid-connection-sql>some
arbitrary sql</check-valid-connection-sql>
-->
<metadata>
<type-mapping>mySQL
</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
<jndi-name>
ist
der Name dieser 'Datasource'-Beschreibung in der Java Naming and
Directory Interface.
Über diesen Namen wird in der
JAS-spezifischen Datei ('jboss.xml' bei Verwendung von JBoss) im
'META-INF' Verzeichnis des EJB der JNDI-Name der im Quell-Code des
EJB für die 'Datasource' verwendet wird ('Chat_DS' in diesem
Tutorial), mit der Datenbank verbunden.
Das 'Verbinden' der hier
definierten 'Datasource' der Datenbank mit der im Anwendungsprogramm
definierten 'Datasource' wird anschließend im Abschnitt
XML-Datei
im EJB für die Zuordnung der Datasource erstellen
beschrieben.
Der
hier definierte Name darf nur einmal als JNDI-Name innerhalb des
Java Application Server (JAS) vorkommen !
<driver-class>
ist
die Klasse, die den Code für die Verbindung zum Datenbanksystem
enthält.
Diese Klasse wird vom Hersteller des
Datenbanksystems bereitgestellt und ist üblicherweise in einer
eigenen Java-ARchiv- (JAR-) Datei enthalten.
In diesem Tutorial
ist das die Datei 'mysql-connector-java-5.1.5-bin.jar' (bzw. eine
neuere Version), die in das Verzeichnis
'/opt/jboss/server/default/lib'
kopiert wurde.
<connection-url>
ist
die Identifikation der Datenbank.
Diese Bezeichnung hängt
vom verwendeten Datenbanksystem ab; das verwendete Beispiel bezieht
sich auf das Datenbanksystem MySQL, das auf einem Computer mit der
TCP/IP-Adresse 192.168.0.99) läuft.
<user-name>
ist
die Identifikation eines Benutzers, der Rechte für den Zugang
zur Datenbank besitzen muss.
Die Einrichtung einer Datenbank
unter MYSQL und die Vergabe von Berechtigungen ist im Dokument MySQL
Datenbank für die Verwendung mit Java-Programmen einrichten
beschrieben.
<password>
ist
das Passwort zu der verwendeten Benutzer-Identifikation
(<user-name>
).
Die
Einrichtung einer Datenbank unter MYSQL und die Vergabe von
Berechtigungen ist im Dokument MySQL
Datenbank für die Verwendung mit Java-Programmen einrichten
beschrieben.
Die
Werte bis hierher sind bei jedem Datenbanksystem erforderlich. Sie
reichen aus um eine Datenbank für die Entwicklung von Software
einzubinden.
Anschließend
finden Sie zwei weitere Werte um zu zeigen, dass in dieser Datei
weitere, speziell auf MySQL abgestimmte Einstellungen festgelegt
werden können.
Die Aufzählung und Erklärung aller
Möglichkeiten würde den Umfang dieses Tutorials bei weitem
überschreiten.
Das Festlegen weiterer Einstellungen ist
notwendig wenn eine Datenbank für den Echtbetrieb optimiert
werden soll.
Für eine Liste der möglichen Einstellungen
und Ihrer Auswirkungen ziehen Sie bitte die Dokumentation Ihres
verwendeten Datenbanksystems zu Rate.
<
exception-sorter-class-name
>
ist
ein spezieller Parameter für MySQL-Datenbanksysteme.
Die
Funktion der definierten Klasse konnte ich nicht eruieren –
der Parameter war in der Muster-Datei vorgegeben.
<valid-connection-checker-class-name>
ist
ein weiterer spezieller Parameter für
MySQL-Datenbanksysteme.
Damit wird eine Verbindung (Connection)
zur Datenbank nicht geschlossen wenn ein Zugriff durch das
Java-Programm beendet ist.
Stattdessen wird die 'geöffnete'
Verbindung in einem Pool gehalten und ist bei einer neuen
Anforderung durch das Java-Programm schneller verfügbar als
wenn erst eine neuerliche Verbindung zur Datenbank eröffnet
werden müsste.
Allgemeine
Bemerkungen zum Namen einer 'Datasource'-Datei
Die
XML-Struktur mit der Definition einer 'Datasourde' kann in einer
Datei mit beliebigem Namen enthalten sein.
Die vorher beschriebene
XML-Struktur könnte auch in einer Datei mit dem Namen
'srqp-fdsa.xml' abgespeichert sein.
JBoss und andere JAS
durchsuchen alle Dateien im jeweiligen Unterverzeichnis 'deploy' und
reagieren nur auf die entsprechenden Element-Namen einer vorhandenen
XML-Struktur.
Zu
welchem Datenbanksystem dann die Verbindung hergestellt wird hängt
allein von den Parametern in den XML-Elementen
<driver-class>
und
<connection-url>
ab.
Trotzdem
ist zu empfehlen, die Namen der Beschreibungsdateien so zu wählen,
dass das verwendete Datenbanksystem erkennbar ist.
Zu
beachten ist, dass der Name im XML-Element
<jndi-name>
('MySqlDS_JS_Tutorial'
in diesem Beispiel) nur einmal in allen Dateien vorkommen darf !
Der
beschriebene Mechanismus erlaubt auch, aus einem Programm auf mehrere
Datenbanken – auch verschiedener Datenbanksysteme oder auf
verschiedenen Computern – zuzugreifen.
Die
Definition mehrerer 'Datasources' kann auch in einer Datei erfolgen.
Dazu ist nur notwendig, den Bereich
<local-tx-datasource>
der
XML-Struktur mehrmals – mit verschiedenen Parametern – in
einer Datei einzutragen.
XML-Datei
im EJB für die Zuordnung der Datasource erstellen
Die
Definition der Verbindung zwischen einem EJB und der 'Datasource' (in
unserem Fall die Datenbank mit JNDI-Namen 'MySqlDS_JS_Tutorial';
erstellt im Abschnitt
XML-Datei
für eine 'Datasource' des MySQL Datenbanksystems bearbeiten
)
ist nicht 'genormt' und für alle JAS (Java Application Server)
einheitlich.
JBoss erwartet diese Definition der Verbindung in der
Datei 'jboss.xml' im Verzeichnis 'META-INF' in der JAR-Datei mit den
Klassen für das EJB.
Vorbedingung
für die folgenden Anleitungen ist, dass ein Unterverzeichnis
'META-INF' innerhalb des Verzeichnisses 'gen' im Project vorhanden
ist. Das 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 (jboss.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 (unterhalb der Abbildung) mit den Anweisungen für JBoss kann in die geöffnete Datei kopiert werden. |
|
Die
Datei enthält folgenden Code:
<?xml
version=
"1.0"
?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>
Java_EJB_07_Tutorial
</ejb-name>
<resource-ref>
<res-ref-name>ds/Chat_DS
</res-ref-name>
<jndi-name>java:/MySqlDS_JS_Tutorial
</jndi-name>
</resource-ref>
</session>
</enterprise-beans>
</jboss>
<jboss>
ist
der Hinweis, dass die Einstellungen in dieser XML-Struktur nur für
einen JBoss JAS gelten und von anderen JAS ignoriert werden
können.
Auf diese Weise ist es möglich, bei der
Auslieferung von Standard-Software das EJB für alle bekannten
JAS zu konfigurieren.
<enterprise-beans>
ist
der Bereich für die Konfigurationen der in die JAR-Datei
gepackten EJB.
Die Angabe des Bereiches ist notwendig, weil in
die JAR-Datei auch Klassen eines anderen Typs (z.B. Message-Queues)
gepackt werden können.
Diese anderen Typen werden in diesem
Tutorial nicht verwendet – deswegen beschränkt sich diese
Dokumentation nur auf EJB.
<session>
ist
der Bereich für die Konfigurationen eines Session-EJB.
Die
Definition eines Session-Beans ist notwendig weil Konfigurationen
für andere EJB-Typen (CMP / Container Managed Persistence oder
BMP / Bean Managed Persistence) unterschiedlich sind.
<ejb-name>
ist
der 'Name' des Session Beans für das die Zuordnung der
Datasource gilt.
Dieser Name wurde in der Klasse des EJB (siehe
Tutorial:
Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) -
Codieren > Gesamter Code am Ende des Schrittes > Datei
ChatManagementBean.java)
unter @Stateless(name="Java_EJB_07_Tutorial",
mappedName="...")
festgelegt.
<resource-ref>
ist
der Bereich für die Festlegung der Verbindung zwischen EJB und
Datasource.
<res-ref-name>
ist
der symbolische Name der Datasource innerhalb des Session
Beans.
Dieser Name wurde in der Klasse des EJB (siehe Tutorial:
Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) -
Codieren > Gesamter Code am Ende des Schrittes > Datei
ChatManagementBean.java)
unter @Resource(name="ds/Chat_DS",
mappedName="...")
festgelegt.
<jndi-name>
ist
der JNDI-Name der Datasource innerhalb des JAS.
Dieser Name wurde
im Abschnitt XML-Datei
für die 'Datasource' MySQL bearbeiten unter
dem XML-Element <jndi-name>
MySqlDS_JS_Tutorial
</jndi-name>
festgelegt.
Eine
Besonderheit von JBoss ist, dass in der Datei 'jboss.xml' (die jetzt
besprochen wird) der Text java:/
vor
den referenzierten <jndi-name>
der
Datasource-Beschreibung (in der Datei 'mysql-ds.xml' im Abschnitt
XML-Datei
für die 'Datasource' MySQL bearbeiten)
gesetzt werden muss.
Wenn Sie nur eine Konfigurationsdatei für JBoss benötigen setzen Sie bitte mit dem Abschnitt Packaging Configuration für Java_EJB_07.jar erweitern fort.
Glassfish
bietet die Möglichkeit, die Datasource über eine
Web-Oberfläche einzurichten.
Damit kann auch auf einem
anderen Computer - als von dem, auf dem Glassfish installiert ist –
die Datasource erstellt oder verändert werden.
Glassfish Java Application Server installiert und dessen Vorbedingungen auch.
JAR- (Java-ARchive-) Datei mit den Klassen für die Verbindung zum MySQL-Datenbanksystem im passenden Verzeichnis von Glassfish installiert; siehe MySQL Datenbank für die Verwendung mit Java-Programmen einrichten > Java-Archiv (JAR) Datei mit dem 'Connector' zu MySQL– Installation für Glassfish JAS.
Eine MySQL-Datenbank mit dem Namen 'js_tutorial' ist eingerichtet; die Beispiele in diesem Dokument beziehen sich auf die im MySQL Datenbank für die Verwendung mit Java-Programmen einrichten erstellte Datenbank.
Ein
Unterverzeichnis 'META-INF' innerhalb des Verzeichnisses 'gen' im
Project erstellt.
Das Erstellen des Unterverzeichnisses
'META-INF' erfolgt im Abschnitt XML-Datei
ejb-jar.xml
erstellen.
Einen
Connection Pool erstellen
Die
Definition der Verbindung zwischen einem EJB und der 'Datasource' (in
unserem Fall die Datenbank mit JNDI-Namen 'MySqlDS_JS_Tutorial';
erstellt im folgenden Abschnitt
Eine
Datasource festlegen
)
ist nicht 'genormt' und das Erstellen erfordert für jeden JAS
(Java Application Server) ein eigenes Vorgehen.
In
Glassfish erfolgt die Verbindung über einen Connection
Pool.
Dieser wird über die Web-Oberfläche für die
Administration von Glassfish erstellt.
Gegenüber dem
Editieren einer XML-Datei hat die Definition der Werte über die
Web-Oberfläche den Vorteil, dass Tippfehler weitgehend
ausgeschlossen sind.
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 ]. |
|
Im folgenden Fenster klicken Sie die Schaltfläche Create New JDBC Connection Pool an. |
|
Im folgenden Fenster erfassen Sie bitte folgende Konfigurationsdaten:
Klicken Sie anschließend auf die Schaltfläche [ Next ]. |
|
Im
folgenden Fenster haben Sie die Möglichkeit, die Verbindung
zur Datenbank detailliert zu konfigurieren. Für die Verwendung sind nur drei Einstellungen notwendig. Scrollen Sie nach unten bis Sie den Bereich 'Additional Properties' sehen und ändern Sie folgende Werte:.
Klicken Sie anschließend auf die Schaltfläche [ Finish ]. |
|
Im folgenden Fenster sehen Sie eine Übersicht der vorhandenen Connection Pools. Zum Testen klicken Sie mit der linken Maustaste auf den Namen des gerade erstellten Connection Pools. |
|
Zum Testen, ob die Verbindung zur Datenbank fehlerfrei funktioniert, klicken Sie bitte mit der linken Maustaste auf die Schaltfläche [ Ping ]. Im gleichen Fenster wird dann das Ergebnis ('Ping Succeeded' auf gelbem Hintergrund) angezeigt. |
|
Gegenüber
JBoss ist bei Glassfish nicht mehr möglich, eine 'ganz einfache'
Definition in einer XML-Datei mit einer minimalen Anzahl von Werten
zu erstellen.
Die
Einstellung von Glassfish führt schon dahin, dass das
MySQL-Datenbanksystem wesentlich mehr Anforderungen erfüllen
kann als für dieses Tutorial gebraucht werden.
Die Trennung
in Connection Pool und Datasource hat den Sinn, über die
Parameterisierung verschiedener Connection Pools eine optimale
Zugriffszeit für jedes EJB, das auf die Datenbank zugreifen
will, zu erreichen.
Wählen
Sie im linken Rahmen Im darauf hin erscheinenden rechten Rahmen klicken Sie bitte auf die Schaltfläche [ New ]. |
|
Im folgenden Fenster erfassen Sie bitte folgende Konfigurationsdaten:
Klicken Sie anschließend auf die Schaltfläche [ OK ]. |
|
Im folgenden Fenster sehen Sie eine Übersicht der vorhandenen Datasources. |
|
XML-Datei
im EJB für die Zuordnung der Datasource erstellen
Die
Definition der Verbindung zwischen einem EJB und der 'Datasource' (in
unserem Fall die Datenbank mit JNDI-Namen 'MySqlDS_JS_Tutorial';
erstellt im Abschnitt
Anleitungen
bei Verwendung von Glassfish > Eine Datasource festlegen
)
ist nicht 'genormt' und muss individuell für den verwendeten JAS
(Java Application Server) erstellt werden.
JBoss erwartet diese
Definition der Verbindung in der Datei 'jboss.xml' im Verzeichnis
'META-INF' in der JAR-Datei mit den Klassen für das EJB.
Vorbedingung
für die folgenden Anleitungen ist, dass ein Unterverzeichnis
'META-INF' innerhalb des Verzeichnisses 'gen' im Project vorhanden
ist. Das 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 (sun-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 (unterhalb der Abbildung) mit den Anweisungen für Glassfish (und andere JAS von SUN) kann in die geöffnete Datei kopiert werden. |
|
Die
Datei enthält folgenden Code:
<?xml
version=
"1.0"
?>
<sun-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>
Java_EJB_07_Tutorial
</ejb-name>
<resource-ref>
<res-ref-name>ds/Chat_DS
</res-ref-name>
<jndi-name>MySqlDS_JS_Tutorial
</jndi-name>
</resource-ref>
</ejb>
</enterprise-beans>
</sun-ejb-jar>
<sun-ejb-jar>
ist
der Hinweis, dass die Einstellungen in dieser XML-Struktur nur für
einen JAS von SUN gelten und von anderen JAS ignoriert werden
können.
Auf diese Weise ist es möglich, bei der
Auslieferung von Standard-Software das EJB für alle bekannten
JAS zu konfigurieren.
<enterprise-beans>
ist
der Bereich für die Konfigurationen der in die JAR-Datei
gepackten EJB.
Die Angabe des Bereiches ist notwendig, weil in
die JAR-Datei auch Klassen eines anderen Typs (z.B. Message-Queues)
gepackt werden können.
Diese anderen Typen werden in diesem
Tutorial nicht verwendet – deswegen beschränkt sich diese
Dokumentation nur auf EJB.
<ejb>
ist
der Bereich für die Konfigurationen eines EJB; gleich welcher
Art.
Glassfish unterscheidet in diesem Bereich nicht zwischen
EJB-Typen (Session, CMP / Container Managed Persistence oder BMP /
Bean Managed Persistence).
<ejb-name>
ist
der 'Name' des Session Beans für das die Zuordnung der
Datasource gilt.
Dieser Name wurde in der Klasse des EJB (siehe
Tutorial:
Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) -
Codieren > Gesamter Code am Ende des Schrittes > Datei
ChatManagementBean.java)
unter @Stateless(name="Java_EJB_07_Tutorial",
mappedName="...")
festgelegt.
<resource-ref>
ist
der Bereich für die Festlegung der Verbindung zwischen EJB und
Datasource.
<res-ref-name>
ist
der symbolische Name der Datasource innerhalb des Session
Beans.
Dieser Name wurde in der Klasse des EJB (siehe Tutorial:
Session Bean mit Datenbank-Zugriff, EJB3-Standard (Java_EJB_07) -
Codieren > Gesamter Code am Ende des Schrittes > Datei
ChatManagementBean.java)
unter @Resource(name="ds/Chat_DS",
mappedName="...")
festgelegt.
<jndi-name>
ist
der JNDI-Name der Datasource innerhalb des JAS.
Dieser Name wurde
im Abschnitt Eine
Datasource festlegen über
die Administrator-Web-Oberfläche von Glassfish festgelegt.
Packaging
Configuration für
Java_EJB_07.jar
erweitern
Damit
die in den vorigen Abschnitten erstellte(n) Konfigurationsdatei(en)
auch in die JAR-Datei mit den Klassen für das EJB aufgenommen
wird, muss die Packaging Configuration für die Datei
'Java_EJB_07.jar' angepasst werden.
Klicken Sie dazu mit der linken Maustaste auf den Reiter 'Project archives' und dann auf das Project ('Java_EJB_07' im Bereich 'Package Explorer'). Wenn die Archiv-Dateien nicht zu sehen sind, klicken Sie mit der linken Maustaste auf das kleine Dreieck links neben 'Java_EJB_07'. Der
Eintrag für ein Verzeichnis wird auf folgende Weise
erstellt: |
|
Im geöffneten Fenster (Create a folder) wird der Name des Verzeichnisses (META-INF / Bitte Großschreibung beachten !) erfasst und durch Anklicken der Schaltfläche [ OK ] bestätigt. Anschließend ist das erstellte Verzeichnis in der Verzeichnisstruktur des Bereichs 'Project archives' zu sehen. |
|
Der gerade erstellte Eintrag für 'META-INF' wird mit der rechten Maustaste angeklickt und aus dem Kontext-Menu wird New Fileset ausgewählt. |
|
Im folgenden Fenster ('Fileset Wizard') wird durch Anklicken der Schaltfläche [ Workspace... ] (über dem Eingabefeld 'Includes') ein eigenes Fenster geöffnet, in dem als Nächstes jenes Verzeichnis, in dem die Datei mit der Konfiguration ist, ausgewählt werden kann. |
|
Im
erscheinenden Auswahl-Fenster ('Select a destination') wird zum
Verzeichnis 'gen/META-INF' manövriert, in dem die
Konfigurationsdatei liegt. Die Verzeichnis-Struktur wird angezeigt bzw. verborgen, wenn das kleine Dreieck links neben einem Verzeichnis-Namen angeklickt wird. Die Auswahl wird durch Anklicken der Schaltfläche [ OK ] bestätigt und damit wird auch das Fenster geschlossen. |
|
Im Fenster für den 'Fileset Wizard' werden dann die Filter-Kriterien für die Dateien, die in die JAR-Datei aufgenommen werden sollen, im Feld 'Includes' festgelegt: **. ** bedeutet, dass alle Dateien innerhalb des Verzeichnisses in die Archiv-Datei gepackt werden sollen. Nach Eingabe der Filter-Kriterien ist im Feld 'Preview' zu sehen, welche Dateien ausgewählt sind. Die Definition wird durch Anklicken der Schaltfläche [ Finish ] abgeschlossen und damit wird auch das Fenster geschlossen. |
|
Im Bereich des 'Project archives' ist dann sichtbar, welche Dateien für das Packen in die JAR-Datei ausgewählt sind. Die Struktur für die JAR-Datei kann durch Anklicken des kleinen Dreiecks links neben den Datei- bzw. Verzeichnis-Namen angezeigt oder verborgen werden. |
|
Zuletzt muss noch eine neue Archiv-Datei erstellt werden. Dazu wird die Datei 'Java_EJB_07.jar' mit der rechten Maustaste angeklickt und aus dem Kontext-Menu Build Archive (Full) ausgewählt. Der Vorgang des 'Packens' dauert nur Bruchteile einer Sekunde und es wird keine Rückmeldung gegeben wenn der Vorgang beendet ist. |
|
Damit
die geänderte Konfiguration wirksam wird, muss die Datei erneut
an den JAS übergeben ('deployed') werden.
Ein Anleitung mit
Abbildungen finden Sie unter Tutorial:
Session Bean mit Datenbank-Zugriff, EJB-Standard (Java_EJB_07) –
Packen der Dateien in Java-Archive (JAR) und 'deploy' > JAR-Datei
an den JAS übergeben ('deploy') > 'Deploy' bei JBoss
.
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 Session Bean mit Datenbank-Zugirff,
EJB3-Standard (Java_EJB_08)
)
möglich.
In diesem Dokument finden Sie im Abschnitt >
Test
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.
Packaging
Configuration für das Enterprise Archive (EAR-Datei) erstellen
Für
das Testen des erstellten EJB reicht das 'deploy' der JAR-Datei
aus.
Das Erstellen einer EAR-Datei unterscheidet sich nur in den
gewählten Dateinamen von der Vorgangsweise die unter
Tutorial:Einfache
Session Bean, EJB3-Standard (Java_EJB_05) - Packen in EAR-Datei und
Ändern des JNDI-Namens > Packen in eine EAR-Datei
beschrieben
ist.
Gesamter
Code am Ende des Schrittes
Der
Java-Code wurde im Schritt
Codieren
abgeschlossen
und braucht für das Einbinden der Datenbank nicht verändert
werden.
<?xml
version
=
"1.0"
?>
<ejb-jar
version
=
"3.0"
>
<display-name>ChatManagement
EJB
</display-name>
<description>EJB
aus dem JavaScout EJB-Tutorial
07
</description>
<enterprise-beans>
<session>
<ejb-name>Java_EJB_07_Tutorial
</ejb-name>
<mapped-name>mapped_ChatManagementBeanJNDI
</mapped-name>
<resource-ref>
<res-ref-name>ds/Chat_DS
</res-ref-name>
<res-type>javax.sql.DataSource
</res-type>
<res-auth>Container
</res-auth>
</resource-ref>
</session>
</enterprise-beans></ejb-jar>
<?xml
version
=
"1.0"
?>
<ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>Java_EJB_07_Tutorial
</ejb-name>
<resource-ref>
<res-ref-name>ds/Chat_DS
</res-ref-name>
<jndi-name>java:/MySqlDS_JS_Tutorial
</jndi-name>
</resource-ref>
</ejb>
</enterprise-beans></ejb-jar>
<?xml
version
=
"1.0"
?>
<sun-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>Java_EJB_07_Tutorial
</ejb-name>
<resource-ref>
<res-ref-name>ds/Chat_DS
</res-ref-name>
<jndi-name>MySqlDS_JS_Tutorial
</jndi-name>
</resource-ref>
</ejb>
</enterprise-beans></sun-ejb-jar>
Dokument |
Inhalt |
Tutorial: Client-Programm für Session Bean mit Datenbank-Zugriff, EJB-Standard (Java_EJB_08) |
Im nächsten Tutorial wird ein Client-Programm für das Session Bean mit Datenbank-Zugriff entwickelt. |
In
diesem Schritt wird das in JBoss integrierte
Hypersonic-Datenbanksystem verwendet. |