MySQL
jboss
Wildfly

WildflyにMySQLをXA-datasourceとして登録する

Wildflyからnon-XA datasourceとしてMySQLを利用する場合にはConnector/JをデプロイしてからGUI画面でポチポチするだけで利用可能だが、XA datasourceとして利用する場合には少し面倒。
JBoss-cliを立ち上げてモジュール登録/データソース登録をコマンドで行うのも少々面倒なので、インストール時にデフォルトで登録されているh2データベースを参考に一気に登録する方法を以下にまとめておく。

モジュール登録

{wildfly_home}/modules/system/layers/base/com/ 配下にh2databaseが存在するので、それと同様にmysqlのドライバを配備する。
1. ディレクトリ {wildfly_home}/modules/system/layers/base/com/mysql/main/ を作成する
2. Connector/Jのjarを作成したディレクトリに置く
3. module.xmlファイルを作成したディレクトリ配下に作成する(xmlnsの値などはh2を参考に)

module.xml
<?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>セクションに以下を追記する

standalone.xml
<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とした例を挙げる。

standalone.xml
<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に反映される。