Serwer aplikacyjny WildFly ma możliwość korzystania z dowolnego systemu zarządzania systemem bazy danych, który posiada sterowniki JDBC. Jednak jedyny domyślnie skonfigurowany sterownik służy tylko do połączenia z bazą H2. Pomimo, że baza jest świetna na potrzeby testów, w środowisku produkcyjnym przydaje się możliwość korzystania z bardziej zaawansowanych źródeł danych. Dla przykładu opiszę sposób na skonfigurowanie źródła danych opartego na bazie MySQL.

Pobieramy sterownik JDBC dla MySQL: https://dev.mysql.com/downloads/connector/j/

Tworzymy ścieżkę “mysql/main” wewnątrz “WILDFLY_PATH/modules/system/layers/base/com”.

Kopiujemy sterownik JDBC (plik mysql-connector-java-5.1.41-bin.jar) do katalogu “WILDFLY_PATH/modules/system/layers/base/com” i tworzymy plik module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.mysql">
	<resources>
		<resource-root path="mysql-connector-java-5.1.41-bin.jar"/>
	</resources>
	<dependencies>
		<module name="javax.api"/>
		<module name="javax.transaction.api"/>
	</dependencies>
</module>

Edytujemy plik “WILDFLY_PATH/standalone/configuration/standalone.xml”:

  • wewnątrz znaczników datasources/drivers dodajemy:
<driver name="mysql" module="com.mysql">
	<xa-datasource-class>com.mysql.jdbc.Driver</xa-datasource-class>
</driver>
  • wewnątrz znacznika datasources dodajemy:
<datasource jndi-name="java:/TestDS" pool-name="TestDS" enabled="true" use-java-context="true">
	<connection-url>jdbc:mysql://localhost:3306/test?useUnicode=yes&amp;characterEncoding=UTF-8</connection-url>
	<driver>mysql</driver>
	<security>
		<user-name>root</user-name>
		<password>root</password>
	</security>
</datasource>

Po odpaleniu serwera WildFly, przechodzimy do konsoli: http://localhost:9990/console/App.html#home

Przechodzimy do Configuration/Subsystems/Datasources/Non-XA, gdzie powinna być widoczna nowa pozycja “TestDS”. Po jej wybraniu, rozwijamy menu z opcjami do wyboru i korzystamy z “Test Connection”, co powinno zakończyć się komunikatem “Successfully created JDBC connection.”

Zastanawiać może różnica pomiędzy źródłem danych Non-XA, a XA. Najprościej mówiąc, różnica polega w zasięgu: transakcje dla NonXA obejmują tylko konkretną bazę danych, która została skonfigurowana, a w przypadku XA możliwe jest zachowanie transakcyjności na przecięciu kilku źródeł danych. W przypadku korzystania w z wielu źródeł danych, zwłaszcza w ramach pojedynczej transakcji, zdecydowanie lepszą opcją jest skonfigurowanie bazy danych jako źródła XA. Różnica w konfiguracji polega na zmianie w składni dodawanego znacznika datasource:

<xa-datasource jndi-name="java:/TestXADS" pool-name="TestXADS" enabled="true" use-java-context="true">
     <xa-datasource-property name="URL">jdbc:mysql://localhost:3306/test?useUnicode=yes&amp;characterEncoding=UTF-8</xa-datasource-property>
     <driver>mysql</driver>
     <security>
          <user-name>root</user-name>
          <password>root</password>
     </security>
</xa-datasource>

oraz wskazanie poprawnego sterownika (obsługującego XA):

<driver name="mysql" module="com.mysql">
     <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>

Po dodaniu warto przetestować połączenie, tym razem wybierając Configuration/Subsystems/Datasources/XA i pozycję TextXADS. Tak dodana baza danych jest gotowa do użycia w aplikacji uruchomionej na serwerze WildFly (zarówno Non-XA, jak i XA).

Pliki: