Sun GlassFish Communications Server 2.0 管理ガイド

第 3 章 JDBC リソース

この章では、データベースにアクセスするアプリケーションで必要な、JDBC リソースの設定方法について説明します。この章で説明する内容は次のとおりです。

JDBC リソース

データを格納、編成、取得するために、ほとんどのアプリケーションはリレーショナルデータベースを使用します。Java EE アプリケーションは、JDBC API を介してリレーショナルデータベースにアクセスします。

JDBC リソース (データソース) は、アプリケーションにデータベースへ接続する手段を提供します。通常、管理者は、ドメインに配備されたアプリケーションがアクセスする各データベースの JDBC リソースを作成します。ただし、1 つのデータベースに複数の JDBC リソースを作成できます。

JDBC リソースを作成するには、リソースを識別する一意の JNDI 名を指定します。「JNDI 名とリソース」の節を参照してください。通常、JDBC リソースの JNDI 名は java:comp/env/jdbc サブコンテキストにあります。たとえば、給与データベースのリソースの JNDI 名は java:comp/env/jdbc/payrolldb と名付けることができます。すべてのリソース JNDI 名は java:comp/env サブコンテキストにあるので、管理コンソールの JDBC リソースにある JNDI 名を指定するときは、jdbc/name だけを入力します。たとえば、給与データベースには jdbc/payrolldb を指定します。

JDBC リソース (データソース) は、アプリケーションにデータベースへ接続する手段を提供します。

JDBC リソースを作成する前に、まず JDBC 接続プールを作成します。

JDBC リソースを作成するときには、次の項目を指定してください。

  1. JNDI 名。規則により、名前は jdbc/ 文字列で始まります。次に例を示します。 jdbc/payrolldb。スラッシュを忘れないでください。

  2. 新しい JDBC リソースに関連付ける接続プールを選択します。

  3. リソースの設定を指定します。

  4. クラスタプロファイルまたはエンタープライズプロファイルの場合、リソースが利用できるターゲット (クラスタおよびスタンドアロンサーバーインスタンス) を指定します。

JDBC 接続プール

JDBC リソースを作成するには、関連した接続プールを指定します。複数の JDBC リソースが 1 つの接続プールを指定することもできます。

JDBC 接続プールとは、特定のデータベースのための再利用可能な接続のグループです。新しい物理接続をそれぞれ作成するには時間がかかるので、パフォーマンスの向上のためにサーバーは利用可能な接続のプールを保持しています。アプリケーションが接続を要求すると、プールから 1 つの接続が取得されます。アプリケーションが接続を閉じると、接続はプールに返されます。

接続プールのプロパティーは、データベースベンダーによっては異なる場合もあります。共通のプロパティーには、データベースの名前 (URL)、ユーザー名、およびパスワードがあります。

関連項目

JDBC リソースと接続プールの協調動作について

データを格納、編成、取得するために、ほとんどのアプリケーションはリレーショナルデータベースを使用します。Java EE アプリケーションは、JDBC API を介してリレーショナルデータベースにアクセスします。アプリケーションがデータベースにアクセスするには、接続を取得する必要があります。

実行時に、アプリケーションがデータベースに接続されると次のことが行われます。

  1. JNDI API を介して呼び出しを行うことにより、アプリケーションはデータベースに関連した JDBC リソース (データソース) を取得します。

    リソースの JNDI 名を取得すると、ネーミングおよびディレクトリサービスが JDBC リソースを検索します。JDBC リソースはそれぞれ接続プールを指定します。

  2. JDBC リソースを経由して、アプリケーションはデータベース接続を取得します。

    バックグラウンドで、アプリケーションサーバーはデータベースに対応した接続プールから物理接続を取得します。プールは、データベース名 (URL)、ユーザー名、パスワードなどの接続属性を定義します。

  3. データベースに接続すると、アプリケーションはデータベースのデータの読み込み、変更、および追加を行うことができます。

    アプリケーションは JDBC API を呼び出すことにより、データベースにアクセスします。JDBC ドライバはアプリケーションの JDBC 呼び出しをデータベースサーバーのプロトコルに変換します。

  4. データベースへのアクセスが完了すると、アプリケーションは接続を終了します。

    アプリケーションサーバーは接続を接続プールに返します。接続がプールに戻されると、次のアプリケーションがその接続を利用できるようになります。

データベースアクセスの設定

