JBoss AS 7 – MySQL Datasource konfigurieren

Mit dem JBoss Application Server 7 hat sich grundlegendes zu seinen Vorgängern geändert und das gilt auch für das Einrichten einer Datenbankverbindung (Datasource). Im folgenden die Schritte die zu tun sind um eine Datasource zu einer MySQL Datenbank für einen JBoss 7 Server im Standalone Modus einzurichten. Den aktuellsten JDBC Treiber für die MySQL Datenbank kannst du mysql.com herunterladen.

Im JBoss-Home Verzeichnis /standalone/configuration die standalone.xml Datei zum Bearbeiten öffnen. Darin befindet sich der Abschnitt zum Datasources Subsystem:

<subsystem xmlns="urn:jboss:domain:datasources:1.0">
  ...
</subsystem>

In diesem Subsystem wird zwischen der Beschreibung der Datenbankverbindung (datasource) und dem Treiber (driver) unterschieden. Für die MySQL Datenbank wird neben der bereits per Default konfigurierten Datasource ExampleDS die MySqlDS hinzugefügt. Dazu wird der JNDI-Name, der Pool-Name sowie die Verbindungsdaten konfiguriert.
Der Text im Element <driver>com.mysql</driver> ist dabei ein Verweis auf den konfigurierten MySQL Treiber. Der Treiber wird direkt neben den datasource Elementen im eigenen Element driver beschrieben. Die einfachste und schnellste Art den Treiber zu installieren ist den Dateinamen des Treibers direkt anzugeben. In meinem Fall ist es der aktuellste Treiber mysql-connector-java-5.1.17.jar.

Der folgende Ausschnitt aus dem datasources Element zeigt die Konfiguration für die MySQL Datenbank:

<datasources>

  ...

  <datasource jndi-name="java:jboss/datasources/11TipperSqlDS" pool-name="11TipperSqlDS" 
    enabled="true" jta="true" use-java-context="true" use-ccm="true">
    <connection-url>
      jdbc:mysql://localhost:3306/11tipper
    </connection-url>
    <driver>
      mysql-connector-java-5.1.17.jar
    </driver>
    <pool>
      <min-pool-size>
        10
      </min-pool-size>
      <max-pool-size>
        100
      </max-pool-size>
      <prefill>
        true
      </prefill>
      <use-strict-min>
        false
      </use-strict-min>
      <flush-strategy>
        FailingConnectionOnly
      </flush-strategy>
    </pool>
    <security>
      <user-name>
        db-username
      </user-name>
      <password>
        db-password
      </password>
    </security>
  </datasource>

  <driver name="mysql-connector-java-5.1.17.jar" module="com.mysql">
    <xa-datasource-class>
      com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
    </xa-datasource-class>
  </driver>
</datasources>

Der XML-Code kann übrigens einfach unformatiert in die standalone.xml eingefügt werden. Der JBoss formatiert diese Datei nach einem Start selbst noch einmal neu.

Würde der JBoss AS nun im Standalone Modus gestartet werden erscheint folgende Fehlermeldung in der Console:

21:45:30,363 INFO [org.jboss.as.controller] (Controller Boot Thread) Service status report
New missing/unsatisfied dependencies:
service jboss.jdbc-driver.mysql-connector-java-5_1_17_jar (missing)

Die einfachste Art den fehldenden Treiber zu installieren ist diesen direkt in dem deployments Ordner zu kopieren und ihn zu “deployen”. Der JBoss AS versteht jeden normalen JDBC Treiber und kann ihn als Deployment laden:

Startet man jetzt den JBoss erneut erscheint folgende Meldung in der Console:

21:53:48,711 INFO [org.jboss.as.controller] (Controller Boot Thread) Service status report
New missing/unsatisfied dependencies:
service jboss.jdbc-driver.mysql-connector-java-5_1_17_jar (missing)

