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