データベースアクセスを設定するには、次の手順に従います。

  1. サポートされたデータベース製品をインストールします。

    Communications Server がサポートするデータベース製品のリストについては、リリースノートを参照してください。

  2. データベース製品の JDBC ドライバをインストールします。

  3. ドメインのサーバーインスタンスにアクセスできるドライバの JAR ファイルを作成します。

  4. データベースを作成します。

    通常、アプリケーションプロバイダがデータベースを作成し移行するためのスクリプトを配信します。

  5. データベースの接続プールを作成します。

  6. 接続プールを示す JDBC リソースを作成します。

次に、JDBC ドライバを管理ドメインに統合するため、次のどれかを実行します。

  1. 共通クラスローダーにアクセスできるドライバを作成します。

    ドライバの JAR および ZIP ファイルを domain-dir/lib ディレクトリにコピーするか、またはドライバのクラスファイルを domain-dir/lib/ext ディレクトリにコピーします。

  2. ドメインを再起動します。

  3. ドライバの JAR ファイルの完全修飾パス名が認識されます。

JDBC 接続プールの操作

JDBC 接続プールとは、特定のデータベースのための再利用可能な接続のグループです。管理コンソールでプールを作成すると、管理者は実際には特定のデータベースへの接続の項目を定義していることになります。

プールを作成するには、まず JDBC ドライバをインストールして統合する必要があります。「接続プールを作成」ページを構築する際は、JDBC ドライバおよびデータベースベンダーに固有の特定のデータを入力する必要があります。処理を開始する前に、次の情報を集めます。

JDBC 接続プールの作成

管理コンソールを使用して、JDBC 接続プールを作成できます。

Procedure管理コンソールを使用した JDBC 接続プールおよび JDBC リソースの作成

  1. データベース接続用の JDBC ドライバを as-install/domains/ domain_name/lib/ext にコピーします。または、JDBC ドライバのパスを classpath-prefix に追加して、サーバーを再起動します。

  2. 管理コンソールで、「共通操作」ページの「JDBC 接続プールを作成」をクリックします。

  3. 接続プールの名前を入力して、リソースのタイプを選択し、データベースベンダーを選択します。「次へ」をクリックします。

  4. 管理コンソールに、デフォルトのプール設定と、ベンダーから提供されるデータソースクラスのプロパティーが表示されます。

  5. 「Ping」ボタンをクリックして、JDBC 接続プールをテストします。

  6. 管理コンソールの左側の区画で、「リソース」、「JDBC リソース」の順にクリックします。

  7. 「新規」をクリックします。

  8. 「新しい JDBC リソース」ページで、リソースの JNDI 名と、JDBC リソースを関連付ける必要がある JDBC 接続プールを指定します。

  9. 「了解」をクリックします。

ProcedureCLI を使用した JDBC 接続プールおよび JDBC リソースの作成

  1. asadmin create-jdbc-connection-pool コマンドを使用して、JDBC 接続プールを作成します。

    JDBC 接続プールを作成するサンプルコマンドを、次に示します。

    asadmin create-jdbc-connection-pool --datasourceclassname oracle.jdbc.pool.OracleDataSource --restype javax.sql.DataSource --property user=dbuser:password=dbpassword:url="jdbc:oracle\:thin\:@localhost\:1521\:ORCL" myjdbc_oracle-pool

  2. asadmin create-jdbc-resource コマンドを使用して、この接続プールに関連付ける JDBC リソースを作成します。

    JDBC リソースを作成するサンプルコマンドを、次に示します。

    asadmin create-jdbc-connection-pool --connectionpoolid myjdbc_oracle-pool jdbc/oracle-resource

  3. asadmin ping-connection-pool コマンドを使用して接続プールに ping を送信し、接続設定が正しいことをテストします。

    asadmin ping-connection-pool myjdbc_oracle-pool

  4. JDBC 接続プールのプロパティーを編集するには、asadmin listget、および set コマンドを使用します。

    JDBC 接続プールのリストを表示する、サンプルの list コマンドを示します。

    asadmin list myjdbc_oracle-pool

    このコマンドの出力例は次のようになります。

    domain.resources.jdbc-connection-pool.oracle-pool

    JDBC 接続プールのすべてのプロパティーを表示する、サンプルの get コマンドを示します。

    asadmin list myjdbc_oracle-pool

    JDBC 接続プールのすべてのプロパティーを取得する、サンプルの get コマンドを示します。

    asadmin get domain.resources.jdbc-connection-pool.myjdbc_oracle-pool

    JDBC 接続プールのプロパティーを設定する、サンプルの get コマンドを示します。

    asadmin set domain.resources.jdbc-connection-pool.myjdbc_oracle-pool.steady-pool-size=20

JDBC 接続プールの編集

