Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 互換編


9.2.3 CJPAプロバイダを使用するための前提条件

ここでは,CJPAプロバイダを使用するための前提条件について説明します。

〈この項の構成〉

(1) 使用できるコンポーネント

CJPAプロバイダを利用するコンポーネントは,EJBの場合はEJB 3.0以降,Webコンポーネントの場合はServlet 2.5以降となります。使用できるコンポーネントの詳細については,「8.3.2 使用できるコンポーネント」を参照してください。

(2) 接続できるデータベース

CJPAプロバイダを使用する場合,次に示すデータベースに接続できます。

(3) 使用できるDB Connector

CJPAプロバイダは,DB Connectorを使用してデータベースを更新します。CJPAプロバイダでは次の表に示すDB Connectorを使用できます。

表9‒3 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プロバイダを使用できません。

(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プロバイダを使用する場合,アノテーションの参照抑止機能は使用できません。アノテーションの参照抑止機能が有効になっていると,永続化コンテキストおよび永続化ユニットの参照を定義できません。