WildFly8.1にCLIでOracleXADataSourceを設定する
WildFly8でOracleXADataSourceを設定するのにいろいろとハマったので記録しておきます。
前提事項
- 検証したのはWindows7 64bit + Oracle Database 11g R2
- Oracleデータベースが使える状態になっている
- WildFlyが起動している
- jboss-cliが起動できる
jboss-cliで日本語が通らない(設定の仕方がわからない)のでコメントはアルファベットになってます。
準備
まずは$JBOSS_HOME/bin/jboss-cli.batを起動して
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands. [disconnected /] connect
続いて、以降で使用する各種変数を定義します。
# set ORACLE_HOME set oracle_home=... (注:Windowsの場合フォルダの区切り文字は"\\"にする) # set data source name set datasource_name=... (jndi-nameはjava:jboss/datasources/$datasource_nameに決め打ち) # set database server host name set db_host=... # set oracle sid set oracle_sid=... # set database user set db_user=... # set database password set db_password=...
JDBCドライバのモジュールを登録
ojdbc6.jar
をwildflyにモジュールとして登録します。
# add jdbc driver module module add \ --name=oracle.jdbc \ --resources=$oracle_home/jdbc/lib/ojdbc6.jar \ --dependencies=javax.api,javax.transaction.api
成功すると何も出力されません。
JDBCドライバを登録
登録したモジュールをJDBCドライバに登録します。
# add jdbc driver /subsystem=datasources/jdbc-driver=oracle-driver:add( \ driver-name=oracle-driver, \ driver-module-name=oracle.jdbc, \ driver-class-name=oracle.jdbc.OracleDriver, \ driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource \ )
成功すると
{"outcome" => "success"}
が出力されます。 念のためJDBCドライバが登録できていることを確認します。
# read jdbc driver resource /subsystem=datasources/jdbc-driver=oracle-driver:read-resource
と入力すると
{ "outcome" => "success", "result" => { "deployment-name" => undefined, "driver-class-name" => "oracle.jdbc.OracleDriver", "driver-datasource-class-name" => undefined, "driver-major-version" => undefined, "driver-minor-version" => undefined, "driver-module-name" => "oracle.jdbc", "driver-name" => "oracle-driver", "driver-xa-datasource-class-name" => "oracle.jdbc.xa.client.OracleXADataSource", "jdbc-compliant" => undefined, "module-slot" => undefined, "xa-datasource-class" => undefined } }
といった内容が出力されます。
XAデータソースの登録
XAデータソースの登録はトリッキーで、2つのコマンドを同時に実行しないと失敗します。
batch
とrun-batch
を使うとうまくいきます。
# add xa-datasource batch xa-data-source add \ --name=$datasource_name \ --jndi-name=java:jboss/datasources/$datasource_name \ --driver-name=oracle-driver \ --user-name=$db_user \ --password=$db_password /subsystem=datasources/xa-data-source=$datasource_name/xa-datasource-properties=URL:add( \ value=jdbc:oracle:thin:@$db_host:1521/$oracle_sid \ ) run-batch
成功すると
The batch executed successfully
が出力されます。 念のためXAデータソースが登録されていることを確認します。
# read xa-datasource resource /subsystem=datasources/xa-data-source=$datasource_name:read-resource
と入力すると
{ "outcome" => "success", "result" => { "allocation-retry" => undefined, ... (中略) "xa-datasource-properties" => {"URL" => undefined} } }
が出力されます。
そして最後に動作確認
test-connection-in-pool
で接続の確認をします
# test xa-datasource connection /subsystem=datasources/xa-data-source=$datasource_name:test-connection-in-pool
以下が出力されたら成功です
{ "outcome" => "success", "result" => [true] }