注意
本項で説明する設定方法は以下のデータベースで有効です。
Enterprise Postgres
Azure Database for PostgreSQL
OSSの利用については、適用された使用条件(ライセンス条件)に従い、お客様の責任において入手、ご利用ください。
環境変数の設定
以下の環境設定を行ってください。
クラスパスの設定については「5.8.1 JDBCドライバの環境設定」を参照してください。
設定項目 | ドライバのバージョン | 設定値(注1) |
---|---|---|
クラスパス | Enterprise Postgresクライアント機能 13、14、15、16、17 | JDBCドライバ・格納先ディレクトリー\postgresql-jdbc42.jar |
Azure Database for PostgreSQLの場合、PostgreSQL JDBC Driver 42.7.X(Xは“5”以降) (注3)のJDBC 4.2用のJDBC ドライバを使用 | JDBCドライバ・格納先ディレクトリー¥postgresql<バージョン>.jar(注2) |
注1) Linuxの場合、“\”を“/”に読み替えてください。
注2) <バージョン>は、“-42.7.5”などの文字列です。
注3) PostgreSQL JDBC ウェブサイトのダウンロードページであるhttps://jdbc.postgresql.org/download/からダウンロードしてください。
接続プールの設定
接続プールの設定に以下を指定してください。
リソースタイプにはデータソースクラスが実装するインターフェイスを指定してください。
パラメタ | 指定値 |
---|---|
名前 | 任意の値 |
リソースタイプ | 以下のいずれかを指定してください。
|
データベースベンダー | Postgresql (注) |
データソースクラス名 | 以下のいずれかを指定してください。
|
注) データベースベンダーは、管理コンソールから接続プールを作成するときにだけ指定してください。
リソースタイプごとに使用するデータソースクラス名については、以下のように指定してください。
リソースタイプ | データソースクラス名 |
---|---|
javax.sql.ConnectionPoolDataSource | org.postgresql.ds.PGConnectionPoolDataSource |
javax.sql.DataSource | org.postgresql.ds.PGPoolingDataSource org.postgresql.ds.PGSimpleDataSource |
javax.sql.XADataSource | org.postgresql.xa.PGXADataSource |
注意
接続プールの設定に関する注意事項
データソースクラス名
Enterprise Postgresクライアント機能 10より、org.postgresql.ds.PGPoolingDataSource クラスの使用が非推奨となりました。
Enterprise Postgresクライアント機能 10以降でリソースタイプに「javax.sql.DataSource」を指定する場合は、データソースクラス名に「org.postgresql.ds.PGSimpleDataSource」を指定することを推奨します。
プロパティ
以下に指定できるプロパティを説明します。説明されているプロパティ以外は編集する必要はありません。指定するプロパティの詳細は、JDBCドライバのマニュアルを参照してください。
プロパティ名 | 値 |
---|---|
user | ユーザIDを指定してください。 |
password | パスワードを指定してください。 |
databaseName | データベースの名前を指定してください。 |
serverName | データベースサーバのIPアドレスを指定してください。 |
portNumber | ポート番号をデフォルトから変更した場合、変更したポート番号を指定してください。 |
注意
Azure Database for PostgreSQLに関する注意事項
Azure Database for PostgreSQLは、データベースを停止するとき、すでに接続が確立済みの相手へのTCPのFINパケットの送信が保証されていません。Azure Database for PostgreSQLについては、Microsoft Azureの仕様を確認してください。
そのため、JDBCドライバはデータベースの停止を認識できず、パケットの再送を繰り返す可能性があります。これにより、アプリケーションがJDBC接続プールから取得した接続を利用して呼び出したSQLの実行が長時間ハングしたり、JDBC接続プールの接続検証の実行が長時間ハングする場合があります。
Azure Database for PostgreSQLを利用する場合、以下の点に注意して運用・チューニングしてください。
データベースの停止操作は、データベースに接続するアプリケーションを配備したGlassFish Serverクラスターを停止した状態で実行してください。
GlassFish Serverクラスターが起動した状態でデータベースが停止する可能性がある場合、必要に応じて、OSのTCPのパラメータのチューニングや、JDBC接続プールの設定のチューニングを検討してください。ただし、TCPパラメータのチューニングは、すべてのTCPに対して影響を与えるため、システム管理者に相談してから実施してください。
TCPのパケット再送回数の最大値は、レジストリの「TcpMaxDataRetransmissions」で設定します。変更方法は、Windows OSの仕様を確認してください。
TCPのパケット再送回数の最大値は、システムパラメータの「net.ipv4.tcp_retries1」「net.ipv4.tcp_retries2」で設定します。変更方法は、Linuxの仕様を確認してください。
JDBC接続プールの追加プロパティにsocketTimeout(データベースからレスポンスを受信するときの待ち時間(秒)の上限値)を設定すると、アプリケーションでのSQL文の実行時間に上限を設けることができます。そのため、SQLの実行や接続検証は、データベースの停止時にTCPのパケット再送回数の最大値を待たずに復帰するようになります。ただし、データベースの起動時にデータベースでの処理に時間がかかる場合も、socketTimeoutを超過するとタイムアウトするようになる点に注意してください。JDBCドライバのプロパティの詳細は、以下を参照してください。
https://jdbc.postgresql.org/documentation/use/
JDBC接続プールの定義項目の「接続検証」の初期値は有効、「すべての障害で」の初期値は無効です。初期値の場合、アプリケーションがデータベースの停止時にJDBC接続プールに接続を要求すると、JDBC接続プール内のすべての接続に対して接続検証を実行します。そのため、アプリケーションに処理が復帰するまでに時間がかかります。この時間を短縮したい場合は、以下の定義項目の変更を検討してください。JDBC接続プールの定義項目の詳細は、「10.7.1 JDBC接続プールの定義項目」を参照してください。
アプリケーションがデータベース停止時にJDBC接続プールに接続を要求したときは、接続検証が実行されないため、接続要求はすぐにアプリケーションへ復帰します。その後、アプリケーションで接続を利用する場合、socketTimeoutに応じた時間が経過したり、TCPのパケット再送回数の最大値に達すると、アプリケーションに例外がスローされます。
アプリケーションがデータベース停止時にJDBC接続プールに接続を要求したときは、socketTimeoutに応じた時間が経過したり、TCPのパケット再送回数の最大値に達すると、アプリケーションに例外がスローされます。JDBC接続プール内のすべての接続に対して接続検証は実行しないため、「すべての障害で」が無効の場合と比較してアプリケーションへの処理復帰が早くなります。