「JDBC 接続プールを編集」ページは、名前を除く既存プールのすべての設定を変更する手段を提供します。

  1. 一般設定を変更します。

    一般設定の値は、インストールした固有の JDBC ドライバにより異なります。これらの設定は、Java プログラミング言語で記述されたクラスやインタフェースの名前です。

    パラメータ  

    説明  

    データソースクラス名 

    DataSource API または XADataSource API あるいはその両方を実装するベンダー固有のクラス名。このクラスは JDBC ドライバにあります。

    リソースタイプ 

    選択肢には javax.sql.DataSource (ローカルトランザクションに限る)、javax.sql.XADataSource (グローバルトランザクション)、および java.sql.ConnectinPoolDataSource (ローカルトランザクション、パフォーマンス向上の可能性あり) があります。

  2. プール設定を変更します。

    一連の物理データベース接続はプール内にあります。アプリケーションが接続を要求すると、接続はプールから削除され、アプリケーションが接続を解放すると、接続はプールに返されます。

    パラメータ  

    説明  

    初期および最小プールサイズ 

    プール内の接続の最小数。この値は、プールを最初に作成するときの、プールに含まれる接続の数も指定します。 

    最大プールサイズ 

    プールに含まれる接続の最大数。 

    プールサイズ変更量 

    プールのサイズを最大プールサイズおよび最小プールサイズに対して拡大および縮小すると、一括処理でプールサイズが変更されます。この値は一括処理での接続の数を指定します。この値を過大に設定すると接続の作成と再利用が遅れ、過小に設定すると効率が落ちます。 

    アイドルタイムアウト 

    プールで接続がアイドル状態のままでいられる最長時間を指定します。この時間を過ぎると、接続はプールから削除されます。 

    最大待ち時間 

    接続を要求するアプリケーションが接続タイムアウトになるまでに待つ時間。デフォルトの待ち時間は長いので、アプリケーションがハングアップしているように見える可能性があります。 

  3. 接続検証設定を変更します。

    オプションで、アプリケーションサーバーは接続が渡される前にそれを検証することができます。この検証により、ネットワークやデータベースサーバーに障害が発生してデータベースが利用できなくなった場合でも、アプリケーションサーバーが自動的にデータベース接続を再確立できます。接続の検証は追加オーバーヘッドとなるため、パフォーマンスに若干の影響が生じます。

    パラメータ  

    説明  

    接続検証 

    「必須」チェックボックスにチェックを付けて、接続検証を有効にします。 

    検証方法 

    アプリケーションサーバーは、次の 3 つの方法でデータベース接続を検証できます。 auto-commit、metadata、および table。 

    auto-commit と meta-data - アプリケーションサーバーは、con.getAutoCommit() メソッドと con.getMetaData() メソッドを呼び出して接続を検証します。

    auto-commit の検証は、2 つのメソッドを使用して接続を検証します。getAutoCommit() メソッドは auto-commit の現在の状態を取得し、setAutoCommit() は auto-commit の状態を変更します。これにより、データベースへの問い合わせが許可されます。getAutomCommit() がデータベースに問い合わせできるかどうかは、実装に基づきます。実際の物理的な接続は、接続プールなどの別の目的でラップされます。


    注 –

    多くの JDBC ドライバでは、これらの呼び出しの結果をキャッシュしているので、常に信頼のある検証が行われるとは限りません。呼び出しがキャッシュされるかどうかについて、ドライバベンダーに問い合わせる必要があります。


    table - アプリケーションは指定したデータベース表に問い合わせます。表は実在し、アクセス可能である必要がありますが、行は必要ありません。多くの行を持つ既存の表や、すでに頻繁にアクセスされている表を使用しないでください。 

    テーブル名 

    「検証方法」コンボボックスで表を選択した場合は、ここでデータベースのテーブル名を指定します。 

    すべての障害で 

    「すべての接続を閉じる」のチェックボックスを選択してある場合、1 つの接続が失敗すると、アプリケーションサーバーはプールに含まれるすべての接続を閉じ、それらを再確立します。そのチェックボックスを選択していない場合は、使用されるときにだけ個々の接続が再確立されます。 

    コンポーネントの呼び出し側以外を許可 

    サーブレットフィルタやライフサイクルモジュールなど、コンポーネント以外の呼び出し側が使用するためのプールを有効にする場合は、このチェックボックスにチェックマークを付けます。  

  4. トランザクション設定を変更します。

    データベースは通常多くのユーザーが同時にアクセスするため、あるトランザクションがデータを読み込もうとするときに別のトランザクションが同じデータを更新する可能性があります。トランザクションの遮断レベルは、更新されるデータがほかのトランザクションに見える度合いを定義します。遮断レベルの詳細については、データベースベンダーのドキュメントを参照してください。

    パラメータ  

    説明  

    非トランザクション接続 

    Application Server がすべての非トランザクション接続を返すようにする場合は、このチェックボックスにチェックマークを付けます。 

    トランザクション遮断 

    プールの接続のトランザクション遮断レベルを選択できるようにします。指定しない場合、接続には JDBC ドライバによって設定されるデフォルトの遮断レベルが適用されます。 

    遮断レベルを保証 

    遮断レベルを指定した場合にだけ適用されます。「保証」チェックボックスを選択すると、プールから取得されるすべての接続が同じ遮断レベルになります。たとえば、最後の使用時に con.setTransactionIsolation を使って接続の遮断レベルをプログラム的に変更した場合、このメカニズムによって状態が指定の遮断レベルに戻されます。

  5. プロパティーを変更します。

    「追加プロパティー」テーブルで、データベース名 (URL)、ユーザー名、およびパスワードなど、必要なプロパティーを指定できます。データベースベンダーによってプロパティーが異なるため、詳細については、ベンダーのドキュメントを調べてください。

