Wildflyからnon-XA datasourceとしてMySQLを利用する場合にはConnector/JをデプロイしてからGUI画面でポチポチするだけで利用可能だが、XA datasourceとして利用する場合には少し面倒。
JBoss-cliを立ち上げてモジュール登録/データソース登録をコマンドで行うのも少々面倒なので、インストール時にデフォルトで登録されているh2データベースを参考に一気に登録する方法を以下にまとめておく。
モジュール登録
{wildfly_home}/modules/system/layers/base/com/ 配下にh2databaseが存在するので、それと同様にmysqlのドライバを配備する。
- ディレクトリ {wildfly_home}/modules/system/layers/base/com/mysql/main/ を作成する
- Connector/Jのjarを作成したディレクトリに置く
- module.xmlファイルを作成したディレクトリ配下に作成する(xmlnsの値などはh2を参考に)
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.5" name="com.mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.45-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
ドライバの登録
{wildfly_home}/standalone/configuration/standalone.xmlの<datasources><drivers>~</drivers></datasources>セクションに以下を追記する
<driver name="mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
データソースの登録
{wildfly_home}/standalone/configuration/standalone.xmlの<datasources>~</datasources>セクションに以下を追記する。
ここではlocalhost上のmysqlにsslを使わずに接続することとし、DBのスキーマ名はoperator、JPAエンティティで用いているjndi名ならびにpool名はjava:/Operator,Operatorとした例を挙げる。
<xa-datasource jndi-name="java:/Operator" pool-name="Operator" enabled="true">
<xa-datasource-property name="URL">
jdbc:mysql://localhost:3306/operator?useSSL=false
</xa-datasource-property>
<driver>mysql</driver>
<transaction-isolation>TRANSACTION_REPEATABLE_READ</transaction-isolation>
<xa-pool>
<min-pool-size>2</min-pool-size>
<initial-pool-size>2</initial-pool-size>
<max-pool-size>4</max-pool-size>
<prefill>true</prefill>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</xa-pool>
<security>
<user-name>データベース接続ユーザ名</user-name>
<password>データベース接続パスワード</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<background-validation-millis>60000</background-validation-millis>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</xa-datasource>
以上設定の上でWildflyを起動し、GUIまたはログでXA-datasourceとして登録されたことを確認する。
なおデフォルトで設定されているExampleDSだが、ただ単に消しただけでは"DefaultDatasourceが無い"といったエラーを吐いて停止してしまうので、別途対策を行わない場合にはstandalone.xmlに残したままにしておくこと。
あとはnon-XAの場合と同様に、GUI上でプチプチ設定してやればstandalone.xmlに反映される。