8.2.3 CJPAプロバイダを使用するための前提条件
ここでは,CJPAプロバイダを使用するための前提条件について説明します。
- 〈この項の構成〉
(1) 使用できるコンポーネント
CJPAプロバイダを利用するコンポーネントは,EJBの場合はEJB 3.0以降,Webコンポーネントの場合はServlet 2.5以降となります。
アプリケーションサーバでは,EJB,WebアプリケーションでJPAを使用できます。また,Webアプリケーションからユーザスレッドを使用した場合も,JPAを使用できます。なお,次に示す環境またはライブラリではJPAを使用できません。
-
EJBクライアントアプリケーション環境
-
J2EEアプリケーションクライアント環境
-
コンテナ拡張ライブラリ
JPAを使用できるコンポーネントを次の表に示します。
コンポーネント |
JPAの使用 |
|
---|---|---|
EJB |
Stateless Session Bean(EJB3.0以降)※1 |
○ |
Stateful Session Bean(EJB3.0以降)※1 |
○ |
|
Stateless Session Bean(EJB3.0より前) |
× |
|
Stateful Session Bean(EJB3.0より前) |
× |
|
インターセプタ |
○ |
|
Message-driven Bean |
× |
|
Entity Bean |
× |
|
Webアプリケーション |
サーブレット,フィルタ,イベントリスナ(Servlet2.5以降) |
○ |
JSP,JSPのタグハンドラ,JSPのイベントリスナ,JSPのタグライブラリイベントリスナ※2(Servlet2.5以降) |
○ |
|
サーブレット,フィルタ,イベントリスナ(Servlet2.5より前) |
× |
|
JSP,JSPのタグハンドラ,JSPのイベントリスナ,JSPのタグライブラリイベントリスナ(Servlet2.5より前) |
× |
- 注意事項
-
Servlet 2.5以降のweb.xmlのmetadata-complete属性にtrueが設定されている場合,Webコンポーネントのアノテーションが読み込まれません。このため,アノテーションを使用して,永続化コンテキストまたは永続化ユニットの参照を定義することはできません。ただし,web.xmlに参照を定義することはできます。
(3) 使用できるDB Connector
CJPAプロバイダは,DB Connectorを使用してデータベースを更新します。CJPAプロバイダでは次の表に示すDB Connectorを使用できます。
使用するデータベース |
トランザクションタイプ |
使用できるDB Connector |
---|---|---|
Oracle |
LocalTransaction NoTransaction |
DBConnector_Oracle_CP.rar |
XATransaction |
DBConnector_Oracle_XA.rar |
|
Oracle RAC |
LocalTransaction NoTransaction |
DBConnector_Oracle_CP.rar DBConnector_CP_ClusterPool_Root.rar DBConnector_Oracle_CP_ClusterPool_Member.rar |
HiRDB |
LocalTransaction NoTransaction |
DBConnector_HiRDB_Type4_CP.rar |
XATransaction |
DBConnector_HiRDB_Type4_XA.rar |
(4) 使用できない環境
次の環境ではCJPAプロバイダを使用できません。
-
バッチアプリケーションの実行環境
-
EJBクライアントアプリケーションの実行環境
(5) メソッドキャンセル機能の使用について
CJPAプロバイダでは,OneToOneおよびManyToOneのLAZYフェッチの場合,アクセサメソッドに独自のバイナリコードを埋め込みます。これによって,アクセサメソッドがメソッドキャンセルの対象になります。このため,OneToOneリレーションシップ,またはManyToOneリレーションシップでLAZYフェッチが指定されている場合は,エンティティクラス,埋め込み可能クラス,およびマップドスーパークラスを保護区に登録する必要があります。
なお,保護区に登録しない場合は,埋め込んだバイナリコード上でメソッドキャンセルが起こるおそれがあります。保護区に登録しない場合の動作は保証しません。
保護区に登録されている場合でも,登録されていない場合でも,メソッドタイムアウトで下記のようなスタックトレースが出力されます。ただし,保護区に登録しているとメソッドキャンセルは発生しません。
次に示す例では,ユーザが呼び出したEntityClass1.getMappingClass2メソッドの延長で,埋め込んだEntityClass1._toplink_getmappingClass2が呼ばれています。そこでメソッドタイムアウトが発生していますが,メソッドキャンセルは発生しません。
message-id message(LANG=ja) KDJE52703-W A timeout occurred while the user program was executing. (threadID = 23794987, rootAPInfo = 10.209.11.124/5964/0x4828eb62000128e0, application = JPA_JavaEE_TP, bean = TestBean, method = doTest) jpa.test.annotation.onetoone.entity.EntityClass1._toplink_getmappingClass2(EntityClass1.java) locals: (jpa.test.annotation.onetoone.entity.EntityClass1) this = <0x11e35878> (jpa.test.annotation.onetoone.entity.EntityClass1) at jpa.test.annotation.onetoone.entity.EntityClass1.getMappingClass2(EntityClass1.java:34) locals: (jpa.test.annotation.onetoone.entity.EntityClass1) this = <0x11e35878> (jpa.test.annotation.onetoone.entity.EntityClass1)
保護区への登録については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.2.5 criticalList.cfg(保護区リストファイル)」を参照してください。
(6) アノテーションの参照抑止機能の使用について
CJPAプロバイダを使用する場合,アノテーションの参照抑止機能は使用できません。アノテーションの参照抑止機能が有効になっていると,永続化コンテキストおよび永続化ユニットの参照を定義できません。