JDBC 接続プールの詳細属性の編集

接続リークを診断しやすくし、使い勝手を向上させるため、Application Server 9.1 には接続プールをその作成時点で設定するための新しい属性がいくつか用意されています。

  1. 「詳細」タブを開いて、次の属性を指定します。

    属性 

    説明 

    名前 

    プロパティーを編集する JDBC 接続プールの名前。ただし、プール名は変更できません。 

    文のタイムアウト 

    異常に長い時間実行されているクエリーを終了させるまでの時間 (秒数)。Application Server は、作成された文に対して「QueryTimeout」を設定します。デフォルト値の -1 は、この属性が無効であることを示します。 

    JDBC オブジェクトをラップ 

    true に設定すると、アプリケーションは Statement、PreparedStatement、CallableStatement、ResultSet、DatabaseMetaData に対してラップされた JDBC オブジェクトを取得します。デフォルト値は false です。 

  2. 次の表の説明に従って、接続設定を指定します。

    属性 

    説明 

    最大で 1 回検証 

    経過するまでに 1 回しか接続が検証されない時間 (秒)。これは、1 つの接続による検証要求の数を減らすのに役立ちます。デフォルト値の 0 は、接続の検証が無効であることを示します。 

    リークタイムアウト 

    接続プール内の接続リークを追跡する時間 (秒)。デフォルト値の 0 は、接続リーク追跡が無効であることを示します。接続リーク追跡を有効にすると、「リソースの監視」タブに接続リークの数に関する統計情報が表示されます。このタブを表示するには、「Application Server」->「監視」->「リソース」の順に選択します。  

    リーク再要求 

    このオプションを有効にすると、リーク接続の追跡が完了したあとで、リークした接続がプールにリストアされます。 

    作成再試行回数 

    新しい接続の作成に失敗した場合に行われる試行の回数。デフォルト値の 0 は、接続の再試行が行われないことを示します。 

    再試行間隔 

    接続作成の試行の間隔 (秒数) を指定します。デフォルト値は 10 秒です。この属性は、「作成再試行回数」が 1 以上の場合にのみ使用されます。 

    使用時にのみ接続を登録 

    リソースが実際にメソッドで使用される場合にのみリソースをトランザクションに登録するには、このオプションを有効にします。 

    使用時にのみ関連付け 

    接続に対して操作が実行された時点ではじめて接続が関連付けられます。また、トランザクションが完了してコンポーネントメソッドが終了したときに関連付けが解除されるため、物理的な接続を再利用しやすくなります。デフォルト値は false です。 

    スレッドとの関連付け 

    接続をスレッドに関連付けるには、このオプションを有効にします。これにより、同じスレッドが接続を必要とするときは、そのスレッドにすでに関連付けられている接続を再利用できるため、プールから接続を取得するオーバーヘッドが発生しません。デフォルト値は false です。 

    接続のマッチング  

    プールに対する接続マッチングのオン/オフを切り替えるには、このオプションを使用します。プール内の接続が常に同じ種類であり、プールから選択した接続とリソースアダプタを照合する必要がない場合は、false に設定できます。デフォルト値は false です。 

    最大接続使用数 

    接続をプールで再利用する回数を指定します。指定された回数だけ再利用されると、その接続は閉じられます。これは、たとえば、文リークを回避するのに役立ちます。デフォルト値の 0 は、接続が再利用されないことを示します。 

