BEA ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > WebLogic ServerTM > WebLogic エンタープライズ JavaBeans プログラマーズ ガイド > WebLogic Server コンテナ用の EJB のパッケージ化 |
WebLogic エンタープライズ JavaBeans プログラマーズ ガイド
|
WebLogic Server コンテナ用の EJB のパッケージ化
以下の節では、WebLogic Server コンテナにデプロイするために EJB をパッケージ化する方法について説明します。ソース ファイル、デプロイメント記述子、およびデプロイメント モードを始めとしてデプロイメント パッケージの内容も説明します。
WebLogic Server にデプロイするために EJB を EJB コンテナにパッケージ化するには、次の手順を実行します。
エンティティ Bean とセッション Bean を実装するには、以下のコンポーネントを使用します。
WebLogic Server の EJB デプロイメント ファイル
EJB のデプロイメント記述子要素を指定するには、以下の WebLogic Server デプロイメント ファイルを使用します。
Bean をコンパイルすると、デプロイメント ファイルは EJB デプロイメントの一部となります。XML デプロイメント記述子ファイルには、EJB に対するデプロイメント記述子の最低限の設定を含める必要があります。いったんファイルを作成すると、EJB デプロイメント記述子の指定と編集の手順に従って後で編集できます。デプロイメント記述子ファイルは、使用する各ファイルの文書型定義 (DTD) のバージョンに準拠する必要があります。ファイルの文書型定義 (DTD) には、EJB XML デプロイメント記述子ファイルのすべての要素および下位要素 (属性) の名前を記述します。各ファイルの説明については、以下の節を参照してください。
ejb-jar.xml ファイルには、Sun Microsystems 固有の EJB DTD が格納されます。このファイルのデプロイメント記述子は、エンタープライズ Bean の構造を記述し、内部依存関係とアプリケーション アセンブリ情報を宣言します。アプリケーション アセンブリ情報とは、ejb-jar ファイルのエンタープライズ Bean をアプリケーション デプロイメント ユニットとしてアセンブルする方法を記述するものです。このファイルの要素の説明については、JavaSoft 仕様を参照してください。
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 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 間の関係を示しています。
以下のいずれかの方法で、EJB デプロイメント記述子を指定または編集します。
各ファイルの文書型定義 (DTD) のバージョンに準拠した基本の XML デプロイメント ファイルを EJB 用に作成します。既存の EJB デプロイメント ファイルをテンプレートとして使用することも、WebLogic Server 配布キットの EJB サンプルからコピーすることもできます。
SAMPLES_HOME¥server¥config¥examples¥applications
XML デプロイメント記述子要素を手動で編集するには、次の手順に従います。
<max-beans-in-cache></max-beans-in-cache>
WebLogic Server Administration Console で EJB デプロイメント記述子を編集するには、次の手順に従います。
注意: EJB デプロイメント記述子の詳細については、Administration Console のオンライン ヘルプまたはweblogic-ejb-jar.xml 文書型定義,およびweblogic-cmp-rdbms-jar.xml 文書型定義を参照してください。
デプロイメント記述子の EJB 参照を指定することにより、EJB が WebLogic Server にデプロイされている他の EJB をルックアップし使用することができます。EJB 参照を作成する際の要件は、参照される EJB が呼び出し側の EJB にとって外部的か、もしくは、同じアプリケーション EAR ファイルの一部としてデプロイされているかによって異なります。
外部 EJB を参照するためには、呼び出し側の EJB の weblogic-ejb-jar.xml ファイルに <reference-descriptor> スタンザを追加します。次の XML コードに、外部 EJB を参照するスタンザの例を示します。
<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 をルックアップする際に使用する名前を指定しています。jndi-name要素は、指定された ejb-ref-name をルックアップするときに使用する汎用的な JNDI 名を指定しています。
同じ 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 コード例
<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-ref-name 要素は、呼び出し側の EJB がアプリケーション スコープの EJB をルックアップするのに使用する名前を示します。ejb-link 要素は、指定された <ejb-ref-name> を、その EAR ファイルでデプロイされる別の EJB にマップします。この例で <ejb-link> の名前が 2 番目の EJB を保存するファイル名で修飾されている点に注意してください。この EAR ファイル内の2 つ以上の EJB が同じ名前を持つ場合には、このように EJB 名を修飾することが必要になります。 これにより、ファイル名の修飾子による参照の一意性が保証されます。
EJB リンクの詳細については、EJB リンクの使用を参照してください。
EJB が、同じ EAR ファイルの一部としてデプロイされている JDBC データソースにアクセスすることもできます。weblogic-application.xml デプロイメント記述子で示されるデータソースに、java:comp/env からローカルにアクセスできます。詳細については、『Web アプリケーションのアセンブルとコンフィグレーション』の「アプリケーション スコープのリソースのコンフィグレーション」を参照してください。
デプロイメント プロセスは、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 ファイルを作成するには、Java Jar ユーティリティ (javac) を使用します。このユーティリティは、EJB クラスとデプロイメント記述子を、ディレクトリ構造を保持する 1 つの Java アーカイブ (JAR) ファイルにまとめます。ejb-jar ファイルが、WebLogic Server にデプロイするユニットとなります。
EJB クラスのコンパイルと EJB コンテナ クラスの生成
デプロイメント ユニットの作成手順の一部として、EJB クラスをコンパイルし、デプロイメント記述子をデプロイメント ユニットに追加し、デプロイメント ユニットにアクセスするためのコンテナ クラスを作成する必要があります。
ejbc コンパイラは、WebLogic 固有の XML デプロイメント記述子ファイルで指定した XML デプロイメント記述子ファイルに従ってコンテナ クラスを生成します。たとえば EJB をクラスタで使用するよう指定した場合、ejbc は、そのデプロイメント用の特別なクラスタ対応クラスを作成します。
また、コマンド ラインから ejbc を直接使用して、必要なオプションと引数を指定することもできます。詳細については、ejbcを参照してください。
次の図は、JAR ファイルの作成時にデプロイメント ユニットに追加されるコンテナ クラスを示しています。
デプロイメント ユニットの作成後、JAR、EAR、または WAR アーカイブのいずれかとしてファイル拡張子を指定できます。
まれなことではありますが、ejbc でクラス名を生成したとき、生成したクラス名の衝突に遭遇し、これが ClassCastException や他の例外を招くことがあります。これは、生成されるクラス名が、Bean クラス名、Bean クラス パッケージ、その Bean の ejb-name の 3 つのキーをもとにしているためです。この問題が起こるのは、複数の JAR ファイルを含む EAR ファイルを使用し、その 2 つ以上の JAR ファイルのそれぞれに Bean クラス、パッケージ、または、クラス名を同じくする EJB が含まれ、双方の EJB がそれぞれの JAR ファイル内で同じ ejb-name を持っている場合です。この問題が発生した場合は、いずれかの Bean の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 クラスローダの子です。
クラスローダの詳細については、『ebLogic Server アプリケーションの開発』の「クラスローダの概要」と「アプリケーションのクラスローダ」を参照してください。
WebLogic Server では、ejb-client.jar ファイルを使用できます。
ejb-client.jar には、ホーム インタフェースとリモート インタフェース、主キー クラス (適当な場合)、およびそれらが表すファイルが格納されます。 WebLogic Server は、クラスパスで参照されるファイルを ejb-client.jar に追加しません。 これにより、WebLogic Server では、java.lang.String などの汎用クラスを追加することなく、必要なカスタム クラスを ejb-client.jar に追加することができます。
たとえば、ShoppingCart リモート インタフェースが Item クラスを返すメソッドを持っているとします。このクラスはこのリモート インタフェースが参照し、ejb-jar ファイルに入っているので、クライアント Jar に含まれます。
ejb-client.jar ファイルの作成は、Bean の ejb-jar.xml デプロイメント記述子ファイルでコンフィグレーションします。ejbc で Bean をコンパイルすると、WebLogic Server が ejb-client.jar を作成します。
ejb-client.jar を指定するには、次の手順に従います。
<ejb-client-jar>ShoppingCartClient.jar</ejb-client-jar>
$ java weblogic.ejbc <ShoppingCart.jar>
外部クライアントは、ejb-client.jar をそれぞれのクラスパスに含めます。Web アプリケーションは、ejb-client.jar を ¥lib ディレクトリに含めます。
注意: WebLogic Server のクラスローディング動作は、クライアントがスタンドアロンかどうかによって異なります。 ejb-client.jar にアクセスできるスタンドアロンのクライアントは、ネットワーク経由で必要なクラスをロードできます。 ただしセキュリティ上の理由から、サーバ インスタンスで動作しているプログラムに基づくクライアントはネットワーク経由でクラスをロードできません。
JAR ファイルが別の JAR ファイルを参照できるかどうかを指定するには、マニフェスト ファイルを使用します。スタンドアロン EJB ではマニフェスト クラスパスを使用できません。マニフェスト クラスパスは、EAR ファイル内にデプロイされているコンポーネントに対してのみサポートされています。クライアントは、マニフェスト ファイルのクラスパス エントリにある client.jar を参照します。
マニフェスト ファイルを使用して別の JAR ファイルを参照するには、次の手順に従います。
注意: このエントリは、スペース区切りの JAR ファイル リストです。
EJB のホーム/リモート インタフェースを呼び出し側コンポーネントのクラスパスに配置するには、次の手順に従います。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |