サラリーマン技術者の調査レポート

日々の業務で気付いた当たり障りのない技術的なあれこれを綴ります。

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.jarwildflyにモジュールとして登録します。

# 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つのコマンドを同時に実行しないと失敗します。 batchrun-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]
}