各 JDBC ドライバの設定

Communications Server 2.0 は、対応する JDBC ドライバを持つすべてのデータベース管理システムに接続できるように設計されています。次の JDBC ドライバとデータベースの組み合わせがサポートされます。これらの組み合わせは、Communications Server 2.0 でテスト済みであり、Java EE と互換性があることが確認されています。

その他の JDBC ドライバは、Communications Server 2.0 で使用可能ですが、Java EE との互換性テストはまだ完了していません。Sun では、それらのドライバの製品サポートは提供していませんが、Communications Server 2.0 での使用についての限定サポートを提供しています。

JDBC ドライバを統合する方法、および管理コンソールまたはコマンド行インタフェースを使用して設定を実装する方法については、『Sun GlassFish Communications Server 2.0 管理ガイド』を参照してください。


注 –

Oracle データベースユーザーが capture-schema コマンドを実行するには、そのユーザーがスキーマの所有者でないかぎり、ANALYZE ANY TABLE 特権が必要です。この特権は、データベース管理者がユーザーに付与します。capture-schema の詳細は、『Sun GlassFish Communications Server 2.0 Reference Manual』を参照してください。


Java DB Type 4 ドライバ

Java DB JDBC ドライバは、デフォルトで Communications Server に含まれています。ただし、Solaris バンドル版のインストールには Java DB は含まれていません。したがって、Solaris バンドル版のインストール以外では、この JDBC ドライバを Communications Server に組み込む必要はありません。

Java DB ドライバの JAR ファイルは derbyclient.jar です。

次のように接続プールを設定します。

DB2 データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smbase.jarsmdb2.jar、および smutil.jar です。次のように接続プールを設定します。

Oracle 8.1.7 および 9.x データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smbase.jarsmoracle.jar、および smutil.jar です。次のように接続プールを設定します。

Microsoft SQL Server データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smbase.jarsmsqlserver.jar、および smutil.jar です。次のように接続プールを設定します。

Sybase データベース用の Sun GlassFish JDBC ドライバ

このドライバの JAR ファイルは smbase.jarsmsybase.jar、および smutil.jar です。次のように接続プールを設定します。

IBM DB2 8.1 Type 2 ドライバ

この DB2 ドライバの JAR ファイルは db2jcc.jardb2jcc_license_cu.jar、および db2java.zip です。次のように環境変数を設定します。

LD_LIBRARY_PATH=/usr/db2user/sqllib/lib:${Java EE.home}/lib
DB2DIR=/opt/IBM/db2/V8.1
DB2INSTANCE=db2user
INSTHOME=/usr/db2user
VWSPATH=/usr/db2user/sqllib
THREADS_FLAG=native

次のように接続プールを設定します。

Sybase ASE 12.5 データベース用の JConnect Type 4 ドライバ

この Sybase ドライバの JAR ファイルは jconn2.jar です。次のように接続プールを設定します。

MySQL Type 4 Driver

この MySQL ドライバの JAR ファイルは mysql-connector-java-version-bin-g.jar です 。たとえば、mysql-connector-java-5.0.5-bin-g.jar などです。次のように接続プールを設定します。

Oracle 8.1.7 および 9.x データベース用の Inet Oraxo JDBC ドライバ

この Oracle ドライバの JAR ファイルは Oranxo.jar です。次のように接続プールを設定します。

Microsoft SQL Server データベース用の Inet Merlia JDBC ドライバ

この Microsoft SQL Server ドライバの JAR ファイルは Merlia.jar です。次のように接続プールを設定します。

Sybase データベース用の Inet Sybelux JDBC ドライバ

この Inet Sybase ドライバの JAR ファイルは Sybelux.jar です。次のように接続プールを設定します。

Oracle 8.1.7 および 9.x 用の Oracle Thin Type 4 ドライバ

この Oracle ドライバの JAR ファイルは ojdbc14.jar です。次のように接続プールを設定します。

Oracle 8.1.7 および 9.x データベース用の OCI Oracle Type 2 ドライバ

この OCI Oracle ドライバの JAR ファイルは ojdbc14.jar です。LD_LIBRARY_PATH を介して共用ライブラリが利用可能であること、および ORACLE_HOME プロパティーが設定されていることを確認してください。次のように接続プールを設定します。

IBM Informix Type 4 ドライバ

次のように接続プールを設定します。

CloudScape 5.1 Type 4 ドライバ

この CloudScape ドライバの JAR ファイルは db2j.jardb2jtools.jardb2jcview.jarjh.jardb2jcc.jar、および db2jnet.jar です。次のように接続プールを設定します。