Oracle® Fusion Middleware Oracle WebLogic Server Enterprise JavaBeansのプログラミング 11gリリース1(10.3.6) B61624-05 |
|
![]() 前 |
![]() 次 |
以下の節では、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デプロイメント記述子の要素については、付録F「EJB 1.1ユーザーへの重要な情報」を参照してください。
詳細情報
weblogic-cmp-jar.xml
に必要なXMLスキーマ定義とネームスペース宣言、およびドキュメント・タイプ定義とDOCTYPEヘッダーについては、付録A「デプロイメント記述子スキーマおよびドキュメント・タイプ定義リファレンス」を参照してください。
weblogic-ejb-jar.xml
ファイルについては、付録B「weblogic-ejb-jar.xmlデプロイメント記述子のリファレンス」を参照してください。
EJB 1.1デプロイメント記述子の要素については、付録F「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-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>
値の範囲:なし
デフォルト値:なし
親要素:
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-table
要素は、以下の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 | SQLServer | SQLServer2000 | Sybase
デフォルト値:なし
親要素:
weblogic-rdbms-jar
および
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-quer sql-query database-specific-sql
値の範囲:有効なWebLogic Server JDBCデータ・ソース名
デフォルト値:なし
親要素:
weblogic-rdbms-bean
値の範囲:なし
デフォルト値:デフォルトでは、データベースのカスケード削除は使用されません。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 );
値の範囲:有効なデータベース列
デフォルト値:なし
親要素:
weblogic-rdbms-bean field-map
値の範囲: 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 | SQLServer | SQLServer2000 | Sybase
デフォルト値:
親要素:
weblogic-rdbms-bean field-map
値の範囲:有効なファイル名
デフォルト値:
親要素:
weblogic-rdbms-jar
値の範囲: 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
値の範囲:
デフォルト値:
親要素:
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query
値の範囲: True | False
デフォルト値: True
親要素:
weblogic-rdbms-jar
値の範囲: True | False
デフォルト値: True
親要素:
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query
または
weblogic-rdbms-jar weblogic-rdbms-relation
WebLogic Server 9.0で導入された要素で、読取り専用エンティティEJBを問合せレベルでキャッシュするかどうかを指定します。読取り専用エンティティEJBを問合せレベルでキャッシュすると、パフォーマンスが向上します。これは、ファインダがキャッシュ内の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
値の範囲:なし
デフォルト値:なし
親要素:
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-bean column-map
値の範囲:有効なデータベース表名
デフォルト値:なし
親要素:
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
デフォルト値: オプティミスティックな同時実行性を使用するBeanではFalse
他の同時実行性タイプを使用するBeanではTrue
親要素:
weblogic-rdbms-jar weblogic-rdbms-bean relationship-caching
値の範囲: True | False
デフォルト値: オプティミスティックな同時実行性を使用する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
は、オプティミスティックな同時実行性を使用する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
は無視されます。
値の範囲:有効な主キー列名
デフォルト値:なし
親要素:
weblogic-rdbms-bean column-map
値の範囲:すべての正の整数
デフォルト値: 0
親要素:
weblogic-rdbms-bean
値の範囲:なし
デフォルト値:なし
親要素:
weblogic-rdbms-bean weblogic-query
値の範囲:なし
デフォルト値:なし
親要素:
weblogic-rdbms-bean query-method
値の範囲:なし
デフォルト値:なし
親要素:
weblogic-rdbms-bean method-params
値の範囲:なし
デフォルト値:なし
親要素:
weblogic-rdbms-bean query-method
値の範囲:有効なデータベース列名
デフォルト値:なし
親要素:
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-bean sql-shape
値の範囲:有効なデータベース表名
デフォルト値:なし
親要素:
weblogic-rdbms-jar weblogic-rdbms-relation weblogic-relationship-role relationship-role-map
primary-key-table
要素は、主キーを格納するDBMS表名を指定します。主キーの詳細は、「主キーの使用」を参照してください。
注意: すべてのデータベースで大文字と小文字が区別されるわけではありませんが、この要素では、大文字と小文字を区別します。 |
値の範囲:なし
デフォルト値:なし
親要素:
weblogic-rdbms-bean
値の範囲:関連する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
値の範囲:有効なSQL
デフォルト値:なし
要件:データベース固有のSQLを使用するには、その対象となるデータベースをdatabase-type要素で指定する必要がある
親要素:
weblogic-rdbms-bean weblogic-query sql-query
および
weblogic-rdbms-bean weblogic-query sql-query database-specific-query
値の範囲:
デフォルト値:なし
要件:データベース固有のSQLを使用するには、その対象となるデータベースをdatabase-type
で指定する必要がある
親要素:
weblogic-rdbms-bean weblogic-query
値の範囲: 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
値の範囲:なし
デフォルト値:なし
親要素:
weblogic-rdbms-jar weblogic-rdbms-bean weblogic-query sql-query sql-shape
値の範囲:なし
デフォルト値:なし
要件:各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
要素の使い方については、「オプティミスティックな同時実行性でのデータ有効性のチェック」を参照してください。
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
値の範囲: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
値の範囲: 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
値の範囲: Read | Modified | Version | Timestamp
デフォルト値: none
要件: 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
の値を指定すると、一般にEJBコンテナが実行しなくてはならないオプティミスティック・チェックの回数が増えるため、オーバーヘッドが増加します。これには、単に読み込まれるだけの行と、読み込まれた後でトランザクションによって更新または削除される行の両方が含まれます。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-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-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-0の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)の使用」を参照してください。