Oracle Containers for J2EE Enterprise JavaBeans開発者ガイド 10g(10.1.3.1.0) B31852-03 |
|
この項の内容は次のとおりです。
詳細は、次を参照してください。
EJB 3.0エンティティを使用するアプリケーションをパッケージ化する場合、次の点を考慮します。
EJB 3.0 JPA永続性ユニットは、persistence.xml
ファイル、1つ以上のオプションのorm.xml
ファイル、および永続性ユニットに属する管理エンティティ・クラスで構成されます。
永続性ユニットを独自の永続性アーカイブにパッケージ化し、永続性ユニットへのアクセスを必要とする任意のJava EEモジュールにそのアーカイブを含めることができます(「永続性アーカイブの作成」を参照)。または、永続性ユニット・ファイルを様々なJava EEモジュールに直接パッケージ化することも可能です(「Java EEモジュールへの永続性ユニット・ファイルの直接パッケージ化」を参照)。
META-INF
ディレクトリにpersistence.xml
ファイルを含むJARファイルまたはディレクトリは、永続性ユニットのルートと呼ばれます。エンティティを使用するEJB 3.0アプリケーションでは、少なくとも1つの永続性ユニット・ルートを定義する必要があります。
永続性ユニットの有効範囲は、永続性ユニット・ルートを定義する場所によって決まります。
詳細は、次を参照してください。
永続性アーカイブは、例27-1「永続性アーカイブ」に示すように、persistence.xml
ファイル、1つ以上のオプションのorm.xml
ファイル、および永続性ユニットに属する管理エンティティ・クラスを含む単純なJARファイルです。
employee-persistence.jar META-INF/persistence.xml META-INF/orm.xml com/acme/model/Employee.class com/acme/model/Address.class ...
永続性アーカイブは、次のいずれかの方法でパッケージ化します。
WEB-INF/lib
ディレクトリ。永続性ユニットは、このWAR内のクラスからのみアクセスできます。
永続性アーカイブを使用すると、複数のJava EEモジュールで永続性ユニットを簡単に共有できます。
永続性ユニット・ファイルは、次のいずれかのJava EEモジュールにパッケージ化できます。
表27-1 OC4JによるMETA-INFおよびWEB-INFのpersistence.xmlの処理方法
WEB-INF/classes/META-INF | WEB-INF | OC4Jがpersistence.xmlを使用する場所 |
---|---|---|
|
|
|
|
|
|
|
|
|
永続性ユニット・ファイルとJava EEモジュールを分離し、複数のJava EEモジュールで永続性ユニットを簡単に共有するには、永続性ユニットを永続性アーカイブにパッケージ化することを検討してください(「永続性アーカイブの作成」を参照)。
EJB 3.0 JPAマッピング・メタデータは、アノテーションまたは1つ以上のオプションのorm.xml
ファイル(あるいはその両方)を使用して指定できます。orm.xml
ファイルは、次のいずれかにパッケージ化できます。
META-INF
ディレクトリにpersistence.xml
ファイルを含むJARファイルまたはディレクトリ)のMETA-INF
ディレクトリ
persistence.xml
ファイルで参照される任意のJARファイルのMETA-INF
ディレクトリ
persistence.xml
ファイルの<persistence-unit>
要素の<mapping-file>
サブ要素
詳細は、次を参照してください。
EJB 3.0とEJB 2.1の両方のBeanをアプリケーションで組み合せることができます。たとえば、ejb-jar.xml
ファイルのない3つのアノテーション付きEJB 3.0エンティティ、ejb-jar.xml
ファイルのある2つのEJB 2.1エンティティBean、およびejb-jar.xml
ファイル、アノテーションまたはその両方のある3つのEJB 3.0セッションBean(この場合、ejb-jar.xml
はアノテーションをオーバーライドする)を含むアプリケーションが可能です。
Enterprise Bean間でクラスを共有する場合は、次のいずれかを実行します。
manifest.mf
ファイルのclass-path
にある共有JARファイルを参照します。
Class-Path:shared_classes.jar
shared_classes.jar
の場所は、これを参照するJARファイルがEARファイル内のどこに存在するかによって異なります。この例では、shared_classes.jar
ファイルは、EJB JARファイルと同じレベルに存在します。
home/lib
です。ただし、共有ライブラリ・ディレクトリは、Enterprise Managerを使用してデフォルト・アプリケーションの「一般プロパティ」ページで設定できます。
子アプリケーションは、親アプリケーションの名前空間を認識します。これは、Enterprise Beanなどのサービスを複数のアプリケーションで共有するために使用されます。親アプリケーションの指定方法は、『Oracle Containers for J2EE開発者ガイド』を参照してください。
EJBアプリケーションとWebアプリケーション間でクラスを共有する場合は、参照されるクラスを共有JARファイルに配置する必要があります。
EJBアプリケーション間でクラスを共有する場合、次の問題に注意してください。
実行時にOC4Jメモリーが一貫して増大し続ける場合は、application.xml
ファイルに無効なシンボリック・リンクが指定されている可能性があります。OC4Jは、このapplication.xml
ファイルのリンクを使用して、すべてのリソースをロードします。これらのリンクが無効な場合は、Cヒープの増大が続き、OC4Jがメモリー不足となります。すべてのシンボリック・リンクが有効であることを確認し、OC4Jを再起動します。
また、シンボリック・リンクが指し示すディレクトリ内のJARファイル数は最小限にしてください。使用していないJARファイルすべてをこれらのディレクトリから削除します。OC4Jは、クラスとリソースのJARをすべて検索します。したがって、アドレス空間へのマッピングおよびファイル・キャッシュによる時間やメモリーの消費量が増加します。
実行時にClassCastException
が発生した場合は、次の状況であることが考えられます。
orion-web.xml
ファイルで、<web-app-class-loader>
要素のsearch_local_classes_first
属性をオンにしていた場合。
この問題を解決するには、コピーしたクラスをWARファイルから削除するか、またはsearch_local_classes_first
属性をオフにします。この属性をオンにすると、クラス・ローダーは、EJB JARファイル内のクラスなどの他のクラスをロードする前に、WARファイル内のクラスをロードします。この属性の詳細は、『Oracle Containers for J2EEサーブレット開発者ガイド』の「サーブレットの開発」の、OC4Jでのシステム・クラスより前のWARファイル・クラスのロードに関する項を参照してください。
他の共有EJBクラスを参照するEJBまたはWebアプリケーションを使用する場合は、参照されるクラスを共有JARファイルに配置する必要があります。状況によっては、WARファイルまたは共有EJBクラスを参照する別のアプリケーションに共有EJBクラスをコピーすると、クラス・ローダーの問題のためにClassCastException
が発生する場合があります。正常に終了するためには、参照されるEJBクラスを、そのアプリケーションのWARファイルまたは別のアプリケーションにコピーしないでください。
|
![]() Copyright © 2002, 2008 Oracle Corporation. All Rights Reserved. |
|