CLIでデータソースを定義する
TweetPosted on Tuesday Jan 21, 2014 at 06:37AM in Technology
環境
- WildFly 8.0.0CR1
- PostgreSQL 9.2.4
- postgresql-9.3-1100.jdbc41.jar
何をするの?
CLIからPostgreSQLのデータソースを定義してみます
JDBCドライバをデプロイ
方法1
WildFlyを展開したディレクトリ内の/standalone/deploymentsディレクトリにJDBCドライバを放り込むだけです。
方法2
[3]の下の方にPostgreSQLの例が書いてある。こっちの方が正規の手順っぽい。8.0.0.Finalだけどやってみる
資源を置く
kyle-no-MacBook:wildfly-8.0.0.Final kyle$ mkdir -p modules/org/postgresql/main kyle-no-MacBook:wildfly-8.0.0.Final kyle$ cd modules/org/postgresql/main kyle-no-MacBook:main kyle$ cp ~/Downloads/postgresql-9.3-1100.jdbc41.jar . kyle-no-MacBook:main kyle$ cat > module.xml << EOF > <?xml version="1.0" encoding="UTF-8"?> > <module xmlns="urn:jboss:module:1.0" name="org.postgresql"> > <resources> > <resource-root path="postgresql-9.3-1100.jdbc41.jar"/> > </resources> > <dependencies> > <module name="javax.api"/> > <module name="javax.transaction.api"/> > </dependencies> > </module> > EOF
(貼付け用)
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="org.postgresql"> <resources> <resource-root path="postgresql-9.3-1100.jdbc41.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
jboss-cliを使って登録する
kyle-no-MacBook:main kyle$ ~/apps/wildfly-8.0.0.Final/bin/jboss-cli.sh --connect Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8 [standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=org.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) {"outcome" => "success"} [standalone@localhost:9990 /] ls subsystem=datasources data-source jdbc-driver xa-data-source installed-drivers=[{"driver-name" => "h2","deployment-name" => undefined,"driver-module-name" => "com.h2database.h2","module-slot" => "main","driver-datasource-class-name" => "","driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource","driver-class-name" => "org.h2.Driver","driver-major-version" => 1,"driver-minor-version" => 3,"jdbc-compliant" => true},{"driver-name" => "postgresql","deployment-name" => undefined,"driver-module-name" => "org.postgresql","module-slot" => "main","driver-datasource-class-name" => "","driver-xa-datasource-class-name" => "org.postgresql.xa.PGXADataSource","driver-class-name" => "org.postgresql.Driver","driver-major-version" => 9,"driver-minor-version" => 3,"jdbc-compliant" => false}] [standalone@localhost:9990 /]
データソースの定義
jboss-cliの起動と接続
$ ./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 [standalone@localhost:9990 /]
使用可能なJDBCドライバ一覧を表示
デプロイしたものが出てきていることを確認します
[standalone@localhost:9990 /] ls subsystem=datasources data-source jdbc-driver xa-data-source installed-drivers=[{"driver-name" => "h2","deployment-name" => undefined,"driver-module-name" => "com.h2database.h2","module-slot" => "main","driver-datasource-class-name" => "","driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource","driver-class-name" => "org.h2.Driver","driver-major-version" => 1,"driver-minor-version" => 3,"jdbc-compliant" => true},{"driver-name" => "postgresql-9.3-1100.jdbc41.jar","deployment-name" => "postgresql-9.3-1100.jdbc41.jar","driver-module-name" => undefined,"module-slot" => undefined,"driver-datasource-class-name" => undefined,"driver-xa-datasource-class-name" => undefined,"driver-class-name" => "org.postgresql.Driver","driver-major-version" => 9,"driver-minor-version" => 3,"jdbc-compliant" => false}] [standalone@localhost:9990 /]
データソースを追加
driver-nameはJDBCドライバのデプロイ方法によって変わってくる
- 方法1の場合、JDBCドライバのjarファイルの名前(postgresql-9.3-1100.jdbc41.jar)
- 方法2の場合、jboss-cliで指定した名前(postgresql)
data-source add \ --name=TestDS \ --driver-name=postgresql-9.3-1100.jdbc41.jar \ --connection-url=jdbc:postgresql://localhost:5432/testdb \ --jndi-name=java:jboss/jdbc/TestDS \ --user-name=postgres \ --password=***
接続のテスト
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:test-connection-in-pool { "outcome" => "success", "result" => [true] } [standalone@localhost:9990 /]
データソースの情報を見る
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:read-resource { "outcome" => "success", "result" => { "allocation-retry" => undefined, "allocation-retry-wait-millis" => undefined, "allow-multiple-users" => false, "background-validation" => undefined, "background-validation-millis" => undefined, "blocking-timeout-wait-millis" => undefined, "capacity-decrementer-class" => undefined, "capacity-decrementer-properties" => undefined, "capacity-incrementer-class" => undefined, "capacity-incrementer-properties" => undefined, "check-valid-connection-sql" => undefined, "connection-listener-class" => undefined, "connection-listener-property" => undefined, "connection-properties" => undefined, "connection-url" => "jdbc:postgresql://localhost:5432/testdb", "datasource-class" => undefined, "driver-class" => undefined, "driver-name" => "postgresql-9.3-1100.jdbc41.jar", "enabled" => true, "exception-sorter-class-name" => undefined, "exception-sorter-properties" => undefined, "flush-strategy" => undefined, "idle-timeout-minutes" => undefined, "initial-pool-size" => undefined, "jndi-name" => "java:jboss/jdbc/TestDS", "jta" => true, "max-pool-size" => undefined, "min-pool-size" => undefined, "new-connection-sql" => undefined, "password" => "***", "pool-prefill" => undefined, "pool-use-strict-min" => undefined, "prepared-statements-cache-size" => undefined, "query-timeout" => undefined, "reauth-plugin-class-name" => undefined, "reauth-plugin-properties" => undefined, "security-domain" => undefined, "set-tx-query-timeout" => false, "share-prepared-statements" => false, "spy" => false, "stale-connection-checker-class-name" => undefined, "stale-connection-checker-properties" => undefined, "track-statements" => "NOWARN", "transaction-isolation" => undefined, "url-delimiter" => undefined, "url-selector-strategy-class-name" => undefined, "use-ccm" => true, "use-fast-fail" => false, "use-java-context" => true, "use-try-lock" => undefined, "user-name" => "postgres", "valid-connection-checker-class-name" => undefined, "valid-connection-checker-properties" => undefined, "validate-on-match" => false, "statistics" => { "jdbc" => undefined, "pool" => undefined } } } [standalone@localhost:9990 /]
データソースの設定を変更する
connection-urlを変更してみる
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:write-attribute(name=connection-url, value=jdbc:postgresql:\/\/localhost:5432\/testdb2) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } } [standalone@localhost:9990 /]
データソースを削除する
[standalone@localhost:9990 /] /subsystem=datasources/data-source=TestDS:remove { "outcome" => "success", "response-headers" => {"process-state" => "reload-required"} } [standalone@localhost:9990 /]
データソース一覧を表示する
[standalone@localhost:9990 /] ls /subsystem=datasources/data-source ArticlesDS ExampleDS PostgresqlDS TestDS [standalone@localhost:9990 /]
XAデータソースの定義
WildFly8.0.0.Finalでやってみた
普通のデータソースと異なりconnection-url表記は受け付けられないようだ。[5][6]を参考に
XAデータソースの追加
batch xa-data-source add \ --name=JBatchXADS \ --driver-name=postgresql \ --jndi-name=java:jboss/jdbc/JBatchXADS \ --user-name=postgres \ --password=*** /subsystem=datasources/xa-data-source="JBatchXADS"/xa-datasource-properties=ServerName:add(value="localhost") /subsystem=datasources/xa-data-source="JBatchXADS"/xa-datasource-properties=PortNumber:add(value="5432") /subsystem=datasources/xa-data-source="JBatchXADS"/xa-datasource-properties=DatabaseName:add(value="jbatch") run-batch
接続テスト
[standalone@localhost:9990 /] /:reload { "outcome" => "success", "result" => undefined } [standalone@localhost:9990 /] /subsystem=datasources/xa-data-source=JBatchXADS:test-connection-in-pool { "outcome" => "success", "result" => [true] }
read-resourceで情報を見てみると、何故かxa-data-source-propertiesで設定した値がundefinedとかになっているのだが、XMLファイルを見てみると値が入っているし、接続テストもOKなので気にしない事にする
接続の障害検知
check-valid-connection-sqlを設定
[8]を見ると「試験以降は valid-connection-checker-class-name と check-valid-connection-sql のどちらかは絶対指定するように」とあるので、設定してみる。例はxa-data-source
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=check-valid-connection-sql, value="SELECT 1")
background-validation-millisを設定
[9]を見ると接続チェックを定期的に行わせることもできるみたい。設定はこんな感じか
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=background-validation-millis, value=60000)
validate-on-matchを設定
DataSource#getConnection()実行時に接続チェックをするか否か。AS7/EAP6からはデフォルトfalseらしい
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=validate-on-match, value=true)
idle-timeout-minutesを設定
障害検知ではないけど。プールの中で使われてない接続を破棄する設定。デフォルト30分。60分に延ばしてみる
/subsystem=datasources/xa-data-source=TestDS:write-attribute(name=idle-timeout-minutes, value=60)
備考
“non-JDBC-compliant”
デプロイするとこういう文言が出力されるのがすごい気になる
18:06:10,463 INFO [org.jboss.as.connector.subsystems.datasources] (management-handler-thread - 3) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.3) 18:06:10,464 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-2) JBAS010417: Started Driver service with driver-name = postgresql
参考文献
- CLI Recipes - JBoss AS 7.1 - Project Documentation Editor
- java - How to check datasource in JBoss? - Stack Overflow
- wildfly/quickstart · GitHub
- “non-JDBC-compliant”? - Community - JBoss
- WildFlyにXA DataSourceを登録する
- Creating XA Datasource from the CLI fails | Community
- JDBC XAデータソース - nekopの日記
- JBoss ASのデータソース設定 - nekopの日記
- JBoss ASのデータソース障害検知 - nekopの日記
Tags: wildfly