21:53:48,718 INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) Starting deployment of “mysql-connector-java-5.1.17.jar”
21:53:48,803 INFO [org.jboss.as.jpa] (MSC service thread 1-2) added javax.persistence.api dependency to mysql-connector-java-5.1.17.jar
21:53:48,823 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) Deploying non-JDBC-compliant driver class com.mysql.jdbc.Driver (version 5.1)
21:53:48,831 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-4) Bound data source [java:jboss/datasources/11TipperSqlDS]
21:53:48,832 INFO [org.jboss.as] (MSC service thread 1-4) JBoss AS 7.0.1.Final “Zap” started in 14103ms – Started 181 of 240 services (59 services are passive or on-demand)
21:53:48,909 INFO [org.jboss.as.server.controller] (DeploymentScanner-threads – 2) Deployed “mysql-connector-java-5.1.17.jar”
21:53:48,910 INFO [org.jboss.as.controller] (DeploymentScanner-threads – 2) Service status report
Newly corrected services:
service jboss.jdbc-driver.mysql-connector-java-5_1_17_jar (now available)

Die Datasource wurde erfolgreich konfiguriert und ist nun unter dem JNDI Namen java:jboss/datasources/11TipperSqlDS verfügbar.

Datenbanktreiber als Modul

Es gibt noch eine zweite Variante wie man den Treiber installieren kann: und zwar als Modul. In dem driver Element, aus dem obigen datasources Listing wurde als Modulname com.mysql angegeben. Das bedeutet, dass im Verzeichnis modules die Unterordner com/mysql erwartet wird. In diesem Modulverzeichnis wird das Unterverzeichnis main erwartet in dem die Modulbeschreibung sowie die Resource, in unserem Fall der Treiber, liegt. Bei mir sieht das dann wie folgt aus:

Die Datei mysql-connector-java-5.1.17.jar.index wird dabei automatisch vom JBoss generiert.

Die Datei module.xml beschreibt das Modul und die dazugehörige Resource/Jar/Treiber und sieht so aus:

<?xml version="1.0" encoding="UTF-8"?>

<module xmlns="urn:jboss:module:1.0" name="com.mysql">
  <resources>
    <resource-root path="mysql-connector-java-5.1.17.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
  </dependencies>
</module>

Startet man mit dieser Konfiguration (den Treiber als Modul) den JBoss erneut so findet man im Log keine Info mehr, dass eine Abhängigkeit fehlt, sondern findet das installierte Modul wesentlich früher in der Console wieder. Und zwar wenn das Subsystem datasources gestartet wird:

21:59:42,347 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) Bound data source [java:jboss/datasources/ExampleDS]
21:59:42,412 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-1) Bound data source [java:jboss/datasources/11TipperSqlDS]

Verwendet man ein Modul als Treiberkonfiguration kann man in der standalone.xml in der datasource und driver Beschreibung auch irgendein Name wie z.B. “MeinMySqldDB” verwenden. Es muss dann nicht zwingend der Name des Treibe-Jars sein. Somit wäre man im Namen unabhängig von der eigentlich verwendeten Version.

Administration Console

Egal ob man den Datenbanktreiber als Deployment oder als Modul installiert in beiden Fällen muss mann die konfigurierte Datasource in der Administrationskonsole wiederfinden. Auf die gelangt man in der Default Installation mit http://localhost:8080/console. Es müsste dann in etwa so aussehen:

In der persistence.xml kann nun mit dem JNDI Name auf die Datasource zugegriffen werden.

Tags: , ,

Wenn du Fragen oder Anregungen zum Post hast, dann hinterlasse doch einen Kommentar oder wenn du weiterhin Artikel von Javathreads lesen möchtest, dann abonniere den RSS Feed und sehe direkt in deinem Feed Reader die nächsten Artikel.

Ähnliche Artikel, die dich interessieren könnten:
Kommentare

Danke, sehr hilfreich!

Kleiner Tippfehler von dir. In C:\[jboss folder]\modules\com\mysql\main muss es eine Datei module.xml geben, nicht modules.xml – sonst gibts Probleme.

Aber wirklich sehr hilfreich! Danke und LG ;)

Vielen Dank! War ein Typo und ich habe es berichtigt.

Danke, super beschreibung

Hinterlasse einen Kommentar