3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WildFly(JBoss) 15 + Oracle 12c (非XA) のデータソース作成

Posted at

Adam Bien氏がINSTALLING ORACLE JDBC-DRIVER ON WILDFLY / JBOSSという記事を公開しています。それをベースに、コメント欄のツッコミも考慮して、Oracle 12c PDBでは以下の手順でいけることを確認しました。

JBossへのCLIログイン

[WILDFLY_HOME]/bin/jboss-cli.shを実行し、WildFlyサーバにログインしておきます。

$ ./jboss-cli.sh
You are disconnected at the moment. Type 'connect' to connect to the server or 'help' for the list of supported commands.
[disconnected /] connect

ドライバモジュールの登録

元記事には [WILDFLY_HOME]/modules/system/layers/base/com/oracle/main/にモジュールを置いて、そこにmodule.xmlを書いて配置する旨の記述がありますが、コマンドを実行すれば、不要です。

ojdbc7.jarを使う場合の例
[standalone@localhost:9990 /] module add --name=com.oracle.ojdbc7 --resources=[配置パス]/ojdbc7.jar --dependencies=javax.api,javax.transaction.api

コマンドの実行が成功すると、[WILDFLY_HOME]/modules/com/oracle/ojdbc7/mainojdbc7.jarがコピーされ、module.xmlが以下の内容で作成されます。

module.xml
<module xmlns="urn:jboss:module:1.1" name="com.oracle.ojdbc7">

    <resources>
        <resource-root path="ojdbc7.jar"/>
    </resources>

    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

元記事ではname="com.oracle"で登録されていますが、複数のOracle JDBCドライバを使い分けることを考慮して、上記のようにojdbc7という名称を追加しています。

ドライバを登録

元記事には standalone.xmlに記述を追加する旨の記述がありますが、コマンドを実行すれば不要です。

ojdbc7を登録する場合の例
[standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=ojdbc7:add(driver-name=ojdbc7,driver-module-name=com.oracle.ojdbc7,driver-class-name=oracle.jdbc.driver.OracleDriver)

コマンドの実行が成功すると、[WILDFLY_HOME]/standalone/configuration/standalone-full.xmlに、以下の記述が追加されます。

standalone-full.xml
<driver name="ojdbc7" module="com.oracle.ojdbc7">
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>

データソースを登録

元記事には standalone.xmlに記述を追加する旨の記述がありますが、コマンドを実行すれば不要です。

以下は、サービス名がORCLPDB1.localdomainであるOracle 12c PDBのHRスキーマを、OracleDSという名前で登録しています。

[standalone@localhost:9990 /] /subsystem=datasources/data-source=OracleDS:add(jta="true",use-ccm="true",use-java-context="true",enabled="true",jndi-name=java:/jdbc/OracleDS,max-pool-size=5,min-pool-size=1,pool-prefill="true",driver-name=ojdbc7,connection-url=jdbc:oracle:thin:@//localhost:1521/ORCLPDB1.localdomain,user-name="hr",password="[PASS]")

コマンドの実行が成功すると、[WILDFLY_HOME]/standalone/configuration/standalone-full.xmlに、以下の記述が追加されます。

standalone-full.xml
<datasource jta="true" jndi-name="java:/jdbc/OracleDS" pool-name="OracleDS" enabled="true" use-java-context="true" use-ccm="true">
    <connection-url>jdbc:oracle:thin:@//localhost:1521/ORCLPDB1.localdomain</connection-url>
    <driver>ojdbc7</driver>
    <pool>
        <min-pool-size>1</min-pool-size>
        <max-pool-size>5</max-pool-size>
        <prefill>true</prefill>
    </pool>
    <security>
        <user-name>hr</user-name>
        <password>[PASS]</password>
    </security>
</datasource>

接続テスト

以下のコマンドを実行します。

OracleDSデータソースをテストする場合
[standalone@localhost:9990 /] /subsystem=datasources/data-source=OracleDS:test-connection-in-pool

このように返ってきたら、成功です。

{
    "outcome" => "success",
    "result" => [true]
}

参考: Red Hat JBoss Enterprise Application Platform 7.0 設定ガイド 13.6. データソース接続のテスト

うまくいかないときは

{
    "outcome" => "failed",
    "failure-description" => "WFLYJCA0040: failed to invoke operation: WFLYJCA0047: Connection is not valid",
    "rolled-back" => true
}

[WILDFLY_HOME]/standalone/log/server.logで、WFLYJCA0040: failed to invoke operation: WFLYJCA0047: Connection is not validのメッセージの直前に表示されているスタックトレースの最後のほうを確認します。

ケース1

Caused by: oracle.net.ns.NetException: Invalid number format for port number

jdbc:oracle:thin:@//localhost:1521:ORCLPDB1.localdomainのように、サービス名の前を/ではなく:にしてしまっています。

ケース2

Caused by: java.sql.SQLException: 無効なOracle URLが指定されました。

jdbc:oracle:thin@//localhost:1521/ORCLPDB1.localdomainのように、@の前に:を追加していません。

ケース3

Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

リスナーには到達したようですが、リスナーが認識していないサービス名を指定しています。

ケース4

Caused by: oracle.net.ns.NetException: Unknown host specified 

Caused by: java.net.SocketTimeoutException: connect timed out

Caused by: java.net.ConnectException: Connection refused (Connection refused)

リスナーに到達する以前の問題です。ホスト名やポート番号に誤りがあります。

消してやり直す

間違いに気づいたら、データソースを一旦削除して、やり直します。削除した後は、リロードが必要です。

OracleDSデータソースの削除とリロード
[standalone@localhost:9990 /] /subsystem=datasources/data-source=OracleDS:remove
[standalone@localhost:9990 /] reload
3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?