Oracle® Fusion Middleware Oracle WebLogic Server エンタープライズ JavaBeans バージョン 3.0 プログラマーズ ガイド 11g リリース 1 (10.3.1) B55529-01 |
|
戻る |
次へ |
以下の節では、EJB 3.0 の新機能とプログラミング モデルについて説明します。
ここでは、Java プログラミング、Java Platform, Enterprise Edition (Java EE) バージョン 5、および EJB 2.x の概念と機能に精通している読者を対象としています。
エンタープライズ JavaBeans (EJB) は、コンポーネントベースのビジネス アプリケーションを開発およびデプロイするための Java Platform, Enterprise Edition (Java EE) バージョン 5 テクノロジです。EJB は強力で有用な技術ですが、バージョン 2.X 以前のプログラミング モデルは複雑で分かりにくく、非常に単純な EJB でも複数の Java ファイルとデプロイメント記述子を作成する必要がありました。このような複雑さが、EJB の普及を妨げていました。
そのため、EJB 仕様バージョン 3.0 では、EJB をより簡単にプログラムできるようにすることが目標の 1 つになっています。具体的には、必要となるプログラミング アーティファクトの数を減らし、Bean ファイルをより簡単かつ直感的にプログラミングできるようにする EJB 固有のメタデータ アノテーションのセットが導入されています。
EJB 3.0 仕様のもう 1 つの目標は、永続性フレームワークを標準化し、エンティティ Bean プログラミング モデルとオブジェクト リレーショナル (O/R) マッピング モデルの複雑さを軽減することです。
注意 : このドキュメントでは、3.0 エンティティ Bean については説明しません。3.0 エンティティ Bean の詳細については、Oracle Kodo ドキュメントの「Java Persistence API」を参照してください。 |
以降では、EJB 2.X から EJB 3.0 になってプログラミング モデルと要件がどのように変更されたかについて概説し、EJB 3.0 の新機能について簡単に説明します。
EJB 2.X から 3.0 への変更点は以下のとおりです。
EJB デプロイメント記述子ファイル (ejb-jar.xml
など) を作成する必要がなくなった。Bean ファイル自体の中で、メタデータ アノテーションを使用してメタデータをコンフィグレーションできます。ただし、必要であれば、引き続き XML デプロイメント記述子を使用することもできます。衝突が発生した場合は、デプロイメント記述子の値でアノテーションの値がオーバーライドされます。
Bean ファイルとして、POJO (Plain Old Java Object) を使用できる。javax.ejb.SessionBean
や javax.ejb.MessageDrivenBean
を実装する必要はありません。
javax.ejb.SessionBean
や javax.ejb.MessageDrivenBean
を実装する必要がなくなった結果、Bean ファイルに ejbCreate
や ejbPassivate
などのライフサイクル コールバック メソッドを実装する必要もなくなった。ただし、これらのコールバック メソッドを実装したい場合は、たとえば @javax.ejb.PostActivate
のように、それらのメソッドに任意の名前を付けて適切なアノテーションとして追加できます。
Bean ファイルでビジネス インタフェースを使用する必要がある。ビジネス インタフェースは、Bean ファイルで明示的に実装するか、@javax.ejb.Remote
または @javax.ejb.Local
アノテーションを使用して指定できます。
ビジネス インタフェースは POJO (Plain Old Java Object) である。javax.ejb.EJBObject
や javax.ejb.EJBLocalObject
を拡張しないようにする必要があります。
ビジネス インタフェースが java.rmi.Remote
を拡張していない場合は、ビジネス インタフェース メソッドから java.rmi.RemoteException
が送出されない可能性がある。
EJB 3.0 プログラミング モデルは非常にシンプルであるため、Oracle では EJB 3.0 Bean において EJBGen タグおよびコード生成ツールをサポートしないことになりました。このツールは、2.X Bean でのみ使用できます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「EJBGen リファレンス」を参照してください。
Bean ファイルでメタデータ アノテーションを使用してメタデータをコンフィグレーションできるようになり、デプロイメント記述子は必要なくなった。
Bean ファイルで必須となるメタデータ アノテーションは、記述する EJB のタイプを指定するアノテーション (@javax.ejb.Stateless
、@javax.ejb.Stateful
、@javax.ejb.MessageDriven
、または @javax.persistence.Entity
) のみ。それ以外のアノテーションのデフォルト値は、EJB の典型的かつ標準的な用途を反映したものになっています。これにより、典型的な EJB をプログラミングする場合であれば Bean ファイルに記述するコードが減り、デフォルト値が適切でない場合にのみアノテーションを追加するだけで済みます。
Bean ファイルで、依存性注入がサポートされるようになった。「依存性注入」では、Bean コンテキスト内の別の EJB、リソース、環境エントリへの参照が、EJB コンテナによって Bean ファイル内の変数またはセッター メソッドに自動的に提供 (「注入」) されます。
Bean ファイルでインターセプタがサポートされるようになった。インターセプタは、EJB でアスペクト指向プログラミングを使用するための標準的な方法です。
2 種類のインターセプタ メソッドをコンフィグレーションできる。ビジネス メソッドをインターセプトするメソッドと、ライフサイクル コールバックをインターセプトするメソッドです。
特定の順序でチェーンとして実行する複数のインターセプタ メソッドをコンフィグレーションできる。
JAR ファイルに含まれるすべての EJB で実行するデフォルト インターセプタ メソッドをコンフィグレーションできる。
以下の機能は、エンタープライズ JavaBeans 3.0 仕様には含まれていませんが、EJB 3.0 プログラミング モデルをより簡略化するための付加価値機能です。
変数名に基づく永続性ユニットの自動デプロイメント
セッション Bean 内でエンティティをクエリおよび更新する場合は、@javax.persistence.PersistenceContext
または @javax.persistence.PersistenceUnit
アノテーションを変数に追加します。これにより、変数に永続性ユニットの情報が注入されます。unitName
属性を指定すると、EJB JAR ファイルの persistence.xml
ファイル内の特定の永続性ユニットを参照できます。この場合は、EJB コンテナによって永続性ユニットが自動的にデプロイされ、persistence.xml
ファイル内のリストに従って、その JNDI 名が永続ユニット名に設定されます。注入された変数の名前を、変数に注入したい永続性ユニットとまったく同じ名前にすることもできます。この場合は、unitName
属性を指定する必要はありませんが、永続性ユニットは自動的にデプロイされ、その JNDI 名が永続ユニット名に設定されます。
セッション Bean からエンティティを呼び出す方法については、「3.0 エンティティを呼び出す」を参照してください。アノテーションのリファレンス情報については、「エンティティ Bean との対話に使用するアノテーション」を参照してください。
特定の永続性プロバイダから EntityManager
を注入する場合のベンダ固有のサブインタフェースのサポート
@javax.persisetence.PersistenceContext
または @javax.persistence.PersistenceUnit
を使用して変数に永続性コンテキストを注入する場合、注入される側となる変数の標準データ型は EntityManager
になります。永続性プロバイダが EntityManager
のサブインタフェース (たとえば、Oracle Kodo の場合の KodoEntityManager
) を提供している場合は、EJB 3.0 仕様で説明されているような複雑なルックアップ メカニズムを使用するのではなく、単純に注入される側の変数のデータ型を設定できます。次に例を示します。
@PersistenceContext private KodoEntityManager em;
EntityManager
および Oracle Kodo が提供する KodoEntityManager
の詳細については、「3.0 エンティティを呼び出す」および「KodoEntityManager」を参照してください。
ステートレスおよびステートフル セッション Bean、インターセプタ クラス、エンティティの呼び出し方法などに関する単純なサンプルについては、「エンタープライズ JavaBeans 3.0 の単純なサンプル」を参照してください。この節では、これらのサンプルについて詳しく解説しています。これらのサンプルの目的は、EJB のビジネス コードをプログラミングする方法を説明することではなく、EJB 3.0 の新しいメタデータ アノテーションとプログラミング モデルの使用方法を示すことです。
実際のビジネス コードを含むより複雑なサンプルは、インストールした WebLogic Server の samples ディレクトリ内 (WL_HOME/samples/server/examples/src/examples/ejb/ejb30
) に含まれています。WL_HOME
は、WebLogic Server のインストール ディレクトリ (たとえば /Oracle/Middleware/wlserver_10.3
) です。
このドキュメントでは、3.0 のセッション EJB およびメッセージ駆動型 EJB をプログラミングする方法や、セッション EJB から 3.0 エンティティを呼び出す方法について説明します。3.0 エンティティの実際のプログラミングやコンフィグレーションの方法については説明しません。この詳細な手順については、Oracle Kodo ドキュメントの「Java Persistence API」を参照してください。