Erfahrungsbericht: JBoss und MySQL

Transcrição

Erfahrungsbericht: JBoss und MySQL
Freie Universität Berlin
Autor: Alexander Steidinger
Datum: 29.4.2001
Erfahrungsbericht:
JBoss und MySQL
Projekt: verteilte Informationssysteme
Erfahrungsbericht:
Zusammenspiel von JBoss und MySQL anhand des auf der Homepage von JBoss
befindlichen EntityBean Beispiels der CD-Sammlung.
Alles unter GNU/Linux !
Die Verzeichnisse beziehen sich z.T. auf meine eigene Installation.
Angaben fuer MySQL:
(1) MySQL ist installiert.
(2) Eine Datenbank namens "hermes" ist angelegt:
create database hermes
(3) Ein Benutzer namens "steiding" mit Passwort "sqlmy" ist angelegt:
grant usage on *.* to steidin@localhost identified by 'sqlmy';
grant usage on *.* to steidin@< rechnername> identified by 'sqlmy';
grant all on hermes.* to steiding@localhost identified by 'sqlmy';
grant all on hermes.* to steiding@<rechnername> identified by 'sqlmy';
(4) Ein JDBC-Treiber ist vorhanden
MM.MySQL-Treiber von Mark Matthews (http://mmmysql.sourceforge.net)
Als Datei: mm.mysql-2.0.4-bin.jar
(5) Das DBMS laeuft !!!
bin/safe_mysqld --user=mysql & (wozu auch immer --user da ist ...)
Angaben fuer JBoss:
$JBOSS_HOME zeige auf das Top-Verzeichnis von JBoss
(1) JBoss 2.2 ist installiert (einfach auspacken).
(2) Der JCBD-Treiber wird nach $JBOSS_HOME/lib/ext kopiert:
cp mm.mysql-2.0.4-bin.jar $JBOSS_HOME/lib/ ext
(3) Das von der Homepage von JBoss erhaeltliche Beispiel der CD-Sammlung
wird "deployed":
cp cd.jar $JBOSS_HOME/deploy
Darin befinden sich (jar tf cd.jar):
META-INF/MANIFEST.MF
com/web_tomorrow/cd/CD.class
com/web_tomorrow/cd/CDBean.class
com/web_tomorrow/cd/CDCollection.class
com/web_tomorrow/cd/CDCollectionBean.class
com/web_tomorrow/cd/CDCollectionHome.class
com/web_tomorrow/cd/CDExistsException.class
com/web_tomorrow/cd/CDHome.class
com/web_tomorrow/cd/List.class
com/web_tomorrow/cd/Lookup.class
com/web_tomorrow/cd/Remove.class
com/web_tomorrow/cd/Upload.class
META-INF/ejb-jar.xml
META-INF/jboss.xml
Normalerweise muesste man List, Lookup, Remove und Upload aus dem
Jar-File entfernen, da diese Klassen die Klienten sind!
ejb-jar.xml ist der obligatorische EJB-Deployment-Descriptor
jboss.xml legt fuer JNDI (Java Naming and Directory Interface) in
diesem Beispiel andere Namen fest (nicht obligatorisch, wenn keine
2
Namensaenderung erfolgen soll).
Wenn cd.jar deployed/kopiert wird, waehrend JBoss laeuft,
wird dies registriert (Hot Deployment).
(4) In der Datei jboss.jcml muessen der JDBC-Treiber und ein sog.
Connection-Pool festgelegt werden.
Dazu wird das Treiber-Attribut erweitert um "org.gjt.mm.mysql.Driver":
<!-- JDBC -->
<mbean
name="DefaultDomain:service=JdbcProvider">
code="org.jboss.jdbc.JdbcProvider"
<attribute
name="Drivers">org.gjt.mm.mysql.Driver,org.hsql.jdbcDriver,org.enhydra.instantdb.jdbc.idbDriv
er</attribute>
</mbean>
Der Connection-Pool fuer MySQL wird angepasst:
<mbean code="org.jboss.jdbc.XADataSourceLoader"
name="DefaultDomain:service=XADataSource,name=hermes">
<attribute name="PoolName">mySQLDS</attribute>
<attribute name="DataSourceClass">
org.opentools.minerva.jdbc.xa.wrapper.XADataSourceImpl</attribute>
<attribute name="URL">jdbc:mysql:/data/hermes</attribute>
<attribute name="JDBCUser">steiding</attribute>
<attribute name="Password">sqlmy</attribute>
</mbean>
(5) In der Datei standardjaws.xml wird die Datenquelle ausgewaehlt:
3
<datasource> java:/mySQLDS</datasource>
<type-mapping> mySQL</type-mapping>
<debug>false</debug>
(6) JBoss wird gestartet mit run.sh (Merke: Das DBMS muss laufen!)
Eventuell vorher ein chmod a+x run.sh machen =)
Es sollte keine Fehlermeldungen geben, sondern folgende:
.......................................
[JDBC provider] Initializing
[JDBC provider] Loaded JDBC-driver:org.gjt.mm.mysql.Driver
[JDBC provider] Loaded JDBC-driver:org.hsql.jdbcDriver
[JDBC provider] Loaded JDBC-driver:org.enhydra.instantdb.jdbc.idbDriver
[JDBC provider] Initialized
[Hypersonic] Initializing
[Hypersonic] Initialized
[DefaultDS] Initializing
[DefaultDS] Initialized
[mySQLDS] Initializing
[mySQLDS] Initialized
.......................................
[JDBC provider] Starting
[JDBC provider] Started
[Hypersonic] Starting
[Hypersonic] Server 1.4 is running
[Hypersonic] Database started
[Hypersonic] Started
[DefaultDS] Starting
[Hypersonic] Press [Ctrl]+[C] to abort
[DefaultDS] XA Connection pool DefaultDS bound to java:/DefaultDS
4
[DefaultDS] Started
[mySQLDS] Starting
[mySQLDS] XA Connection pool mySQLDS bound to java:/mySQLDS
[mySQLDS] Started
.......................................
[J2EE Deployer Default] Deploy J2EE application: file:/usr/local/jboss-2.2/deploy/cd.jar
[J2EE Deployer Default] Create application cd.jar
[J2EE Deployer Default] install module cd.jar
[Container factory] Deploying:file:/usr/local/jboss-2.2/tmp/deploy/Default/cd.jar
[Verifier] Verifying file:/usr/local/jboss-2.2/tmp/deploy/Default/cd.jar/ejb1001.jar
[Container factory] Deploying CDBean
[Container factory] Deploying CDCollectionBean
[JAWS] Created table 'CDBean' successfully.
[Bean Cache] Cache policy scheduler started
[Container factory] Deployed application: file:/usr/local/jboss-2.2/tmp/deploy/Default/cd.jar
[J2EE Deployer Default] J2EE application: file:/usr/local/jboss-2.2/deploy/cd.jar is deployed.
.......................................
Es sollte nun eine leere Tabelle im DBMS existieren:
mysql> use hermes;
mysql> show tables;
+------------------+
| Tables_in_hermes |
+------------------+
| CDBean
|
+------------------+
1 row in set (0.00 sec)
(7) Nun kann der Klient ausprobiert werden, vorausgesetzt, man hat es
5
geschafft, die Klient-Klassen zu kompilieren (Fingeruebung) oder
man hat das cd.jar ausgepackt:
a) Daten in die Datenbank schreiben
java -classpath $CLASSPATH:$JBOSS_HOME/client/ejb.jar: \
$JBOSS_HOME/client/jboss-client.jar: \
$JBOSS_HOME/client/jbosssx-client.jar:.: \
/home/ steiding/cdejb/cd.jar
com.web_tomorrow.cd.Upload cds.txt
Es werden die eingetragenen Daten von JBoss aufgefuehrt.
Es wird eine Fehlermeldung erzeugt, da zwei Daten die gleiche ID haben
(Absicht ???)
b) Daten aus der Datenbank auslesen
java -classpath $CLASSPATH:$JBOSS_HOME/client/ejb.jar: \
$JBOSS_HOME/client/jboss-client.jar: \
$JBOSS_HOME/client/jbosssx-client.jar:.: \
/home/ steiding/cdejb/cd.jar
com.web_tomorrow.cd.List
c) Bestimmte Daten abfragen
java -classpath $CLASSPATH:$JBOSS_HOME/client/ejb.jar: \
$JBOSS_HOME/client/jboss-client.jar: \
$JBOSS_HOME/client/jbosssx-client.jar:.: \
/home/ steiding/cdejb/cd.jar
com.web_tomorrow.cd.Lookup "Misere"
2
Live in Rome/Palestriana &c
Tallis Scholars classical, choral
4
Miserere, Stabat Mater/ Allegri, Palestrina
King''s College
Choir classical, choral
6
Der Rest der Zeilen ist irgendwie abgeschnitten, aber auch in 2
taucht das gesuchte Wort auf!
d) Alle Daten aus der Datenbank loeschen
java -classpath $CLASSPATH:$JBOSS_HOME/client/ejb.jar: \
$JBOSS_HOME/client/jboss-client.jar: \
$JBOSS_HOME/client/jbosssx-client.jar:.: \
/home/ steiding/cdejb/cd.jar
com.web_tomorrow.cd.Remove
Die Datenbank sollte leer sein, was man sehen kann mit:
mysql> select * from CDBean;
(8) JBoss wird einfach mit CONTROL-C beendet.
(9) Ich hoffe, ich habe nichts vergessen. Wen es interessiert und wer
das machen muss: AUSPROBIEREN und bescheid sagen, wenn ich was
vergessen habe oder falsch angegeben habe.
7

Documentos relacionados