Dodanie źródła danych MySQL na serwerze aplikacyjnym WildFly
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&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&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: