Wildfly: JDBC-Treiber und Datasource einrichten
Ich hatte hier beschrieben, wie man eine Datasource inklusive neuem JDBC-Treiber per CLI im JBoss einrichten kann. Heute wollte ich mit einer Wildfly 8.2 Installation diese Schritte durchführen, leider funktionierte es nicht, es gibt einen Bug, der das verhindert. Eine Variante, die funktioniert, ist über die Web Management Console. Eine Anleitung habe ich hier gefunden. Nachfolgend habe ich das nochmal bei nachgestellt und Screenshots davon erstellt.
JDBC-Treiber installieren
Zuerst muss ein passender JDBC-Treiber installiert werden, falls noch nicht vorhanden. Dazu öffnet man die Managementconsole, in der Regel ist sie unter Port 9990 zu finden, bei mir lokal unter http://localhost:9990/. Falls noch kein Managementuser vorhanden ist, muss man noch einen anlegen und sich dann mit diesem anmelden. Der Applikationsserver muss natürlich laufen. Dann öffnet man den Reiter Deployments.
Ein Klick auf den Button Add öffnet den Wizard zum hinzufügen eines neuen Deployments. Hier wählt man die JAR-Datei des entsprechenden JDBC-Treibers aus und bestätigt mit Next.
Im folgenden Fenster kann man den Namen und den Runtime-Namen noch anpassen. Zusätzlich kann man durch Auswählen von Enable den Treiber gleich aktivieren. Die Eingaben bestätigt man durch Save.
Der installierte JDBC-Treiber sollte jetzt angezeigt werden.
Nun wechselt man auf den Reiter Configuration. Hier wählt man bei den Subsystems -> Connector -> Datasources aus. Falls man die Konfiguration noch nicht angepasst hat, sollte die Beispieldatasource ExampleDS noch aufgeführt werden. Um jetzt eine eigene hinzuzufügen wählt man Add aus.
Name und JNDI Adresse der neuen Datasource werden jetzt abgefragt. Der JNDI-Name hat der Adresse zu entsprechen, die man später in der persistence.xml unter dem Element jta-data-source einträgt. Die Eingaben sind mit Next zu bestätigen.
Hier wählt man den passenden JDBC-Treiber aus und bestätigt die Eingabe wieder mit Next.
In diesem Fenster werden die Verbindungdaten zur Datenbank eingetragen. Mit Test Connection können die Eingaben überprüft werden. Das Anlegen der Datasource ist mit Done abzuschliessen.
Da die Datasource noch nicht aktiviert ist, wählt man sie aus und klickt auf Enable.
Das Fenster mit Confirm schliessen.
Nun steht die Datasource mit dem passenden Treiber im Wildfly zur Verfügung.
Die passenden persistence.xml, die im META-INF des WARs liegen muss, sieht bei mir so aus:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.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_2_0.xsd"> <persistence-unit name="primary"> <jta-data-source>java:jboss/datasources/dblocator</jta-data-source> <properties> <!-- Properties for Hibernate --> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.show_sql" value="false" /> </properties> </persistence-unit> </persistence>
Update 25.01.2015
Neuer Rechner, neues Glück. Wildfly 8.2 auf einem Ubuntu-Rechner hat jetzt noch ein anderes Verhalten an den Tag gelegt. Das Deployen eines JDBC-Treibers war dort über den oben beschriebenen Weg nicht persistent möglich. Nach jedem Neustart des Wildfly war der JDBC-Treiber weg und musste neu deployt werden.
Von JBoss gibt es hier eine gute Anleitung, wie man einen JDBC-Treiber permanent deployt. Anschliessend kann man eine Datasource einrichten, wie oben beschrieben über die webbasierte Managementconsole.
Für PostgreSQL habe ich unter wildfly/modules/org/postgres/main/modules.xml folgendes eingetragen:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="org.postgres"> <resources> <resource-root path="postgresql-jdbc4-9.2.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
Unter wildfly/modules/org/postgres/main/ liegt in diesem Fall der JDBC-Treiber für Postgres mit dem Dateinamen postgresql-jdbc4-9.2.jar.
Zum Aktivieren des JDBC-Treibers für Postgres habe ich folgende Zeile in der JBoss CLI genutzt:
/subsystem=datasources/jdbc-driver=postgres:add(driver-name=postgres,driver-module-name=org.postgres,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
Das JBoss CLI nutzt man, in dem man den Wildfly startet, im wildfly/bin Verzeichnis jboss-cli.sh startet und sich dann mit connect mit der Wildfly-Managementconsole verbindet.
Der erste Screenshot zur Anlage der Datasource sieht mir falsch aus. Hier soll als JNDI Name sicher „java:jboss/datasources/dblocator“ verwendet werden. Der JDBC-Connection-String ist na dieser Stelle nicht erlaubt.