AWSのEC2(RHEL 7.3)でWildFly 10.0.0のJDBC用カスタムモジュール、PostgreSQL 9.6用データソースを作成
目次
概要
WildFlyでデータソースを作成する場合、使用するJDBCドライバをモジュール化する方法が2通りあります。 1つはJDBCドライバをデプロイする方法と、もう1つはJDBC用のカスタムモジュールを作成する方法です。 それぞれ特徴があるので、一概にどちらが良いと言えるものではないので、必要に応じて使い分けます。 今回はJDBC用のカスタムモジュールを作成する手順を紹介します。 以下に2通りのJDBCドライバモジュール化の特徴を挙げておきます。
モジュール化の方法 | 特徴 |
---|---|
デプロイ | ・即時反映 ・ドメインによる一括管理が可能 ・単一のJARファイルのみ対応可能 |
カスタムモジュール | ・ドメインによる一括管理ができず、個々のノードで定義する必要がある ・JDBCドライバが複数のJARファイルで構成されていても、単一モジュールとして認識可能 |
作成するデータソースで接続するのはPostgreSQL 9.6.1ですが、PostgreSQLの公式サイトで公開されている JDBCドライバの最新バージョンが9.4だったので、これを使用して接続します。
構成
想定環境
今回の検証用サーバ環境としてAWS(Amazon Web Services)のEC2を利用しました。 サーバのスペックは以下のとおりです。
項目 | 内容 |
---|---|
インスタンスタイプ | t2.micro |
vCPU | 1 |
メモリ | 1GB |
ディスク | SSD 10GiB |
リージョン | オレゴン |
価格 | 無料 |
サーバ構成
OSバージョン
Red Hat Enterprise Linux 7.3 x86_64
ソフトウェア・パッケージ一覧
- jdk-8u92-linux-x64.rpm
- wildfly-10.0.0.Final.tar.gz
- postgresql96-9.6.1-1PGDG.rhel7.x86_64.rpm
- postgresql96-libs-9.6.1-1PGDG.rhel7.x86_64.rpm
- postgresql96-server-9.6.1-1PGDG.rhel7.x86_64.rpm
- postgresql-9.4.1212.jar
環境構築
JDBC用カスタムモジュールの作成
PostgreSQL用JDBCドライバのダウンロード
PostgreSQL用のJDBCドライバ(JARファイル)をwgetコマンドでダウンロードします。 ダウンロード元はPostgreSQLの公式サイトです。 2017年2月2日時点での最新バージョンは9.4でしたが、PostgreSQL 9.6にも接続できることが確認できたので、これを使用します。
なお、Linuxにwgetコマンド自体がインストールされていない場合は、先にyumコマンドでwgetパッケージをインストールして下さい。 今回はwgetパッケージのインストールは割愛します。
$ sudo su -
# cd /media/installer/
# mkdir jdbc ←ダウンロード先のディレクトリを作成
# cd jdbc/
# wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar
--2017-02-02 10:17:32-- https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar
Resolving jdbc.postgresql.org (jdbc.postgresql.org)... 174.143.35.228, 2001:4800:1501:1::228
Connecting to jdbc.postgresql.org (jdbc.postgresql.org)|174.143.35.228|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 680445 (664K) [application/java-archive]
Saving to: ‘postgresql-9.4.1212.jar’
100%[==============================================================================>] 680,445 1.22MB/s in 0.5s
2017-02-02 10:17:33 (1.22 MB/s) - ‘postgresql-9.4.1212.jar’ saved [680445/680445]
# ls -l
total 668
-rw-r--r--. 1 root root 680445 Nov 2 13:13 postgresql-9.4.1212.jar
カスタムモジュールの作成先ディレクトリの作成
JDBC用カスタムモジュールを作成するディレクトリをLinux上に作成します。 $JBOSS_HOME/modules/ ディレクトリ配下であればどの階層でも良いのですが、 今回は /opt/wildfly-10.0.0.Final/modules/org/ ディレクトリにカスタムモジュールを作成することにします。 org ディレクトリは初期状態では存在しないので、作成します。
# su - wildfly $ cd /opt/wildfly-10.0.0.Final/modules/ $ mkdir org
管理CLIの起動
ここからの作業はWildFlyの管理CLIから実行します。 管理CLIを起動し、WildFlyインスタンスへ接続します。
もし connect で失敗する場合は、設定ファイル(/opt/wildfly-10.0.0.Final/standalone/configuration/standalone.xml)の 『jboss.bind.address.management:』で指定されているIPアドレスを確認し、connect の引数でバインドされているIPアドレスを 明示的に指定して接続してください。
$ cd /opt/wildfly-10.0.0.Final/bin/ $ ./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
JDBC用カスタムモジュールの作成
/opt/wildfly-10.0.0.Final/modules/org/ ディレクトリに postgres という名のモジュールを作成します。 --resourcesオプションで、ダウンロードしたJDBCドライバのjarファイルをフルパスで指定します。 また、--dependenciesオプションで、モジュールの依存関係を指定します。JDBCドライバの場合は javax.api と javax.transaction.api を指定します。
[standalone@localhost:9990 /] module add --name=org.postgres --resources=/media/installer/jdbc/postgresql-9.4.1212.jar --dependencies=javax.api,javax.transaction.api
JDBCドライバの登録
作成したカスタムモジュールをデータソースで使用するJDBCドライバとして登録します。 JDBCドライバの名前は postgres94-driver とします。 JDBCモジュールには、先ほど作成したカスタムモジュールの org.postgres を指定します。
[standalone@localhost:9990 /] cd /subsystem=datasources [standalone@localhost:9990 subsystem=datasources] :read-resource { "outcome" => "success", "result" => { "data-source" => {"ExampleDS" => undefined}, ←デフォルトのデータソース "jdbc-driver" => {"h2" => undefined}, ←デフォルトのJDBCドライバ "xa-data-source" => undefined } } [standalone@localhost:9990 subsystem=datasources] ./jdbc-driver=postgres94-driver:add (driver-name=postgres94-driver,driver-module-name=org.postgres) ←JDBCドライバの登録 05:44:50,960 INFO [org.jboss.as.connector.subsystems.datasources] (management-handler-thread - 8) WFLYJCA0005: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.4) 05:44:50,961 INFO [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-1) WFLYJCA0018: Started Driver service with driver-name = postgres94-driver {"outcome" => "success"}
登録したJDBCドライバの確認
JDBCドライバが正常に登録されたことを確認します。
[standalone@localhost:9990 subsystem=datasources] jdbc-driver-info ←JDBCドライバの一覧を表示 NAME SOURCE h2 com.h2database.h2/main postgres94-driver org.postgres/main ←今回登録したJDBCドライバ [standalone@localhost:9990 subsystem=datasources] jdbc-driver-info postgres94-driver ←登録したJDBCドライバの詳細を表示 driver-name postgres94-driver deployment-name n/a driver-module-name org.postgres module-slot main driver-datasource-class-name driver-xa-datasource-class-name driver-class-name org.postgresql.Driver driver-major-version 9 driver-minor-version 4 jdbc-compliant false
非XAデータソースの定義
非XAデータソースの新規作成
引き続き管理CLIで設定作業を行います。 以下の条件で非XAデータソースを作成します。
設定項目 | 説明 | 値 |
---|---|---|
name | データソース名 | Postgres94DS |
connection-url | 接続先DBのURL | jdbc:postgresql://localhost:5432/dbname <値の説明> postgresql・・・データソースはPostgreSQL localhost・・・WildFlyと同一サーバ上でPostgreSQLが稼働 5432・・・PostgreSQLのリグニングポート dbname・・・データベース名 |
driver-name | 使用するJDBCドライバ名 | postgres94-driver |
jndi-name | JNDI名 | java:jboss/resources/jdbc/Postgres94DS |
[standalone@localhost:9990 subsystem=datasources] data-source add --name=Postgres94DS --connection-url="jdbc:postgresql://localhost:5432/dbname" --driver-name=postgres94-driver --jndi-name=java:jboss/resources/jdbc/Postgres94DS 05:53:35,182 INFO [org.jboss.as.connector.subsystems.datasources] (MSC service thread 1-2) WFLYJCA0001: Bound data source [java:jboss/resources/jdbc/Postgres94DS] [standalone@localhost:9990 subsystem=datasources] :read-resource { "outcome" => "success", "result" => { "data-source" => { "ExampleDS" => undefined, "Postgres94DS" => undefined ←今回追加した非XAデータソース }, "jdbc-driver" => { "h2" => undefined, "postgres94-driver" => undefined ←先ほど登録したJDBCドライバ }, "xa-data-source" => undefined } }
作成した非XAデータソースの設定確認
作成した非XAデータソースの設定を確認します。 これから設定変更する箇所を確認します。
[standalone@localhost:9990 subsystem=datasources] data-source read-resource --name=Postgres94DS --recursive=true allocation-retry=n/a allocation-retry-wait-millis=n/a allow-multiple-users=false background-validation=n/a background-validation-millis=n/a blocking-timeout-wait-millis=n/a capacity-decrementer-class=n/a capacity-decrementer-properties=n/a capacity-incrementer-class=n/a capacity-incrementer-properties=n/a check-valid-connection-sql=n/a connectable=false connection-listener-class=n/a connection-listener-property=n/a connection-url=jdbc:postgresql://localhost:5432/dbname datasource-class=n/a driver-class=n/a driver-name=postgres94-driver enabled=true enlistment-trace=true exception-sorter-class-name=n/a exception-sorter-properties=n/a flush-strategy=n/a idle-timeout-minutes=n/a initial-pool-size=n/a jndi-name=java:jboss/resources/jdbc/Postgres94DS jta=true ←JTAを使用したトランザクションにデータソースを参加させるかどうか max-pool-size=n/a mcp=org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreConcurrentLinkedDequeManagedConnectionPool min-pool-size=n/a new-connection-sql=n/a password=n/a ←DB接続パスワード pool-fair=n/a pool-prefill=n/a pool-use-strict-min=n/a prepared-statements-cache-size=n/a query-timeout=n/a reauth-plugin-class-name=n/a reauth-plugin-properties=n/a security-domain=n/a set-tx-query-timeout=false share-prepared-statements=false spy=false stale-connection-checker-class-name=n/a stale-connection-checker-properties=n/a statistics-enabled=false track-statements=NOWARN tracking=false transaction-isolation=n/a url-delimiter=n/a url-selector-strategy-class-name=n/a use-ccm=true use-fast-fail=false use-java-context=true use-try-lock=n/a user-name=n/a ←DB接続ユーザ名 valid-connection-checker-class-name=n/a valid-connection-checker-properties=n/a validate-on-match=n/a connection-properties=n/a ←コネクションプロパティ statistics=n/a
非XAデータソースの設定変更
作成した非XAデータソースの設定を変更します。 DB接続時に必要なユーザ名とパスワードが未設定なので、ここで設定します。
[standalone@localhost:9990 subsystem=datasources] data-source --name=Postgres94DS --user-name=pguser01 --password=pgpass-55 --jta=true operation-requires-reload: true operation-requires-reload: true operation-requires-reload: true process-state: reload-required
コネクションプロパティの設定
ここでは試しにソケットタイムアウトをしない設定に変更します。
[standalone@localhost:9990 subsystem=datasources] cd /subsystem=datasources/data-source=Postgres94DS [standalone@localhost:9990 data-source=Postgres94DS] ./connection-properties=socketTimeout:add(value=0) { "outcome" => "success", "response-headers" => { "operation-requires-reload" => true, "process-state" => "reload-required" } }
非XAデータソースの有効化
最後に作成した非XAデータソースを有効化します。
[standalone@localhost:9990 data-source=Postgres94DS] data-source enable --name=Postgres94DS 07:22:18,196 INFO [org.jboss.as.connector] (management-handler-thread - 26) WFLYJCA0093: The 'enable' operation is deprecated. Use of the 'add' or 'remove' operations is preferred, or if required the 'write-attribute' operation can used to set the deprecated 'enabled' attribute operation-requires-reload: true process-state: reload-required
動作確認
DBへの接続確認
作成した非XAデータソースを使用してDBへの接続テストを行います。 接続先として指定したDBはPostgreSQL 9.6.1です。 JDBCドライバのバージョンと一致していませんが、接続テストは成功しました。 実際のJavaアプリケーションから接続した場合は何か制限があるかもしれませんが、その点は未確認です。
[standalone@localhost:9990 data-source=Postgres94DS] /subsystem=datasources/data-source=Postgres94DS:test-connection-in-pool
{
"outcome" => "success", ←成功した
"result" => [true]
}
[standalone@localhost:9990 data-source=Postgres94DS] quit
$