データ・アクセス分離レベルの設定の要件
この項では、Enterprise JavaBeans (EJB) 2.x 以降のモジュールを構成するデータ・アクセス・コンポーネントの分離レベルを設定する基準と、 その影響について説明します。
EJB 1.1 のモジュールでは、メソッド・レベルまたは Bean レベルで 分離レベルを設定できます。この機能は、EJB 2.x のモジュール にアセンブルされる、 コンテナー管理パーシスタンス (CMP) 1.1 の Bean にも適用されます。 WebSphere® Application Server では、モジュール全体のバージョンに関係なく、CMP Bean のデプロイメント記述子でバージョン・レベル 1.1 を宣言することができます。
ただし、メソッド・レベルまたは Bean レベルで分離レベルを設定する機能は、 EJB 2.x モジュール内の他のエンタープライズ Bean (CMP 2.x Bean など) には適用されません。 WebSphere Application Server バージョン 5.0 では、 この機能を EJB 2.0 のモジュールから除去し、結果的に接続使用効率を高めた アーキテクチャーを実現しています。
- EJB メソッド・レベルや Bean レベルで分離レベルを指定することはできません。
- JDBC アプリケーション、Bean 管理パーシスタンス (BMP) Bean、またはサーブレットを、 グローバル・トランザクションに加わるように構成する場合、共有される接続はいずれも、 ユーザー指定の分離レベルを受け入れることはできません。WebSphere Application Server は、グローバル・トランザクション内で共有されていない接続にのみユーザー指定の分離レベルを設定できます。一般に、共有可能な接続では分離レベルの指定は行いません。
- 2.x CMP Bean で使用される接続での分離レベル
- EJB 2.x モジュールでは、CMP 2.x Bean が新規データ・ソースを使用して バックエンド・データベースにアクセスする場合、分離レベルは、 この Bean または呼び出しメソッドに割り当てられたアクセス・インテントのタイプに基づき、 WebSphere Application Server ランタイムによって決定されます。 その他の非 CMP 接続ユーザーも、この同じデータ・ソースにアクセスでき、 アクセス・インテントとアプリケーション・プロファイルのサポートを使用して、並行性制御を管理することができます。
- 他の 2.x エンタープライズ Bean および他の非 CMP コンポーネントで使用される接続
- 他のすべての JDBC 接続インスタンス (CMP Bean によって使用される接続を除く) では、データ・ソース・リソース参照で分離レベルを指定できます。
グローバル・トランザクションで実行される共有可能接続の場合は、
このメソッドが、接続の isolationLevel を設定する唯一の方法です。
グローバル・トランザクションで実行される共有可能接続で setTransactionIsolation() メソッドを介して、
分離レベルを直接に設定できません。
接続で異なる分離レベルを使用するには、
異なるリソース参照を提供する必要があります。
これらのデフォルトは、アセンブリー・ツールから設定します。
各リソース参照は、1 つの分離レベルに関連しています。 ユーザーのアプリケーションが、このリソース参照の Java™ Naming and Directory Interface (JNDI) 名を使用して データ・ソースを検索する場合、このリソース参照を使用してこのデータ・ソースから返されるすべての接続の分離レベルは同じです。
複数の分離レベルを持つ共有可能接続を使用する必要があるコンポーネントは、 各リソース参照に異なる JNDI 名を指定して、複数のリソース参照を作成することができます。 また、そのコードを使用して、必要とする分離レベルの該当するデータ・ソースを検索できます。 このようにして、異なる分離レベルが使用可能になっている別々の接続を使用します。
これらの複数のリソース参照を、同じ構成済みデータ・ソースにマップすることができます。 この接続は、引き続き基礎となる同じプールから得られますが、 接続マネージャーは、異なる分離レベルを持つリソース参照が要求する接続の共有を許可しません。次のシナリオを考えてみます。- データ・ソースは、jdbc/RRResRef および jdbc/RCResRef という 2 つのリソース参照にバインドされています。
- RRResRef には、RepeatableRead 分離レベルが定義されています。 RCResRef には、ReadCommitted 分離レベルが定義されています。
本製品では、非 CMP アプリケーション・モジュールの場合、 データ・ソース・リソース参照上で分離レベルを設定する必要はありません。 リソース参照に分離レベルを設定しない場合、または TRANSACTION_NONE を設定する場合、 WebSphere Application Server ランタイムはそのデータ・ソースのデフォルトの分離レベルを使用します。 アプリケーション・サーバーは、JDBC ドライバーに基づくデフォルト設定を使用します。
ほとんどのドライバーでは、WebSphere Application Server は TRANSACTION_REPEATABLE_READ をデフォルトの分離レベルとして使用します。ただし Oracle ドライバーでは、 TRANSACTION_READ_COMMITTED という分離レベルが使用されます。次の早見表を参照してください。
データベース: デフォルトの分離レベル: DB2® RR Oracle RC Sybase RR Informix® RR Apache Derby RR SQL Server RR 注: データ・ソースの JNDI 参照を直接行う場合も、これと同じデフォルト分離レベルが使用されます。- RR = JDBC 反復可能読み取り (TRANSACTION_REPEATABLE_READ)
- RC = JDBC 読み取りコミット (TRANSACTION_READ_COMMITTED)
デフォルトの分離レベルをカスタマイズする場合、データ・ソースの webSphereDefaultIsolationLevel カスタム・プロパティーを使用できます。 ほとんどの場合、EAR ファイルをパッケージする際にデプロイメント記述子で分離レベルを定義する必要があります。しかし、状況によっては、デフォルトの分離レベルのカスタマイズが必要になる場合があります。 上記のオプションのいずれかが使用される場合、このプロパティーは無効になります。そして、このカスタム・プロパティーは、分離レベルを設定する方法がほかにないシチュエーションのために提供されています。
webSphereDefaultIsolationLevel カスタム・プロパティーには、以下の値を使用します。
このカスタム・プロパティーをデータ・ソースに対して定義するには、以下のようにします。指定可能な値 JDBC 分離レベル DB2 分離レベル 8 TRANSACTION_SERIALIZABLE 反復可能読み取り (RR) 4 (デフォルト) TRANSACTION_REPEATABLE_READ 読み取り固定 (RS) 2 TRANSACTION_READ_COMMITTED カーソル固定 (CS) 1 TRANSACTION_READ_UNCOMMITTED コミットされていない読み取り (UR) 0
TRANSACTION_NONE コミットしない (NC) - をクリックします。
- 「追加プロパティー」セクションで「データ・ソース」をクリックします。
- データ・ソースの名前をクリックします。
- 「カスタム・プロパティー」をクリックします。
- webSphereDefaultIsolationLevel カスタム・プロパティーを作成します。
- 「新規」をクリックします。
- 「名前」フィールドに webSphereDefaultIsolationLevel と入力します。
- 「値」フィールドに、指定可能な値のいずれか 1 つを入力します。
- リソース参照分離レベル
- アクセス・インテント・ポリシーで指定された分離レベル
- 分離レベルを構成するカスタム・プロパティー
- Application Server のデフォルト設定