Oracle® Fusion Middleware Oracle WebLogic Server エンタープライズ JavaBeans (EJB) プログラマーズ ガイド 11g リリース 1 (10.3.1) B55528-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、WebLogic 固有の XML スキーマ ベース (XSD) デプロイメント記述子ファイル、weblogic-cmp-jar.xml
の EJB 2.1 の要素について説明します。これらの定義を使用して、EJB デプロイメントを構成する WebLogic 固有の weblogic-cmp-jar.xml
ファイルを作成します。このデプロイメント記述子ファイルを使用して、コンテナ管理による永続性 (CMP) の動作を指定します。
このリリースの WebLogic Server では、weblogic-cmp-jar.xml
は XML スキーマ (XSD) に基づいています。旧リリースでは、weblogic-cmp-jar.xml
は文書型定義 (DTD) に基づいていました。下位互換性を保持するために、このリリースの WebLogic Server は XSD ベースと DTD ベースの EJB 記述子をサポートしています。また、このリリースでは、EJB コンテナは従来の DTD ベースの記述子もすべてサポートしているので、DTD ベースのデプロイメント記述子を使用するアプリケーションも記述子を変更せずにデプロイできます。
EJB 1.1 デプロイメント記述子の要素については、「EJB 1.1 ユーザへの重要な情報」を参照してください。
詳細情報
weblogic-cmp-jar.xml
に必要な XML スキーマ定義とネームスペース宣言、および文書型定義と DOCTYPE ヘッダについては、「デプロイメント記述子スキーマおよび文書型定義リファレンス」を参照してください。
weblogic-ejb-jar.xml
ファイルについては、「weblogic-ejb-jar.xml デプロイメント記述子のリファレンス」を参照してください。
EJB 1.1 デプロイメント記述子の要素については、「EJB 1.1 ユーザへの重要な情報」を参照してください。
weblogic-cmp-jar.xml
ファイルは、WebLogic Server の RDBMS ベースの永続性サービスを使用するエンティティ EJB のデプロイメント記述子を定義します。EJB コンテナでは、9.0 より前のバージョンの WebLogic Server で提供されていた XML とは異なるバージョンの weblogic-cmp-jar.xml
を使用します。
旧バージョンの weblogic-cmp-jar.xml
DTD Bean も引き続きこのリリースの WebLogic Server にデプロイできます。同様に、WebLogic Server 8.1 でサポートされていた weblogic-cmp-jar.xml
DTD も引き続き使用できます。WebLogic Server 9.0 から、デプロイメント記述子は XSD ベースになりましたが、下位互換性を保持するために WebLogic Server は DTD ベースの記述子も引き続きサポートしています。ただし、CMP 2.1 の機能を使用する場合は、下記の XSD を使用する必要があります。
このリリースの WebLogic Server に対応させるため、DDConverter を実行して 9.0 より前のリリースの EJB デプロイメント記述子を変換することをお勧めします。DDConverter では、9.0 より前のリリースの WebLogic Server の DTD ベースの EJB デプロイメント記述子を、このリリースでサポートされている XSD ベースの記述子に変換します。
注意 : アプリケーションを新しい WebLogic Server リリースに移行するときには、必ず記述子を変換することをお勧めします。 |
WebLogic Server の weblogic-cmp-jar.xml
の最上位要素は、weblogic-rdbms-jar
要素で構成されます。
weblogic-rdbms-jar weblogic-rdbms-bean ejb-name data-source-jndi-name table-map field-group relationship-caching sql-shape weblogic-query delay-database-insert-until use-select-for-update lock-order instance-lock-order automatic-key-generation check-exists-on-method cluster-invalidation-disabled weblogic-rdbms-relation relation-name table-name weblogic-relationship-role order-database-operations enable-batch-operations create-default-dbms-tables validate-db-schema-with database-type default-dbms-tables-ddl compatibility serialize-byte-array-to-oracle-blob serialize-char-array-to-bytes allow-readonly-create-and-remove disable-string-trimming
以下の weblogic-cmp-jar.xml
要素のリストには、このリリースの WebLogic Server でサポートされているすべての要素が含まれています。
指定できる値 : true | false
デフォルト値 : false
親要素 :
weblogic-rdbms-jar compatibility
WebLogic Server 8.1 SP02 で導入されたこの要素は、下位互換性のフラグです。ReadOnly
同時方式を使用する EJB で作成と削除を有効にするために使用します。
WebLogic Server 8.1 SP2 より前は、それらの処理は許可されていました (ただしトランザクションとしての意味はなかった)。ReadOnly
Bean でより効率的なコードを生成できるように、また、それらを使用するのがプラクティスとして良くないという理由から、作成と削除は許可されなくなっています。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean
以下のサンプル コードは、さまざまな主キー生成方法の automatic-key-generation
要素を示しています。サポートされている生成方法については、「generator-type」を参照してください。
コード リスト C -1 generator-type=Oracle の automatic-key-generation
<automatic-key-generation> <generator-type>Oracle</generator-type> <generator-name>test_sequence</generator-name> <key-cache-size>10</key-cache-size> </automatic-key-generation>
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean relationship-caching
関連する Bean で cmr-field
と group-name
を指定します。group-name
を指定しなかった場合、デフォルトの group-name
(全フィールドをロード) が使用されます。詳細については、「group-name」を参照してください。
caching-element
では、relationship-caching の例のようにネストされたキャッシュ要素を格納できます。
リレーションシップ キャッシングについては、「リレーションシップ キャッシング」を参照してください。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean relationship-caching
指定できる値 : True | False
デフォルト値 : True
親要素 :
weblogic-rdbms-bean
デフォルトでは、EJB コンテナはコンテナ管理による永続性 (CMP) エンティティ Bean の有無を、Bean 上で呼び出されたビジネス メソッドが完了する前にチェックします。これは、削除されたコンテナ管理のエンティティ Bean 上で何らかのビジネス メソッドが呼び出されると、直ちにコンテナがアプリケーションに対して通知を行うことを意味します。
EJB コンテナが、存在するかどうかのチェックをする前にトランザクションの完了を待機するように指定するには、check-exists-on-method
を False
に設定します。これにより、大半のアプリケーションで高いパフォーマンスを実現しつつ、十分なレベルのチェックが提供されます。
指定できる値 : true | false
デフォルト値 : false
親要素 :
weblogic-rdbms-bean
WebLogic Server 9.0 で採用されたこのフラグは、Optimistic
または ReadOnly
同時方式を使用する EJB がデプロイ先のクラスタのメンバーによって更新されたときにその EJB を無効化するかどうかを指定するために使用します。詳細については、「クラスタ内のオプティミスティックな同時方式の無効化オプション」を参照してください。
指定できる値 : Bean のフィールドの有効な名前。フィールドは、ejb-jar.xml
内に対応する cmp-entry
エントリが必要。フィールド名は大文字と小文字が区別される。
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean field-map
および
weblogic-rdbms-relation field-group
指定できる値 : Bean のフィールドの有効な名前。フィールドは、ejb-jar.xml
に対応する cmr-field
エントリが必要。
デフォルト値 : なし
親要素 :
weblogic-rdbms-relation field-group
および
relationship-caching caching-element
指定できる値 : なし
デフォルト値 : なし
親要素 :
<weblogic-rdbms-relation> <weblogic-relationship-role> <relationship-role-map>
この要素は、データベース内のテーブルの外部キー カラムと対応する主キーのマッピングを表します。2 つのカラムは同じテーブルにある場合も別のテーブルにある場合もあります。カラムが属しているテーブルは、column-map
要素がデプロイメント記述子に表示されるコンテキストに対しては暗黙的です。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar
WebLogic Server 8.1 SP02 で導入された <compatibility>
要素では、記述子ファイルで記述されているすべての cmp Bean の互換性フラグを指定する要素を設定します。
<compatibility> <serialize-byte-array-to-oracle-blob>...</serialize-byte-array-to-oracle-blob> <serialize-char-array-to-bytes>...</serialize-char-array-to-bytes> <allow-readonly-create-and-remove>...</allow-readonly-create-and-remove> <disable-string-trimming>...</disable-string-trimming> </compatibility>
指定できる値 : Disabled | CreateOnly | DropAndCreate | DropAndCreateAlways | AlterOrCreate
デフォルト値 : Disabled
親要素 :
weblogic-rdbms-jar
create-default-dbms-tables
要素は、以下の 2 つの機能を実行します。
基底のテーブル スキーマが変更されたときに、WebLogic Server がデプロイメント ファイルおよび Bean クラスの記述に基づいて自動的にデフォルト テーブルを作成するかどうか、またはどのように作成するのかを決める
WebLogic Server が Oracle データベースの SEQUENCE を自動的に作成するかどうか、またはどのように作成するのかを決める
この要素は、開発段階で役立つ場合にのみ使用します。使用する DBMS CREATE
文のテーブル スキーマがコンテナの最適な定義になります。プロダクション環境では通常、より正確なスキーマ定義が必要です。
次の表は、WebLogic Server が create-default-dbms-tables
の値に基づいてどのように自動テーブル作成を処理するのかを説明しています。
表 C-1 自動テーブル作成
<create-default-dbms-tables> の設定値 | 自動テーブル作成に関連する動作 |
---|---|
|
EJB コンテナは自動テーブル作成に関して何も行わない。これがデフォルト値である。 |
|
EJB コンテナは、スキーマの変更を検出すると自動的にテーブルを生成する。 コンテナは、デプロイメント ファイルおよび Bean クラス内の情報に基づいてテーブルを作成しようとする。テーブル作成が失敗した場合は、「 |
|
EJB コンテナは、スキーマの変更を検出すると自動的にテーブルを生成する。 コンテナは、カラムが変更されている場合はデプロイメント時にテーブルを削除してから再作成する。コンテナはデータを保存しない。 カラム タイプと cmp フィールド タイプの間に互換性があることを確認する必要がある。EJB コンテナは、カラム タイプと cmp フィールド タイプの間に互換性があることを確認しない。 |
|
EJB コンテナは、スキーマの変更を検出すると自動的にテーブルを生成する。 コンテナは、カラムが変更されているかどうかに関係なくデプロイメント時にテーブルを削除してから作成する。コンテナはデータを保存しない。 |
|
EJB コンテナは、スキーマの変更を検出すると自動的にテーブルを生成する。 コンテナは、まだ存在していない場合はテーブルを作成する。テーブルが存在する場合、コンテナはテーブル スキーマを変更する。データは保存される。 注意 : 新しいカラムが主キーとして指定されているか、値が null のカラムが新しい主キー カラムとして指定されている場合には、この設定を選択しないこと。 |
TABLE CREATION
が失敗した場合、サーバは Table Not Found
エラーを送出するので、テーブルを手動で作成しなければなりません。
「自動テーブル作成 (開発のみ)」を参照してください。
注意 : Oracle データベースの SEQUENCE の自動生成は、開発モードで動作しているサーバでのみ機能します。 |
次の表は、WebLogic Server が create-default-dbms-tables
の値に基づいてどのように自動 SEQUENCE 生成を処理するのかを説明しています。
表 C-2 Oracle データベースの SEQUENCE の自動生成
<create-default-dbms-tables> の設定値 | 得られる動作 |
---|---|
|
EJB コンテナは SEQUENCE 生成に関して何も行わない。これがデフォルト値である。 |
|
EJB コンテナは |
|
EJB コンテナは
|
|
EJB コンテナは SEQUENCE を作成し、
|
|
EJB コンテナは
|
Oracle データベースの SEQUENCE の自動生成の詳細については、「Oracle データベースの SEQUENCE のサポート」を参照してください。
指定できる値 : なし
デフォルト値 : なし
要件 : database-type
の指定が必要
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query sql-query
指定できる値 : DB2 | Informix | MySQL | Oracle | POINTBASE | SQLServer | SQLServer2000 | Sybase
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar
および
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-quer sql-query database-specific-sql
database-type
要素では、基底 WebLogic Server DBMS またはベンダ固有の SQL 文の実行対象となる DBMS として使用するデータベースを指定します。weblogic-rdbms-jar
要素で database-type
を指定した場合、指定したデータベースは、database-specific-sql
要素の別の database-type
要素によってオーバーライドされない限り、weblogic-rdbms-jar
デプロイメント記述子ファイル全体に適用されます。
指定できる値 : 有効な WebLogic Server JDBC データ ソース名
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean
この Bean のデータベース接続で使用する JDBC データ ソース名を指定します。データ ソースの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JDBC プログラマーズ ガイド』を参照してください。
注意 : WebLogic Server 9.0 より前では、この要素は data-source-name でした。 |
指定できる値 : なし
デフォルト値 : デフォルトでは、データベースのカスケード削除は使用されない。EJB コンテナは、個別に SQL DELETE
を発行してカスケード削除を実行する。
親要素 :
weblogic-rdbms-bean weblogic-relationship-role
アプリケーションが、データベースに組み込まれているカスケード削除のサポートを利用し、パフォーマンスが向上するようにします。この機能は、以下の場合にのみサポートされます。
Oracle データベース
1 対 1 または 1 対多の関係
weblogic-cmp-rdbms-jar.xml
で db-cascade-delete
が有効になっている場合は、以下のようにする必要があります。
ejb-jar.xml
で cascade-delete
を有効にする
データベースのテーブル定義でカスケード削除を有効にする
注意 : db-cascade-delete を指定しない場合は、データベースのカスケード削除機能を有効にしないようにしてください (結果が不正確になる)。 |
次の Oracle データベースのテーブル定義では、データベースで親の dept
が削除されると emp
行がすべて削除されます。
CREATE TABLE dept (deptno NUMBER(2) CONSTRAINT pk_dept PRIMARY KEY, dname VARCHAR2(9) ); CREATE TABLE emp (empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(10), deptno NUMBER(2) CONSTRAINT fk_deptno REFERENCES dept(deptno) ON DELETE CASCADE );
指定できる値 : Blob | Clob | LongString | SybaseBinary
デフォルト値 : なし
要件 : Blob
または Clob
を指定するには、dbms-default-value
を Oracle
または DB2
データベースに設定する必要がある
親要素 :
weblogic-rdbms-bean field-map
cmp-field
の型を指定します。現在のフィールドを Oracle または DB2 データベース内の Blob
または Clob
、または Sybase データベース内の LongString
または SybaseBinary
にマップします。
Blob
- フィールドを Oracle または DB2 データベースの Blob にマップする。
Clob
- フィールドを Oracle または DB2 データベースの Clob にマップする。
LongString
- setCharacterStream
を使用して文字列データをデータベースに書き込むようにコンテナに通知する。一部の JDBC ドライバでは、4KB を超えるデータを setString
で書き込むことに問題がある。
SybaseBinary
- setBytes
を使用してバイトをバイナリ カラムに書き込むようにコンテナに通知する (setBinaryStream
が SybaseXADriver
では機能しないため)。
指定できる値 : DB2 | Informix | MySQL | Oracle | POINTBASE | SQLServer | SQLServer2000 | Sybase
デフォルト値 :
親要素 :
weblogic-rdbms-bean field-map
指定できる値 : ejbCreate | ejbPostCreate
デフォルト値 : ejbPostCreate
要件 :
親要素 :
weblogic-rdbms-bean
新しい CMP Bean がいつデータベースに挿入されるのかを指定します。指定可能な値で、以下の動作が行われます。
ejbCreate
- ejbCreate
の直後にデータベースの挿入を実行する。この設定の場合は、不要な格納操作を避けることで ejbCreate
よりもパフォーマンスが良くなる。
ejbPostCreate
- ejbPostCreate
の直後に挿入を実行する。
この要素は、order-database-operations
が False
の場合のみ有効です。デフォルトでは、order-database-operations
は true
です。デフォルトの場合は、トランザクションがコミットされたときに新しい Bean が挿入されます。
cmr-field
が null 値を許可しない foreign-key
カラムにマップされている場合、データベースの挿入は ejbPostCreate
の後まで遅延する必要があります。この場合、cmr-field
を ejbPostCreate
で null 以外の値に設定してから Bean をデータベースに挿入しなければなりません。
最大限の柔軟性を実現するため、関連 Bean を ejbPostCreate
メソッドで作成することは避けてください。ejbPostCreate
で関連 Bean が作成され、データベースの制約によって関連 Bean が未作成の Bean を参照できない場合は、メソッドが完了するまでデータベースの挿入は実行できません。
注意 : cmr-field は、Bean の主キーが不明な段階で ejbCreate の中で設定することはできません。 |
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query
または
weblogic-rdbms-jar weblogic-rdbms-bean sql-shape
指定できる値 : True | False
デフォルト値 : False
親要素 :
compatibility
この要素は、WebLogic Server 9.0 で導入された互換性フラグです。この要素では、String[]
型の cmp-field
を削除するかどうかを指定します。True
に設定すると、文字列の削除が無効になります。文字列の削除の詳細については、「文字列値 CMP フィールドの削除」および「文字列の削除を無効にする」を参照してください。
指定できる値 : ejb-jar.xml
で定義した CMP エンティティ Bean の ejb-name
に一致していること。
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean
ejb-cmp-rdbms.xml
で定義した EJB を指定する名前です。この名前は、ejb-jar.xml
で定義した CMP エンティティ Bean の ejb-name
に一致している必要があります。
指定できる値 :
デフォルト値 :
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query
ejb-ql-query
要素では、EJB-QL クエリを指定します。weblogic-cmp-jar.xml
デプロイメント記述子では、EJB ファインダを実装しているか、または WebLogic 固有の拡張を備えている EJB-QL だけを指定します。標準 EJB-QL 機能だけを使用するクエリは ejb-jar.xml
デプロイメント記述子で指定します。
指定できる値 : True | False
デフォルト値 : True
親要素 :
weblogic-rdbms-jar
WebLogic Server 8.1 で導入されたこの要素は、EJB コンテナがデータベースのバッチ処理を許可するのかどうかを管理します (バッチ挿入、バッチ更新、およびバッチ削除を含む)。
この要素を True
に設定すると、EJB はトランザクション中のデータベース処理をコミット時間まで遅延させます。
指定できる値 : True | False
デフォルト値 : True
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query
または
weblogic-rdbms-jar weblogic-rdbms-relation
WebLogic Server 9.0 で導入された要素で、読み込み専用エンティティ EJB をクエリ レベルでキャッシュするかどうかを指定します。読み込み専用エンティティ Bean をクエリ レベルでキャッシュすると、パフォーマンスが向上します。これは、ファインダがキャッシュ内の EJB にアクセスできるようになり、データベースへのアクセスを回避できるからです。この値を True
に設定した場合、アプリケーションまたは Bean レベルでキャッシュされるクエリの最大数を指定できます。キャッシュされるクエリの最大数を指定するには、weblogic-ejb-jar.xml
デプロイメント記述子の max-queries-in-cache
を設定します。詳細については、「max-queries-in-cache」を参照してください。
指定できる値 : なし
デフォルト値 : field-group
が指定されていないファインダと関係に対して、default
という特殊なグループを使用する。デフォルト グループには、Bean の cmp-field がすべて含まれるが、cmr-field は含まれない。
親要素 :
weblogic-rdbms-relation
field-group
要素は、Bean の cmp-field
と cmr-field
のサブセットを表します。Bean 内の関連フィールドを、障害のあったグループに 1 つのユニットとしてまとめることができます。グループをファインダまたは関係に関連付けることができます。それによって、ファインダを実行するか、または関係に従った結果として Bean がロードされたときに、グループ内の指定フィールドのみがロードされます。
フィールドは複数のグループに関連付けられている場合があります。この場合、フィールドに対して getXXX
メソッドを実行すると、そのフィールドを含む最初のグループで障害が発生します。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean
field-map
要素は、データベースの特定のカラムと Bean インスタンスの cmp-field
の間のマッピングを表します。
任意指定の group-name
要素は、cmp-field
の getXXX
メソッドが呼び出され、値がメモリにないために、EJB コンテナが DBMS から値を読み込む必要がある場合にロードされるフィールド グループを指定します。group-name
を省略すると、cmp-field
がどのフィールド グループでも明示的にリストされていない場合はデフォルト グループ (すべての cmp-field
が含まれている) が使用されます。明示的にリストされている場合には、cmp-field
のあるフィールド グループが選択されます。したがって、cmp-field
が複数のフィールド グループでリストされている場合、またはコンテナがグループのいずれかを任意に選択する場合、開発者は group-name
を指定する必要があります。
dbms-column-type
要素は任意で指定します。
指定できる値 : True | False
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar compatibility weblogic-query
指定できる値 : 有効なデータベース テーブル名
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-relation weblogic-relationship-role relationship-role-map
指定できる値 :
デフォルト値 :
親要素 :
weblogic-rdbms-bean automatic-key-generation
generator-name
要素は、主キー ジェネレータの名前を指定する場合に使用します。
generator-type
要素が Oracle
で、WebLogic Server が開発モードで動作している場合、EJB コンテナは自動 SEQUENCE 生成機能の過程で generator-name
に「_WL」を追加してその Oracle データベースの SEQUENCE の名前を作成する。
Oracle データベースの SEQUENCE の自動生成の詳細については、「Oracle データベースの SEQUENCE のサポート」を参照してください。
generator-type
要素が Oracle
で、WebLogic Server がプロダクション モードで動作している場合、EJB コンテナは Oracle データベースの SEQUENCE の名前を generator-name
の値に設定する。
generator-type
要素が NamedSequenceTable
の場合、generator-name
要素は使用される SEQUENCE_TABLE
の名前になる。
指定できる値 : Identity | Sequence | SequenceTable
デフォルト値 :
親要素 :
weblogic-rdbms-bean automatic-key-generation
generator-type
要素は、使用する主キー生成方法を指定します。
注意 : automatic-key-generation を使用する際は、database-type 要素を設定する必要があります。 |
また、generator-type
は Oracle データベースの SEQUENCE の自動生成でも使用します。「Oracle データベースの SEQUENCE のサポート」を参照してください。
各 generator-type
に対しては、次のデータベースがサポートされています。
Identity
: Oracle データベースはサポートされない。
Sequence
: Oracle、DB2、および Informix (バージョン 9.2 以降) データベースがサポートされる。
SequenceTable
: すべてのデータベースがサポートされる。
指定できる値 : なし
デフォルト値 :
field-group
および
caching-element
および
weblogic-query
および
field-map
および
weblogic-relationship-role
親要素 :
weblogic-rdbms-relation field-group
指定できる値 : True | False
デフォルト値 : Optimistic 同時方式を使用する Bean では False
他の同時方式を使用する Bean では True
親要素 :
weblogic-rdbms-bean weblogic-query
現在のトランザクション中の更新を必ずクエリの結果に反映するかどうかを指定します。この要素を True
に設定した場合、コンテナは現在のトランザクションによる変更をすべてディスクにフラッシュしてからクエリを実行します。値を False
にすると、最高のパフォーマンスが得られます。
<weblogic-query> <query-method> <method-name>findBigAccounts</method-name> <method-params> <method-param>double</method-param> </method-params> </query-method> <ejb-ql-query> <weblogic-ql>WHERE BALANCE>10000 ORDER BY NAME</weblogic-ql> </ejb-ql-query> <include-updates>True</include-updates> </weblogic-query>
指定できる値 : AccessOrder | ValueOrder
デフォルト値 : AccessOrder
親要素 :
weblogic-rdbms-bean
特定 EJB のインスタンスのロックまたは処理順序を指定します。この要素は、この要素を使用しなければデッドロックが起こるアプリケーションでデッドロックを防止するために使用できます。instance-lock-order
は、同じ EJB の複数のインスタンスに適用されるデータベース操作 (更新など) がコンテナによって実行される場合に常に使用します。この要素は、Bean インスタンスでデータベース ロックを取得させる操作の順序を指定します。
たとえば、instance-lock-order
を使用すると、Database 同時方式を使用する特定の EJB インスタンスで EJB コンテナが ejbStore
を呼び出す順序を指定できます。ejbStore
は、データベースが更新されるときに排他的ロックを取得できます。instance-lock-order
は、Optimistic 同時方式を使用する Bean がオプティミスティック チェックの実行時にロックされる順序も制御します。
AccessOrder
- コンテナは、トランザクションの過程でアプリケーションが Bean にアクセスした順序でロックが取得 (またはアップグレード) されるように Bean を処理する。これは、システムのすべてのトランザクションが Bean のインスタンス (最終的にはデータベース テーブルの行) に同じ順序でアクセスする場合の推奨値です。
ValueOrder
- Bean は、主キーの値に基づく順序で処理される。複数の同時トランザクションが異なる順序で同じ EJB のインスタンスにアクセスする場合のデッドロックを防止するために、ValueOrder
を指定する必要があります。
注意 : ValueOrder が指定されている場合、EJB の主キー クラスは java.lang.Comparable インタフェースを実装する必要がありません (ただし、全体的な順序付けになる)。主キーが java.lang.Comparable を実装しない場合、Bean は主キーのハッシュ コード値を使用して部分的に順序付けされます。 |
指定できる値 :
デフォルト値 : 1
親要素 :
weblogic-rdbms-bean automatic-key-generation
自動主キー生成機能で利用可能な主キー キャッシュのサイズをオプションとして指定します。また、EJB コンテナは自動 SEQUENCE 生成が有効なときにはこの値を使用して Oracle データベースの SEQUENCE のインクリメント値を計算します。「Oracle データベースの SEQUENCE のサポート」を参照してください。
generator-type
の値が、
Oracle
である場合、key-cache-size
は Oracle データベースの SEQUENCE INCREMENT 値と一致していなければならない。この値と Oracle データベースの SEQUENCE INCREMENT 値が一致していない場合は、キー重複の問題が起こります。
NamedSequenceTable
である場合、key-cache-size
は 1 回の DBMS 呼び出しでコンテナが取得するキーの数を指定する。
SQLServer である場合、key-cache-size
は無視される。
指定できる値 : すべての正の整数
デフォルト値 : 0
親要素 :
weblogic-rdbms-bean
このフラグを使用すると、トランザクションに複数の Bean および排他的同時実行性が関与する場合に、エンティティ Bean のデータベース ロックの順番を指定できます。最も小さい数値を付けられた Bean が最初にロックされます。
このフラグは、デッドロック状況を回避するためのみに使用します。現時点では、トランザクションがカスケード削除を実行する場合にのみ適用されます。
指定できる値 : 有効なデータベース カラム名
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean table-map
optimistic-column
要素は、オプティミスティックな同時実行性を実装するためのバージョン値またはタイムスタンプ値を格納するデータベース カラムを示します。オプティミスティックな同時実行性の詳細については、「同時方式の選択」を参照してください。
注意 : すべてのデータベースで大文字と小文字が区別されるわけではありませんが、この要素では、大文字と小文字を区別します。 |
指定できる値 : True | False
デフォルト値 : True
親要素 :
weblogic-rdbms-jar
WebLogic Server 8.1 で導入されたこの要素は、EJB コンテナが、トランザクション内のすべてのデータベース処理をコミット時間まで遅延し、処理間でのデータベースの依存関係を自動的にソートし、これらの処理を、一切のデータベース制約エラーが生じない方式でデータベースに送るかどうかを決定します。
enable-batch-operations
が True
の場合、コンテナは自動的に order-database-operations
を True
に設定します。order-database-operations
を無効にするには、order-database-operations
と enable-batch-operations
の両方を False
に設定します。
「ejb-ql-query
」と「delay-database-insert-until
」も参照してください。
指定できる値 : 有効なデータベース テーブル名
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-relation weblogic-relationship-role relationship-role-map
primary-key-table
要素は、主キーを格納する DBMS テーブル名を指定します。主キーの詳細については、「主キーの使用」を参照してください。
注意 : すべてのデータベースで大文字と小文字が区別されるわけではありませんが、この要素では、大文字と小文字を区別します。 |
指定できる値 : 関連する ejb-jar.xml
デプロイメント記述子ファイルで定義した ejb-relation
の ejb-relation-name
に一致していること。ejb-relation-name
は省略可能な要素だが、関連する ejb-jar.xml
デプロイメント記述子ファイルで定義した ejb-relation ごとに必要になる。
デフォルト値 : なし
親要素 :
weblogic-rdbms-relation
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean
relationship-caching
要素では、リレーションシップ キャッシングを指定します。リレーションシップ キャッシングについては、「リレーションシップ キャッシング」を参照してください。
relationship-caching
要素には、以下の要素を指定できます。
<relationship-caching> <caching-name>cacheMoreBeans</caching-name> <caching-element> <cmr-field>accounts<</cmr-field> <group-name>acct_group</group-name> <caching-element> <cmr-field>address</cmr-field> <group-name>addr_group</group-name> </caching-element> </caching-element> <caching-element> <cmr-field>phone</cmr-field> <group-name>phone_group</group-name> </caching-element> </relationship-caching>
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-relation weblogic-relationship-role
relationship-role-map
要素は、ある関係に加わっている Bean のキーカラム マッピングに対する外部キー カラムを指定します。
関係の中で呼び出される CMP Bean は、複数の DBMS テーブルにマップできます (詳細については、table-map
要素を参照)。1 対 1 または 1 対多の関係の外部キー側の Bean が複数のテーブルにマップされている場合は、外部キー カラムが含まれるテーブルの名前を foreign-key-table
要素で指定する必要があります。
逆に、1 対 1 または 1 対多の関係の主キー側の Bean または多対多の関係に参加している Bean が複数のテーブルにマップされている場合は、主キーが含まれるテーブルの名前を primary-key-table
要素で指定する必要があります。
関係のどちら側の Bean も複数のテーブルにマップされていない場合、foreign-key-table
要素と primary-key-table
要素は省略可能です (使用されるテーブルが暗黙的であるため)。
コンテナ管理による関係の詳細については、「コンテナ管理による関係 (CMR) の使用」を参照してください。
1 対 1 の関係の外部キー側の Bean (Fk_Bean
) は、複数のテーブルにマップされます。外部キー カラムを持つテーブルは、foreign-key-table
要素で指定する必要があります。
Fk_Bean
は、2 つのテーブル Fk_BeanTable_1
と Fk_BeanTable_2
にマップされます。関係の外部キー カラムは、テーブル Fk_BeanTable_2
にあります。外部キー カラムの名前は、Fk_column_1
と Fk_column_2
です。主キー側の Bean (Pk_Bean
) は、主キー カラム Pk_table_pkColumn_1
と Pk_table_pkColumn_2
を持つ 1 つのテーブルにマップされています。
<relationship-role-map <foreign-key-table>Fk_BeanTable_2</foreign-key-table> <column-map> <foreign-key-column>Fk_column_1</foreign-key-column> <key-column>Pk_table_pkColumn_1</key-column> </column-map> <column-map> <foreign-key-column>Fk_column_2</foreign-key-column> <key-column>Pk_table_pkColumn_2</key-column> </column-map> </relationship-role-map>
外部キー カラムのあるテーブルをコンテナが確認できるように、foreign-key-table
要素は必ず指定します。
1 対 1 の関係の主キー側の Bean (Pk_bean
) は複数のテーブルにマップされますが、その関係の外部キー側の Bean (Fk_Bean
) は 1 つのテーブル Fk_BeanTable
にマップされます。外部キー カラムの名前は、Fk_column_1
と Fk_column_2
です。
Pk_bean
は、以下のテーブルにマップされます。
Pk_BeanTable_1
。主キー カラムは、Pk_table1_pkColumn_1
と Pk_table1_pkColumn_2
。
Pk_BeanTable_2
。主キー カラムは、Pk_table2_pkColumn_1
と Pk_table2_pkColumn_2
。
<relationship-role-map> <primary-key-table>Pk_BeanTable_1</primary-key-table> <column-map> <foreign-key-column>Fk_column_1</foreign-key-column> <key-column>Pk_table1_pkColumn_1</key-column> </column-map> <column-map> <foreign-key-column>Fk_column_2</foreign-key-column> <key-column>Pk_table1_pkColumn_2</key-column> </column-map> </relationship-role-map>
指定できる値 :関連する ejb-jar.xml
で定義した ejb-relationship-role
の ejb-relationship-role-name
に一致していること。
デフォルト値 : なし
親要素 :
weblogic-rdbms-relation weblogic-relationship-role
指定できる値 : True | False
デフォルト値 : False
親要素 :
weblogic-rdbms-jar compatibility
WebLogic Server 8.1 SP02 で導入されたこの要素は、互換性フラグです。この要素では、Oracle データベース内の Blob にマップされた byte[]
型の cmp-field
をシリアライズするかどうかを指定します。デフォルトでは、このフラグの値は false
です。つまり、コンテナは byte[]
を直接保持し、シリアライズしません。
WebLogic Server 8.1 SP02 より前のバージョンでは、デフォルトによって、Oracle データベース内の Blob にマップされた byte[]
型の cmp-field
はシリアライズされました。旧式の動作に戻るには、erialize-byte-array-to-oracle-blob
の値を true に設定します。
指定できる値 :True
| False
デフォルト値 : False
親要素 :
weblogic-rdbms-jar compatibility
この要素は、WebLogic Server 9.0 で導入された互換性フラグです。この要素では、char[]
型の cmp-field
をシリアライズするかどうかを指定します。デフォルトでは、このフラグの値は False
です。つまり、EJB コンテナは char[]
を直接保持し、シリアライズしません。char[]
をシリアライズするには、この値を True
に設定します。
指定できる値 : 有効な SQL
デフォルト値 : なし
要件 : データベース固有の SQL を使用するには、その対象となるデータベースを database-type 要素で指定する必要がある
親要素 :
weblogic-rdbms-bean weblogic-query sql-query
および
weblogic-rdbms-bean weblogic-query sql-query database-specific-query
sql
要素には、標準またはデータベース固有の SQL クエリを指定します。EJB-QL 言語の標準機能だけを使用するクエリは、ejb-jar.xml
デプロイメント記述子に指定しなければなりません。標準 SQL、データベース固有の SQL、または EJB-QL の WebLogic 拡張を使用するクエリは、weblogic-cmp-jar.xml
デプロイメント記述子に指定します。
指定できる値 :
デフォルト値 : なし
要件 : データベース固有の SQL を使用するには、その対象となるデータベースを database-type
で指定する必要がある
親要素 :
weblogic-rdbms-bean weblogic-query
sql-query
要素では、標準およびデータベース固有の SQL クエリを指定できます。EJB-QL の WebLogic の拡張機能を使用しない EJB-QL クエリは、ejb-jar.xml
デプロイメント記述子に指定する必要があります。
WebLogic Server 9.0 より前のリリースでは EJB-QL クエリ (WebLogic 拡張あり、なし) だけがサポートされていましたが、このリリースでは SQL クエリ、EJB-QL クエリ (WebLogic 拡張あり、なし)、またはこの 2 つの組み合わせがサポートされています。
指定できる値 : True | False
デフォルト値 : False
親要素 :
weblogic-query
注意 : この要素は非推奨です。同じ機能を得るには、ファインダ クエリでSELECT DISTINCT 句を直接使用してください。 |
sql-select-distinct
要素は、生成される SQL SELECT 文に DISTINCT 修飾子が含まれるかどうかを指定します。DISTINCT 修飾子を使用すると、データベースからユニークな行が返されます。
Oracle データベースでは、FOR UPDATE
句を SELECT DISTINCT
と一緒に使用することはできません。したがって、呼び出しチェーンの Bean に isolation-level
が TransactionReadCommittedForUpdate
のメソッドがある場合は、sql-select-distinct
要素を使用できません。transaction-isolation
要素は weblogic-ejb-jar.xml
で指定します。
指定できる値 :
デフォルト値 :
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean sql-query
sql-shape
要素では、SQL クエリによって返されるデータを指定します。この情報は常にデータベース側で提供されるわけではないので、sql-shape の指定が必要になります。通常、sql-shape 要素では返されるデータベースのテーブルとカラムを指定します。より複雑なクエリの場合、sql-shape では、データベースによって返されるデータに存在する関係と、渡される必要がある (マップされてはならない) 集合カラムが存在するかどうかも指定します。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query sql-query sql-shape
sql-shape-name
要素を使用すると、sql-shape
を複数のクエリに関連付けることができます。同じ sql-shape
を使用するクエリが複数存在する場合、その形式をいったん定義すれば、sql-shape-name
を参照することによって何度でも使用できます。
指定できる値 : なし
デフォルト値 : なし
要件 : 各 table-map
要素に、その Bean の主キー フィールドのマッピングが含まれること。
親要素 :
weblogic-rdbms-bean
CMP Bean は、1 つまたは複数の DBMS テーブルにマップできます。table-map
要素は、Bean の cmp-field
と、テーブルにマップされたすべての cmp-field
のテーブル カラムの間のマッピングを指定します。CMP Bean を複数の DBMS テーブルにマップする場合は、テーブルごとに table-map
要素を指定する必要があります。
1 つの CMP Bean を複数のテーブルにマップする場合、各テーブルには、1 つの特定の Bean インスタンスにマップする 1 行が含まれます。そのため、すべてのテーブルにはどの時点でも同数の行が含まれます。また、各テーブルには均一の主キーの値の並びが含まれます。したがって、各テーブルには均一の主キー カラムが含まれ、別々のテーブルの対応している主キー カラムどうしは名前は違うとしても同じタイプでなければなりません。
table-map
要素は、特定テーブルの主キー カラムから、Bean の主キー カラム フィールドへのマッピングを指定しなければなりません。主キー以外のフィールドは 1 つのテーブルにマップできるのみです。
verify-rows
、verify-columns
、および optimistic-column
要素の使い方については、「Optimistic 同時方式でのデータ有効性のチェック」を参照してください。
table-map
要素には、以下の要素を指定できます。
<table-map> <table-name>DeptTable</table-name> <field-map> <cmp-field>deptId1</cmp-field> <dbms-column>t1_deptId1_column</dbms-column> </field-map> <field-map> <cmp-field>deptId2</cmp-field> <dbms-column>t1_deptId2_column</dbms-column> </field-map> <field-map> <cmp-field>location</cmp-field> <dbms-column>location_column</dbms-column> </field-map> <cmp-field>budget</cmp-field> <dbms-column>budget</dbms-column> </field-map> <verify-rows>Read</verify-rows> <verify-columns>Version</verify-columns> <optimistic-column>ROW_VERSION</optimistic-column> <trigger-updates-optimistic-column>False </trigger-updates-optimistic-column> <version-column-initial-value>0</version-column-initial-value> </table-map>
指定できる値 : データベース内にあるソース テーブルの有効な完全修飾 SQL 名
デフォルト値 :
要件 : table-name
を必ず設定すること。
親要素 :
weblogic-rdbms-bean weblogic-rdbms-relation
テーブルの完全修飾 SQL 名です。この Bean の data-source
用に定義したユーザには、指定したテーブルの読み取りおよび書き込み特権が必要ですが、スキーマ変更特権は必要ありません。
指定できる値 :True
| False
デフォルト値 : False
親要素 :
weblogic-rdbms-bean table-map
WebLogic Server 9.0 で導入された trigger-updates-optimistic-column
要素は、同時方式のチェックに使用される optimistic-column
で指定されたデータベース カラム値を EJB コンテナが自動更新するかどうかを指定します。trigger-updates-optimistic-column
のデフォルト値は False
で、EJB コンテナは JDBC に SQL UPDATE
文を送信するときに optimistic-column
で指定されたデータベース カラムを自動更新します。データベース行の更新時にデータベース トリガを使用してバージョン値を更新する従来のアプリケーションが存在し、EJB コンテナによってバージョン値が自動更新されないようにする場合、この要素の値を True
に設定します。
注意 : trigger-updates-optimistic-column を True に設定した場合、Bean の作成時にデータベース トリガによってデータベース内のバージョン カラムが初期化されるようにしておく必要があります。 |
指定できる値 : 有効なデータ型
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean
unknown-primary-key-field
要素では、主キーが ejb-jar.xml
記述子で指定されていない場合に主キーとして使用される cmp フィールドを指定できます。指定した主キー フィールドは、field-map
要素でデータベース カラムにマップしなければなりません。指定した主キー フィールドが ejb-jar.xml
記述子で cmp フィールドとして宣言されなかった場合、自動キー生成を有効にしなければならず、主キー タイプは java.lang.Long
になります。
指定できる値 : True | False
デフォルト値 : False
親要素 :
weblogic-rdbms-bean
Bean 単位でペシミスティックな同時方式を強制します。True
を指定すると、Bean がデータベースからロードされるときは常に SELECT ... FOR UPDATE
が使用されます。TransactionReadCommittedForUpdate
のトランザクション アイソレーション レベルとの相違点は、これがトランザクション レベルではなく、Bean レベルで設定されるということです。
注意 : Sybase JConnect ドライバでペシミスティックなロック方式 (HOLDLOCK など) を使用している場合、クエリに FOR UPDATE 句が含まれている場合にカーソルが生成されるように、SELECT_OPENS_CURSOR=true を指定する必要があります。 |
指定できる値 : MetaData | TableQuery
デフォルト値 : TableQuery
親要素 :
weblogic-rdbms-jar
validate-db-schema-with
要素を指定すると、デプロイメント時に Bean が有効なデータベース スキーマにマップされているかどうかをコンテナ管理による永続性でチェックします。
MetaData
を指定すると、WebLogic Server は、JDBC メタデータを使用してスキーマを検証します。
TableQuery
(デフォルト設定) を指定すると、WebLogic Server は、テーブルを直接クエリし、CMP 実行時によって予期されているスキーマがテーブルにあるかどうかを確認します。
指定できる値 : Read | Modified | Version | Timestamp
デフォルト値 : なし
要件 : table-name
を必ず設定すること。
親要素 :
weblogic-rdbms-bean table-map
verify-columns
要素は、Optimistic
同時方式を使用したときに、WebLogic Server に有効性をチェックさせたいテーブル カラムを指定します。WebLogic Server は、トランザクションの終了時、データベースにコミットする前にカラムをチェックし、他のどのトランザクションもそのデータを変更していないことを確かめます。
詳細については、「同時方式の選択」を参照してください。
指定できる値 : Read | Modified
デフォルト値 : Modified
要件 : table-name
を必ず設定すること。
親要素 :
weblogic-rdbms-bean table-map
verify-rows
要素は、オプティミスティックな同時実行性の使用時に EJB コンテナがチェックすべきである、テーブル内の行を指定します。
Modified
- トランザクションで更新または削除された行のみがチェックされる。この値にすると、2 つのトランザクションが同時に同じ行を更新することがなく、更新が損失することはありませんが、異なるトランザクションで読み込みと更新を交互に行うことは可能です。その結果、得られる一貫性のレベルは、ANSI の READ_COMMITTED
レベルと REPEATABLE_READ
レベルの間になります。
Read
- トランザクションで読み込まれた行はすべてチェックされる。これには、単に読み込まれるだけの行と、読み込まれた後でトランザクションによって更新または削除される行の両方が含まれます。Read
の値を指定すると、一般に EJB コンテナが実行しなくてはならないオプティミスティック チェックの回数が増えるため、オーバーヘッドが増加します。Read
オプションを指定すると、コミットされたトランザクションは、トランザクションのコミット後まで別のトランザクションによって修正されないことが確認されている一連の行を読み込みます。この結果、SERIALIZABLE
の一貫性の ANSI 定義と非常に近い、高度な一貫性が得られます。
注意 : verify-rows が Read に設定されていると、verify-columns 要素では Modified の値を指定できません。この組み合わせでは、修正された行だけが EJB コンテナによってチェックされることになるためです。 |
詳細については、「同時方式の選択」を参照してください。
指定できる値 : 0
または任意の正の整数
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean table-map
WebLogic Server 9.0 で導入された version-column-initial-value
要素では、オプティミスティックな同時方式を実装するために使用されるバージョン カラムの初期値を指定します。バージョン カラムは、optimistic-column
要素で指定するデータベース カラムです。詳細については、「optimistic-column」を参照してください。
指定できる値 :
デフォルト値 :
親要素 :
weblogic-rdbms-bean weblogic-query
weblogic-ql
要素は、EJB-QL に対する WebLogic 固有の拡張機能を含むクエリを指定します。ejb-jar.xml
デプロイメント記述子では、EJB-QL 言語の標準機能だけを使用するクエリを指定しなければなりません。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-bean
weblogic-query
要素では、標準またはデータベース固有の SQL クエリ、または EJB-QL の WebLogic 固有の拡張機能を使用するクエリを指定できます。SQL または EJB-QL の WebLogic 拡張機能を使用しないクエリは、ejb-jar.xml
デプロイメント記述子で指定する必要があります。
クエリによってあらかじめキャッシュにロードしておく必要があるエンティティ Bean をクエリで取得する場合は、weblogic-query
要素を使用して、field-group
をクエリに関連付けます。
weblogic-query
要素には、以下の要素を指定できます。
<weblogic-query> <description>...</description> <query-method> <method-name>findBigAccounts</method-name> <method-params> <method-param>double</method-param> </method-params> </query-method> <ejb-ql-query> <weblogic-ql>WHERE BALANCE>10000 ORDER BY NAME </weblogic-ql> <group-name>...</group-name> <caching-name>...</caching-name> </ejb-ql-query> <sql-query> <sql-shape>...</sql-shape> <sql>SELECT date_prescribed, dosage, drug, id, frequency, instructions, pat_id, issuing_phys_id, record_id, refills_remaining FROM medrecappPrescription WHERE testid = ?1</sql> <database-specific-sql> <database-type>SQLServer</database-type> <sql>SELECT name, phone, location, testid FROM medrecappPharmacyBeanTable WHERE testid = ?1 AND SUBSTRING(testid, 1,5) = 'local' ORDER BY name</sql> </database-specific-sql> </sql-query> <max-elements>...</max-elements> <include-updates>...</include-updates> <sql-select-distinct>...</sql-select-distinct> </weblogic-query>
ここでは、weblogic-rdbms-jar
要素について説明し、その例を示します。
weblogic-rdbms-jar
要素は、WebLogic RDBMS CMP デプロイメント記述子の最上位の要素です。この要素には、1 つまたは複数のエンティティ Bean と、一連の関係 (これについては省略可能) についてのデプロイメント情報が含まれます。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar
weblogic-rdbms-relation
要素は、WebLogic CMP 永続性タイプによって管理されている 1 つの関係を表します。WebLogic Server では、以下の 3 種類の関係のマッピングをサポートしています。
1 対 1 の関係では、一方の Bean の外部キーがもう一方の Bean の主キーにマップされる。
1 対多の関係では、ある Bean の外部キーが別の Bean の主キーにマップされる。
多対多の関係には、結合テーブルのマッピングが伴う。結合テーブルの各行には、関係に関与するエンティティの主キーに対応する 2 つの外部キーが格納される。
コンテナ管理による関係の詳細については、「コンテナ管理による関係 (CMR) の使用」を参照してください。
コード リスト C-4 とコード リスト C-5 に定義されているエンティティ間の 1 対 1 の関係を定義する weblogic-rdbms-bean
要素をコード リスト C-6 に示します。weblogic-rdbms-relation
要素は、weblogic-cmp-jar.xml
ファイルの weblogic-rdbms-bean
要素の後に存在します。
コード リスト C-4 Bean 1
<weblogic-rdbms-bean> <ejb-name>CountryEJB</ejb-name> <data-source-jndi-name>wlsd21-datasource</data-source-jndi-name> <table-map> <table-name>EXAMPLE07_COUNTRY</table-name> <field-map> <cmp-field>name</cmp-field> <dbms-column>NAME</dbms-column> </field-map> <field-map> <cmp-field>continent</cmp-field> <dbms-column>CONTINENT</dbms-column> </field-map> </table-map> </weblogic-rdbms-bean>
コード リスト C-5 Bean 2
<weblogic-rdbms-bean> <ejb-name>CapitalEJB</ejb-name> <data-source-jndi-name>wlsd21-datasource</data-source-jndi-name> <table-map> <table-name>EXAMPLE07_CAPITAL</table-name> <field-map> <cmp-field>CAPITAL_NAME</cmp-field> <dbms-column>NAME</dbms-column> </field-map> <field-map> <cmp-field>continent</cmp-field> <dbms-column>CONTINENT</dbms-column> </field-map> </table-map> </weblogic-rdbms-bean>
コード リスト C-6 1 対 1 の関係の <weblogic-rdbms-relation> 要素
<weblogic-rdbms-relation> <relation-name>CountryCapitalRel</relation-name> <weblogic-relationship-role> <relationship-role-name>CountryRole</relationship-role-name> <relationship-role-map> <column-map> <foreign-key-column>CAPITAL_NAME</foreign-key-column> <key-column>NAME</key-column> </column-map> </relationship-role-map> </weblogic-relationship-role> </weblogic-rdbms-relation>
注意 : NAME は、Capital テーブルの主キーのカラム名です。
<relationship-role-name> には、 |
コード リスト C-7 は、1 対多の関係を定義するサンプルの <weblogic-rdbms-relation>
要素を示しています。
コード リスト C-7 1 対多の関係の <weblogic-rdbms-relation> 要素
<weblogic-rdbms-relation> <relation-name>OwnerDogRel</relation-name> <weblogic-relationship-role> <relationship-role-name>DogRole</relationship-role-name> <relationship-role-map> <column-map> <foreign-key-column>OWNER_NAME</foreign-<key-column> <key-column>NAME</key-column> </column-map> <relationship-role-map> </weblogic-relationship-role> </weblogic-rdbms-relation>
注意 : <relationship-role-name> には、ejb-jar.xml の <ejb-relationship-role > 要素の <cmr-field > で指定された関連フィールドが入ります。
<foreign-key-column> は、関係の「多」側のテーブルのカラムを指定する必要があります。 |
WebLogic Server の多対多の関係には、結合テーブルの物理的なマッピングが伴います。結合テーブルの各行には、関係に関与するエンティティの主キーに対応する 2 つの外部キーが格納されます。
次の例は、FRIENDS
Bean と EMPLOYEES
Bean の間の多対多の関係を示しています。
コード リスト C-8 多対多の関係の <weblogic-rdbms-relation> 要素
<weblogic-rdbms-relation> <relation-name>friends</relation-name> <table-name>FRIENDS</table-name> <weblogic-relationship-role> <relationship-role-name>friend</relationship-role-name> <relationship-role-map> <column-map> <foreign-key-column>first-friend-id</foreign-key-column> <key-column>id</key-column> </column-map </relationship-role-map> </weblogic-relationship-role> <weblogic-relationship-role> <relationship-role-name>second-friend</relationship-role-name> <relationship-role-map> <column-map> <foreign-key-column>second-friend-id</foreign-key-column> <key-column>id</key-column> </column-map> </relationship-role-map> </weblogic-relationship-role> </weblogic-rdbms-relation>
コード リスト C-8 で、FRIENDS
結合テーブルには first-friend-id
および second-friend-id
という 2 つのカラムがあります。各カラムには、別の従業員の友人である特定の従業員を示す外部キーが格納されます。EMPLOYEES
テーブルの主キー カラム (key-column
) は id
です。この例では、EMPLOYEES
Bean が 1 つのテーブルにマップされています。EMPLOYEES
Bean が複数のテーブルにマップされている場合、主キー カラム (key-column
) を格納するテーブルを relationship-role-map
で指定する必要があります。詳細については、「relationship-role-map」を参照してください。
指定できる値 : なし
デフォルト値 : なし
親要素 :
weblogic-rdbms-jar weblogic-rdbms-relation
weblogic-relationship-role
要素は、ejb-jar.xml
で指定された ejb-relationship-role
の以下の DBMS スキーマ情報を指定します。
relationship-role-map
サブ要素は、関係の片側の外部キーと主キーのマッピングを指定する。1 対 1 または 1 対多の関係の場合、関係の外部キー側のロールのみがマッピングを指定する。多対多の関係では、両方のロールがマッピングを指定する。詳細と例については、「relationship-role-map」を参照。
group-name
を使用すると、ロールに対応する Bean が関係を移動した (つまり cmr getXXX
メソッドを呼び出した) 結果としてロードされたときにロードされる field-group
を示すことができる。
db-cascade-delete
タグを使用すると、カスケード削除が、基底 DBMS の組み込みカスケード削除機能を使用するように指定できる。詳細については、「db-cascade-delete」を参照。
コンテナ管理による関係の詳細については、「コンテナ管理による関係 (CMR) の使用」を参照してください。