ページの先頭行へ戻る
Enterprise Application Platform V2.0.0 GlassFishユーザーズガイド

5.8.4 PostgreSQLベースのデータベース JDBCドライバ(Type4)

注意

  • 本項で説明する設定方法は以下のデータベースで有効です。

    • 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/からダウンロードしてください。

接続プールの設定

接続プールの設定に以下を指定してください。
リソースタイプにはデータソースクラスが実装するインターフェイスを指定してください。

パラメタ

指定値

名前

任意の値

リソースタイプ

以下のいずれかを指定してください。

  • javax.sql.ConnectionPoolDataSource

  • javax.sql.DataSource

  • javax.sql.XADataSource

データベースベンダー

Postgresql ()

データソースクラス名

以下のいずれかを指定してください。

  • org.postgresql.ds.PGConnectionPoolDataSource

  • org.postgresql.ds.PGPoolingDataSource

  • org.postgresql.ds.PGSimpleDataSource

  • org.postgresql.xa.PGXADataSource

) データベースベンダーは、管理コンソールから接続プールを作成するときにだけ指定してください。


リソースタイプごとに使用するデータソースクラス名については、以下のように指定してください。

リソースタイプ

データソースクラス名

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に対して影響を与えるため、システム管理者に相談してから実施してください。

    OSのTCPのパラメータのチューニング

    TCPのパケット再送回数の最大値は、レジストリの「TcpMaxDataRetransmissions」で設定します。変更方法は、Windows OSの仕様を確認してください。


    TCPのパケット再送回数の最大値は、システムパラメータの「net.ipv4.tcp_retries1」「net.ipv4.tcp_retries2」で設定します。変更方法は、Linuxの仕様を確認してください。

    JDBC接続プールのチューニング
    • 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接続プール内のすべての接続に対して接続検証は実行しないため、「すべての障害で」が無効の場合と比較してアプリケーションへの処理復帰が早くなります。