OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2017/02/05

OSSでLinuxサーバ構築

AWSのEC2(RHEL 7.3)でWildFly 10.0.0のJDBC用カスタムモジュール、PostgreSQL 9.6用データソースを作成

トップページOSSでLinuxサーバ構築 > 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
vCPU1
メモリ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用カスタムモジュールの作成

(1) 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

(2) カスタムモジュールの作成先ディレクトリの作成

 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

(3) 管理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

(4) 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

(5) 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"}

(6) 登録した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データソースの定義

(1) 非XAデータソースの新規作成

 引き続き管理CLIで設定作業を行います。 以下の条件で非XAデータソースを作成します。

設定項目説明
nameデータソース名Postgres94DS
connection-url接続先DBのURLjdbc:postgresql://localhost:5432/dbname
<値の説明>
postgresql・・・データソースはPostgreSQL
localhost・・・WildFlyと同一サーバ上でPostgreSQLが稼働
5432・・・PostgreSQLのリグニングポート
dbname・・・データベース名
driver-name使用するJDBCドライバ名postgres94-driver
jndi-nameJNDI名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
    }
}

(2) 作成した非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

(3) 非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

(4) コネクションプロパティの設定

 ここでは試しにソケットタイムアウトをしない設定に変更します。

[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"
    }
}

(5) 非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
$

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会

■■■ 当サイトは Internet Explorer 11 と Mozilla Firefox 43 で動作確認済みです。 ■■■