JDBC リソース (データソース) は、アプリケーションにデータベースへ接続する手段を提供します。通常、管理者は、ドメインに配備されたアプリケーションがアクセスする各データベースの JDBC リソースを作成します。ただし、データベース用に複数の JDBC リソースを作成できます。
この章の内容は次のとおりです。
データを格納、編成、取得するために、ほとんどのアプリケーションはリレーショナルデータベースを使用します。Java EE アプリケーションは、JDBC API を介してリレーショナルデータベースにアクセスします。
JDBC リソース (データソース) は、アプリケーションにデータベースへ接続する手段を提供します。JDBC リソースを作成する前に、まず JDBC 接続プールを作成します。
JDBC リソースを作成するには、リソースを識別する一意の 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 リソース」の順に選択します。次のようにリソース設定を指定します。
JNDI 名: 一意の名前を指定します。図書館内でカード目録によって図書を編成し、位置を表すのと同様に、JNDI 名は、分散型コンピューティング環境内でコンポーネントを編成し、位置を示します。そのため、JNDI 名は JDBC リソースにアクセスする重要な方法になります。慣例により、名前は jdbc/ 文字列で始まります。次に例を示します。jdbc/payrolldb. スラッシュを忘れないでください。
プール名: 新しい JDBC リソースに関連した接続プールを選択します。
説明: リソースについての短い説明を入力します。
各クラスタノードの Status (列挙型)リソースを利用不可にする場合は、「有効」チェックボックスの選択を解除します。デフォルトでは、リソースは作成すると同時に利用可能 (有効) です。
コマンド行ユーティリティーを使用して JDBC を作成するには、create-jdbc-resource コマンドを使用します。
JDBC リソースを作成するには、関連した接続プールを指定します。複数の JDBC リソースで 1 つの接続プールを指定できます。
JDBC 接続プールとは、特定のデータベースのための再利用可能な接続のグループです。新しい物理接続をそれぞれ作成するには時間がかかるので、パフォーマンスの向上のためにサーバーは利用可能な接続のプールを保持しています。アプリケーションが接続を要求すると、プールから 1 つの接続が取得されます。アプリケーションが接続を閉じると、接続はプールに返されます。
接続プールを作成すると、実際には特定のデータベースへの接続の項目を定義していることになります。プールを作成するには、まず JDBC ドライバをインストールして統合する必要があります。接続プールのプロパティーは、データベースベンダーによっては異なる場合もあります。共通のプロパティーには、データベースの名前 (URL)、ユーザー名、およびパスワードがあります。
JDBC ドライバおよびデータベースベンダーに固有の特定のデータを入力する必要があります。処理を開始する前に、次の情報を集めます。
データベースベンダー名
javax.sql.DataSource (ローカルトランザクションのみ) や javax.sql.XADataSource (グローバルトランザクション) などのリソースタイプ
データソースクラス名: JDBC ドライバにリソースタイプとデータベースのデータソースクラスがある場合、「データソースクラス名」フィールドの値が必要です。
データベース名 (URL)、ユーザー名、およびパスワードなどの必要なプロパティ
JDBC 接続プールとは、特定のデータベースのための再利用可能な接続のグループです。管理コンソールでプールを作成すると、管理者は実際には特定のデータベースへの接続の項目を定義していることになります。
プールを作成するには、まず JDBC ドライバをインストールして統合する必要があります。「接続プールを作成」ページを構築する際は、JDBC ドライバおよびデータベースベンダーに固有の特定のデータを入力する必要があります。処理を開始する前に、次の情報を集めます。
データベースベンダー名
javax.sql.DataSource (ローカルトランザクションのみ) や javax.sql.XADataSource (グローバルトランザクション) などのリソースタイプ
データソースクラス名
データベース名 (URL)、ユーザー名、およびパスワードなどの必要なプロパティー
インストールした JDBC ドライバで指定されているとおりに、一般設定の値を定義します。これらの設定は、Java プログラミング言語で記述されたクラスやインタフェースの名前です。
パラメータ |
説明 |
---|---|
データソースクラス名 |
DataSource API、XADataSource API、あるいはその両方を実装するベンダー固有のクラス名。このクラスは JDBC ドライバにあります。 |
リソースタイプ |
選択肢には javax.sql.DataSource (ローカルトランザクションに限る)、javax.sql.XADataSource (グローバルトランザクション)、および java.sql.ConnectinPoolDataSource (ローカルトランザクション、パフォーマンス向上の可能性あり) があります。 |
さらに、プール内に存在する一連の物理データベース接続を定義する必要があります。アプリケーションが接続を要求すると、接続はプールから削除され、アプリケーションが接続を解放すると、接続はプールに返されます。
パラメータ |
説明 |
---|---|
初期および最小プールサイズ |
プール内の接続の最小数。この値は、プールを最初に作成したり、アプリケーションサーバーを起動したりするときの、プールに含まれる接続の数も指定します。 |
最大プールサイズ |
プールに含まれる接続の最大数。 |
「プールサイズ変更量」 |
プールのサイズが最小プールサイズに近づくと、プールサイズが一括処理で変更されます。この値は一括処理での接続の数を指定します。この値を過大に設定すると接続の再利用が遅れ、過小に設定すると効率が落ちます。 |
アイドルタイムアウト |
プールで接続がアイドル状態のままでいられる最長時間を指定します。この時間を過ぎると、接続はプールから削除されます。 |
最大待ち時間 |
接続タイムアウトになる前に接続を要求するアプリケーションが待つ時間。デフォルトの待ち時間は長いので、アプリケーションがハングアップしているように見える可能性があります。 |
オプションで、アプリケーションサーバーは接続が渡される前にそれを検証することができます。この検証により、ネットワークやデータベースサーバーに障害が発生してデータベースが利用できなくなった場合でも、アプリケーションサーバーが自動的にデータベース接続を再確立できます。接続の検証は追加オーバーヘッドとなるため、パフォーマンスに若干の影響が生じます。
パラメータ |
説明 |
---|---|
接続検証 |
必要なチェックボックスを選択して、接続検証を有効にします。 |
検証方法 |
アプリケーションサーバーは、auto-commit、metadata、および table の 3 つの方法でデータベース接続を検証できます。 auto-commit と metadata - アプリケーションサーバーは、con.getAutoCommit() と con.getMetaData() メソッドを呼び出して接続を検証します。ただし、多くの JDBC ドライバでは、これらの呼び出しの結果をキャッシュしているので、常に信頼のある検証が行われるとは限りません。呼び出しがキャッシュされるかどうかについて、ドライバベンダーに問い合わせる必要があります。 table - アプリケーションは指定したデータベース表に問い合わせます。表は実在し、アクセス可能である必要がありますが、行は必要ありません。多くの行を持つ既存の表や、頻繁にアクセスされる表を使用しないでください。 |
表名 |
「検証方法」コンボボックスで表を選択した場合は、ここでデータベース表の名前を指定します。 |
すべて障害で |
「すべての接続を閉じる」のチェックボックスを選択してある場合、1 つの接続が失敗すると、アプリケーションサーバーはプールに含まれるすべての接続を閉じ、それらを再確立します。そのチェックボックスを選択していない場合は、使用されるときにだけ個々の接続が再確立されます。 |
データベースは通常多くのユーザーが同時にアクセスするため、あるトランザクションがデータを読み込もうとするときに別のトランザクションが同じデータを更新する可能性があります。トランザクションの遮断レベルは、更新されるデータがほかのトランザクションに見える度合いを定義します。遮断レベルの詳細については、データベースベンダーのマニュアルを参照してください。
パラメータ |
説明 |
---|---|
トランザクション遮断 |
プールの接続のトランザクション遮断レベルを選択できます。指定しない場合、接続は JDBC ドライバによって設定されるデフォルトの遮断レベルがプールに適用されます。 |
遮断レベルを保証 |
遮断レベルを指定した場合にだけ適用されます。「保証」チェックボックスを選択する場合は、プールから取得されるすべての接続が同じ遮断レベルを持ちます。たとえば、最後の使用時に con.setTransactionIsolation を使って接続の遮断レベルをプログラム的に変更した場合、このメカニズムによって状態が指定された遮断レベルに戻されます。 |
データを格納、編成、取得するために、ほとんどのアプリケーションはリレーショナルデータベースを使用します。Java EE アプリケーションは、JDBC API を介してリレーショナルデータベースにアクセスします。アプリケーションがデータベースにアクセスするには、接続を取得する必要があります。
実行時に、アプリケーションがデータベースに接続されると次のことが行われます。
JNDI API を介して呼び出しを行うことにより、アプリケーションはデータベースに関連した JDBC リソース (データソース) を取得します。
リソースの JNDI 名を取得すると、ネーミングおよびディレクトリサービスが JDBC リソースを検索します。JDBC リソースはそれぞれ接続プールを指定します。
JDBC リソースを経由して、アプリケーションはデータベース接続を取得します。
バックグラウンドで、アプリケーションサーバーはデータベースに対応した接続プールから物理接続を取得します。プールは、データベース名 (URL)、ユーザー名、およびパスワードなどの接続属性を定義します。
データベースに接続すると、アプリケーションはデータベースのデータの読み込み、変更、および追加を行うことができます。
アプリケーションは JDBC API を呼び出すことにより、データベースにアクセスします。JDBC ドライバはアプリケーションの JDBC 呼び出しをデータベースサーバーのプロトコルに変換します。
データベースへのアクセスが完了すると、アプリケーションは接続を終了します。
アプリケーションサーバーは接続を接続プールに返します。接続がプールに戻されると、次のアプリケーションがその接続を利用できるようになります。
データベースアクセスを設定するには、まずサポートされているデータベース製品をインストールする必要があります。Application Server がサポートするデータベース製品のリストについては、リリースノートを参照してください。次に、データベース製品の JDBC ドライバをインストールし、ドライバの JAR ファイルがドメインのサーバーインスタンスにアクセスできるようにする必要があります。次に、データベース、データベースの接続プール、および接続プールをポイントする JDBC リソースを作成します。
JDBC ドライバをインストールしたら、ドライバがアプリケーションの JDBC 呼び出しをデータベースサーバーのプロトコルに変換するように統合する必要があります。JDBC ドライバを管理ドメインに統合するには、次のどれかを実行します。
共通クラスローダーにアクセスできるドライバを作成する
ドライバの JAR および ZIP ファイルを domain-dir /lib ディレクトリにコピーするか、またはドライバのクラスファイルを domain-dir/lib/ext ディレクトリにコピーします。
ドメインを再起動します。
システムクラスローダーにアクセスできるドライバを作成する
管理コンソール で、目的の設定の JVM 設定を選択します。
ドライバの JAR ファイルの完全修飾パス名を識別します。
設定を保存して、サーバーを再起動します。
この機能は下位互換性のために必要です。Application Server のバージョン 7 で実行するには、コンテナ管理による持続性 Beans (EJB コンポーネントのタイプの 1 つ) を使用したアプリケーションの持続マネージャーリソースが必要でした。代わりに JDBC リソースを使用することをお勧めします。
管理コンソールを使用して、持続マネージャーリソースを作成するには、「リソース」ノード > 「持続マネージャー」ノード >「持続マネージャー」ページの順に選択します。コマンド行ユーティリティーを使用するには、create-persistence-resource コマンドを使用します。