BEA ホーム | 製品 | デベロッパ・センタ | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic Server > WebLogic エンタープライズ JavaBeans プログラマーズ ガイド > WebLogic Server コンテナ用の EJB のパッケージ化 |
WebLogic エンタープライズ JavaBeans プログラマーズ ガイド
|
WebLogic Server コンテナ用の EJB のパッケージ化
以下の節では、WebLogic Server コンテナにデプロイするために EJB をパッケージ化する方法について説明します。ソース ファイル、デプロイメント記述子、およびデプロイメント モードを始めとしてデプロイメント パッケージの内容も説明します。
WebLogic Server にデプロイするために EJB を EJB コンテナにパッケージ化するには、次の手順を実行します。
EJB コンポーネント ソース ファイルの見直し
エンティティ Bean とセッション Bean を実装するには、以下のコンポーネントを使用します。
WebLogic Server の EJB デプロイメント ファイル
EJB のデプロイメント記述子要素を指定するには、以下の WebLogic Server デプロイメントファイルを使用します。
Bean をコンパイルすると、デプロイメント ファイルは EJB デプロイメントの一部となります。XML デプロイメント記述子ファイルには、EJB に対するデプロイメント記述子の最低限の設定を含める必要があります。いったんファイルを作成すると、EJB デプロイメント記述子の指定と編集の手順に従って後で編集できます。デプロイメント記述子ファイルは、使用する各ファイルの文書型定義(DTD)のバージョンに準拠する必要があります。ファイルの文書型定義(DTD)には、EJB XML デプロイメント記述子ファイルのすべての要素および下位要素(属性)の名前を記述します。各ファイルの説明については、以下の節を参照してください。
ejb-jar.xml
ejb-jar.xml ファイルには、Sun Microsystems 固有の EJB DTD が格納されます。このファイルのデプロイメント記述子は、エンタープライズ Bean の構造を記述し、内部依存関係とアプリケーション アセンブリ情報を宣言します。アプリケーション アセンブリ情報とは、ejb-jar ファイルのエンタープライズ Bean をアプリケーション デプロイメント ユニットとしてアセンブルする方法を記述するものです。このファイルの要素の説明については、JavaSoft 仕様を参照してください。
weblogic-ejb-jar.xml
weblogic-ejb-jar.xml ファイルには、EJB の同時実行、キャッシング、クラスタ化、およびパフォーマンスの各動作を定義する WebLogic Server 固有の EJB DTD が格納されます。また、使用可能な WebLogic Server リソースを EJB にマップする記述子も格納されます。WebLogic Server リソースには、セキュリティ ロール名、データ ソース(JDBC プールや JMS 接続ファクトリなど)、およびデプロイ済みの他の EJB があります。このファイルの要素の説明については、weblogic-ejb-jar.xml 文書型定義を参照してください。
weblogic-cmp-rdbms.xml
weblogic-cmp-rdbms.xml ファイルには、コンテナ管理による永続性サービスを定義する WebLogic Server 固有の EJB DTD が格納されます。このファイルを使用して、コンテナがエンティティ Bean のインスタンス フィールドとデータベースのデータとの同期を処理する方法を指定します。このファイルの要素の説明については、weblogic-cmp-rdbms- jar.xml 文書型定義を参照してください。
デプロイメント ファイル間の関係
weblogic-ejb-jar.xml 内の記述子は、ejb-jar.xml 内の EJB 名、動作中の WebLogic Server のリソース名、および weblogic-cmp-rdbms-jar.xml(コンテナ管理による永続性を使用するエンティティ EJB の場合)内に定義されている永続性タイプ データにリンクされています。次の図は、デプロイメント ファイルと WebLogic Server 間の関係を示しています。
図6-1 デプロイメント ファイルのコンポーネント間の関係
EJB デプロイメント記述子の指定と編集
以下のいずれかの方法で、EJB デプロイメント記述子を指定または編集します。
デプロイメント ファイルの作成
各ファイルの文書型定義(DTD)のバージョンに準拠した基本の XML デプロイメント ファイルを EJB 用に作成します。既存の EJB デプロイメント ファイルをテンプレートとして使用することも、WebLogic Server 配布キットの EJB サンプルからコピーすることもできます。
SAMPLES_HOME¥server¥config¥examples¥applications
EJB デプロイメント記述子の手動編集
XML デプロイメント記述子要素を手動で編集するには、次の手順に従います。
<max-beans-in-cache></max-beans-in-cache>
EJB デプロイメント記述子エディタの使用
WebLogic Server Administration Console で EJB デプロイメント記述子を編集するには、次の手順に従います。
注意: EJB デプロイメント記述子の詳細については、Administration Console のオンライン ヘルプまたはweblogic-ejb-jar.xml 文書型定義およびweblogic-cmp-rdbms- jar.xml 文書型定義を参照してください。
他の EJB およびリソースへの参照
デプロイメント記述子の EJB 参照を指定することにより、EJB が WebLogic Server にデプロイされている他の EJB をルックアップし使用することができます。EJB 参照を作成する際の要件は、参照される EJB が呼び出し側の EJB にとって外部的か、もしくは、同じアプリケーション EAR ファイルの一部としてデプロイされているかによって異なります。
外部 EJB の参照
外部 EJB を参照するためには、呼び出し側の EJB の weblogic-ejb-jar.xml ファイルに <reference-descriptor> スタンザを追加します。次の XML コードに、外部 EJB を参照するスタンザのサンプルを示します。
図6-2 外部 EJB を参照するサンプル XML コード
このスタンザ内の ejb-ref-name 要素は、呼び出し側 EJB がその外部 EJB をルックアップする際に使用する名前を指定しています。jndi-name要素は、指定された ejb-ref-name をルックアップするときに使用する汎用的な JNDI 名を指定しています。 アプリケーション スコープの EJB の参照 同じ EAR ファイルの一部として複数の EJB をデプロイする場合、アプリケーションのローカル JNDI ツリーに一連のEJB 名を追加します。そのアプリケーション内のEJB およびそれ以外のコンポーネントは、java:comp/env から相対的に、JNDI ツリー内にあるアプリケーション スコープの他のコンポーネントを直接、ルックアップできます。 あるEJB が同じ EAR ファイルの一部としてデプロイされている他の EJB を参照する 場合には、weblogic-ejb-jar.xml ファイルで汎用的な JNDI 名を指定する必要はありません。実際には、WebLogic 固有の他の機能のデプロイメント記述子が必要なければ、weblogic-ejb-jar.xml ファイルまるごとを省略できます。 同じ EAR ファイルの一部としてデプロイされた EJB を参照するためには、呼び出し側の EJB の ejb-jar.xml デプロイメント記述子ファイルに <ejb-local-ref> スタンザを追加します。次に例を示します。 図6-3 同じ EAR ファイルの EJB を参照するサンプル XML コード<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>AdminBean</ejb-ref-name>
<jndi-name>payroll.AdminBean</jndi-name>
</ejb-reference-description>
76</reference-descriptor>
上記の例で、ejb-ref-name 要素は、呼び出し側の EJB がアプリケーション スコープのEJB をルックアップするのに使用する名前を示します。ejb-link 要素は、指定された <ejb-ref-name> を、その EAR ファイルでデプロイされる別の EJB にマップします。この例で <ejb-link> の名前が 2 番目の EJB を保存するファイル名で修飾されている点に注意してください。この EAR ファイル内の2 つ以上の EJB が同じ名前を持つ場合には、このように EJB 名を修飾することが必要になります。 これにより、ファイル名の修飾子による参照の一意性が保証されます。 EJB リンクの詳細については、EJB リンクの使用を参照してください。 アプリケーション スコープの JDBC データソースの参照 EJB が、同じ EAR ファイルの一部としてデプロイされている JDBC データソースにアクセスすることもできます。weblogic-application.xml デプロイメント記述子で示されるデータソースに、java:comp/env からローカルにアクセスできます。詳細については、『Web アプリケーションのアセンブルとコンフィグレーション』の「アプリケーション スコープのリソースのコンフィグレーション」を参照してください。<ejb-local-ref>
<description>Reference to application EJB</description>
<ejb-ref-name>ejb1</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>mypackage.ejb1.MyHome</home>
<local>mypackage.ejb1.MyRemote</local>
<ejb-link>ejb1.jar#myejb</ejb-link>
</ejb-local-ref>
デプロイメント プロセスは、EJB プロバイダによって作成されたコンパイル済み EJB インタフェースと実装クラスを格納する JAR ファイルまたはデプロイメント ディレクトリで開始されます。JAR ファイルとデプロイメント ディレクトリは、どちらがコンパイル済みクラスを格納している場合でも、Java パッケージ構造と一致するサブディレクトリに入っている必要があります。
また、EJB プロバイダが、付属の EJB を記述する EJB 準拠の ejb-jar.xml ファイルを提供する必要があります。ejb-jar.xml ファイルとその他に必要な XML デプロイメント ファイルの場所は、JAR またはデプロイメント ディレクトリの META-INF サブディレクトリの最上位でなければなりません。次の図は、EJB とデプロイメント記述子ファイルをデプロイメント ディレクトリまたは JAR ファイルにパッケージ化する作業の第 1 段階を示しています。
図6-4 デプロイメント ディレクトリへの EJB クラスとデプロイメント記述子のパッケージ化
基本の JAR またはデプロイメント ディレクトリは、そのまま WebLogic Server にデプロイすることができません。まず、weblogic-ejb-jar.xml ファイルの WebLogic 固有のデプロイメント記述子要素を作成してコンフィグレーションし、そのファイルをデプロイメント ディレクトリまたは ejb.jar ファイルに追加します。デプロイメント記述子ファイルの作成手順については、WebLogic Server の EJB デプロイメント ファイルを参照してください。 コンテナ管理の永続性を使用するエンティティ EJB をデプロイする場合は、Bean の永続性タイプに対応する WebLogic 固有のデプロイメント記述子要素も追加する必要があります。通常、WebLogic Server のコンテナ管理による永続性(CMP)サービスの場合、ファイルの名前は weblogic-cmp-rdbms-jar.xml です。 CMP を使用する Bean ごとに別々のファイルが必要です。サードパーティの永続性ベンダを使用する場合は、weblogic-cmp-rdbms-jar.xml とは内容だけでなくファイル タイプも異なることがあるので、詳細については、永続性ベンダのマニュアルを参照してください。 EJB に必要なデプロイメント記述子ファイルがない場合は、手動で作成しなければなりません。既存のファイルをコピーした上で、必要に応じて EJB の設定を編集する方法が最も簡単です。ファイルを作成するには、EJB デプロイメント記述子の指定と編集の手順に従います。 ejb.jar ファイル ejb.jar ファイルを作成するには、Java Jar ユーティリティ(javac)を使用します。このユーティリティは、EJB クラスとデプロイメント記述子を、ディレクトリ構造を保持する 1 つの Java アーカイブ(JAR)ファイルにまとめます。ejb-jar ファイルが、WebLogic Server にデプロイするユニットとなります。
EJB クラスのコンパイルと EJB コンテナ クラスの生成
デプロイメント ユニットの作成手順の一部として、EJB クラスをコンパイルし、デプロイメント記述子をデプロイメント ユニットに追加し、デプロイメント ユニットにアクセスするためのコンテナ クラスを作成する必要があります。
ejbc コンパイラは、WebLogic 固有の XML デプロイメント記述子ファイルで指定した XML デプロイメント記述子ファイルに従ってコンテナ クラスを生成します。たとえば EJB をクラスタで使用するよう指定した場合、ejbc は、そのデプロイメント用の特別なクラスタ対応クラスを作成します。
また、コマンド ラインから ejbc を直接使用して、必要なオプションと引数を指定することもできます。詳細については、ejbcを参照してください。
次の図は、JAR ファイルの作成時にデプロイメント ユニットに追加されるコンテナ クラスを示しています。
図6-5 EJB コンテナ クラスの生成
デプロイメント ユニットの作成後、JAR、EAR、または WAR アーカイブのいずれかとしてファイル拡張子を指定できます。 生成クラス名の衝突の可能性 まれなことではありますが、ejbc でクラス名を生成したとき、生成したクラス名の衝突に遭遇し、これが ClassCastException や他の例外を招くことがあります。これは、生成されるクラス名が、Bean クラス名、Bean クラス パッケージ、その Bean の ejb-name の 3 つのキーをもとにしているためです。この問題が起こるのは、複数の JAR ファイルを含む EAR ファイルを使用し、その 2 つ以上の JAR ファイルのそれぞれに Bean クラス、パッケージ、または、クラス名を同じくする EJB が含まれ、双方の EJB がそれぞれの JAR ファイル内で同じ ejb-name を持っている場合です。 ejb-name はファイル名のもととなるキーの 1 つであり、ejb-name は JAR ファイル内でユニークでなければならないので、同じ JAR ファイルにある 2 つの EJB 間ではこの問題は起きません。また、EAR ファイルではファイルごとに個別のクラスローダになるため、別々の EAR ファイルに置かれた 2 つのEJB 間でこの問題は起きません。
WebLogic Server への EJB クラスのロード
Weblogic Server のクラスローダは階層的です。WebLogic Serverの起動時に、Java システム クラスローダはアクティブになり、その後に WebLogic Server が作成するすべてのクラスローダの親になります。WebLogic Server では、アプリケーションをデプロイするときに、EJB 用と Web アプリケーション用の 2 つの新しいクラスローダを作成します。EJB クラスローダは Java システム クラスローダの子、Web アプリケーション クラスローダは EJB クラスローダの子です。
クラスローダの詳細については、『WebLogic Server アプリケーションの開発』の「クラスローダの概要」と「アプリケーションのクラスローダ」を参照してください。
ejb-client.jar の指定
WebLogic Server では、ejb-client.jar ファイルを使用できます。
ejb-client.jar には、エンティティ Bean のホーム インタフェース、リモート インタフェース、および主キー クラスが必ず格納されます。WebLogic Server ではejb-client.jar にこれらのクラスを追加し、これらのファイルとこれらが参照するすべてのファイルをチェックすることにより追加すべきファイルがないか判断します。しかし、ファイルがクラスパスで参照されている場合には、WebLogic Serverはそれをejb-client.jar に追加しません。これにより、WebLogic Serverd では必要なカスタム クラスを ejb-client.jar に追加することができます。 その一方で、java.lang.String などの汎用クラスは制限されます。
また、ejb-client.jar には、 ホームインタフェース、リモートインタフェース、主キー クラスホーム、リモートインタフェース クラス、および、主キー クラスが参照しているすべてのクラスが ejb-jar からコピーされます。
たとえば、ShoppingCart リモート インタフェースが Item クラスを返すメソッドを持っているとします。このリモート インタフェースはこのクラスを参照し、ejb-jar ファイルに入っているので、EJB client.jar に含まれます。
ejb-client.jar ファイルを作成するには、この機能を Bean の ejb-jar.xml デプロイメント記述子ファイルを指定してから、weblogic.ejbc を使用して ejb-client.jar ファイルを生成します。ejb-client.jar には、ejb-jar ファイルの EJB を呼び出すためにクライアント プログラムに必要なクラス ファイルが格納されます。これらのファイルは、クライアントをコンパイルするために必要なクラスです。この機能を指定した場合、WebLogic Server は ejb-client.jar を自動的に作成します。
ejb-client.jar を指定するには、次の手順に従います。
<ejb-client-jar>ShoppingCartClient.jar</ejb-client-jar>
$ java weblogic.ejbc <ShoppingCart.jar>
コンテナ クラスには、WebLogic Server が使用する EJB の内部表現に加えて、クライアントが使用する外部インタフェース(ホーム、ローカル、またはリモート)の実装も格納されます。
ejb-client.jar には、エンティティ Bean のホーム インタフェース、リモート インタフェース、および主キー クラスが必ず格納されます。また、これらのインタフェースが参照する ejb-jar ファイルのすべてのクラスのコピーも格納されます。たとえば、ShoppingCart リモート インタフェースが Item クラスを返すメソッドを持っているとします。このリモート インタフェースはこのクラスを参照し、ejb-jar ファイルに入っているので、EJB client.jar に含まれます。
外部クライアントは、ejb-client.jar をそれぞれのクラスパスに含めます。Web アプリケーションは、ejb-client.jar を /lib ディレクトリに含めます。
マニフェスト クラスパス
JAR ファイルが別の JAR ファイルを参照できるかどうかを指定するには、マニフェスト ファイルを使用します。スタンドアロン EJB ではマニフェスト クラスパスを使用できません。マニフェスト クラスパスは、EAR ファイル内にデプロイされているコンポーネントに対してのみサポートされています。クライアントは、マニフェスト ファイルのクラスパス エントリにある client.jar を参照します。
マニフェスト ファイルを使用して別の JAR ファイルを参照するには、次の手順に従います。
注意: このエントリは、スペース区切りの JAR ファイル リストです。
EJB のホーム/リモート インタフェースを呼び出し側コンポーネントのクラスパスに配置するには、次の手順に従います。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |