Jboss-Einrichtung auf Linux-Server

Dieser Artikel beschreibt, wie jboss auf einem Linux-Server (ManagedServer) von domainFactory eingerichtet werden kann. Annahme: der Application Server wird über das Webfrontend im Admin-Bereich der Webverwaltung installiert und muss anschließend konfiguriert werden. Das Zielsystem beinhaltet einen Java-Webservice, welcher mit einer MySQL-Datenbank kommuniziert.

Vorbedingungen:

  • jboss 6.0.0 wurde installiert und gestartet
  • SSH-Zugriff ist möglich
  • Java ist bereits installiert

jboss Application Server und MySQL-Connection einrichten

Nachdem jboss installiert wurde, kann eingetragen werden, dass er automatisch gestartet werden soll. Dies kann im Webfrontend unter Serverkonfiguration->systemSTARTUP erfolgen. Über diesen Menüeintrag kann der Server auch komfortabel gestartet und gestoppt werden.

Die Integration von MySQL erfolgt mittels einer XML-Datei, die im Ordner deploy (JBOSS-HOME/server/default/deploy/) angelegt wird. Der Inhalt kann dabei wie folgt aussehen (andere Einstellungen sind natürlich denkbar):

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>mydatasourcename</jndi-name>
    <connection-url>jdbc:mysql://mysql5.servername:3306/database</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>db-username</user-name>
    <password>db-password</password>
    <min-pool-size>0</min-pool-size>
    <max-pool-size>5</max-pool-size>
    <idle-timeout-minutes>5</idle-timeout-minutes>
    <exception-sorter-class-name>com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter</exception-sorter-class-name>
    <valid-connection-checker-class-name>com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker</valid-connection-checker-class-name>
  </local-tx-datasource>
</datasources>

Die MySQL-Jar-Datei (zum Beispiel mysql-connector-java-5.1.26-bin.jar) muss in den Lib-Ordner gelegt werden. Zunächst platzierte ich die Datei in JBOSS-HOME/server/all/lib/, doch wie sich herausstellte, verursachte dies einen Fehler – dazu gleich mehr.

Die korrekte Einrichtung kann beispielsweise mit der Adminkonsole überprüft werden. Dazu zunächst den Server stoppen und danach wieder starten. In der Adminkonsole unter Resources->Datasources sollte nun die soeben erstellte Datasource zu finden sein. Angenommen jboss läuft auf Port 8080, kann die Adminkonsole mittels lynx mit folgendem Aufruf gestartet werden:
lynx http://localhost:8080
Nach Auswahl von Administration Console (siehe Screenshot), gelangt der Benutzer zur Maske zum Eingeben der Login-Daten. Das Passwort wurde bei der Installation von jboss hinterlegt.

Jboss-Admin-Konsole
Adminkonsole von jboss

Eine War-Datei kann deployed werden, in dem sie in den Ordner JBOSS-HOME/server/default/deploy/ gelegt wird. Beim Deployen der War-Datei bin ich auf ein Problem gestoßen. Obwohl der verwendete MySQL-Treiber zur Datenbank passen sollte, gab es folgende Fehlermeldung:

Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: com.mysql.jdbc.Driver, url: jdbc:mysql://mysql5.servername.de:3306/databasename)

Interessanterweise wurden die Tabellen dennoch richtig angelegt. Um die Fehlermeldung los zu werden, musste die MySQL-Lib in den Ordner JBOSS-HOME/server/default/lib/ verschoben werden.

In der Persistence-Datei muss die MySQL-Verbindung angegeben werden, was in nachfolgendem Code-Ausschnitt zu sehen ist.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
          http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="persistenceunitname">	
    <jta-data-source>java:/mydatasourcename</jta-data-source> 
    <properties>
    	<property name="hibernate.show_sql" value="true" />
    	<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
    	<property name="hibernate.hbm2ddl.auto" value="create-drop" />
    	<property name="hibernate.connection.useUnicode" value="true" />
		<property name="hibernate.connection.characterEncoding" value="UTF-8" />
    </properties>
  </persistence-unit>
</persistence>