![]() ![]() ![]() ![]() |
以下の節では、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 の詳細については、『BEA Kodo documentation』の「Enterprise JavaBeans 3 Persistence」を参照してください。 |
以降では、EJB 2.X から EJB 3.0 になってプログラミング モデルと要件がどのように変更されたかについて概説し、EJB 3.0 の新機能について簡単に説明します。
これらの点については、「Enterprise JavaBeans 3.0 仕様入門」(dev2dev の記事) で詳しく解説されています。
EJB 2.X から 3.0 への変更点は以下のとおりです。
ejb-jar.xml
など) を作成する必要がなくなった。Bean ファイル自体の中で、メタデータ アノテーションを使用してメタデータをコンフィグレーションできます。ただし、必要であれば、引き続き XML デプロイメント記述子を使用することもできます。衝突が発生した場合は、デプロイメント記述子の値でアノテーションの値がオーバーライドされます。 注意 : | このリリースでは、WebLogic 固有の機能は WebLogic デプロイメント記述子 (weblogic-ejb-jar.xml など) でしかコンフィグレーションできません。 |
javax.ejb.SessionBean
や javax.ejb.MessageDrivenBean
を実装する必要はありません。javax.ejb.SessionBean
や javax.ejb.MessageDrivenBean
を実装する必要がなくなった結果、Bean ファイルに ejbCreate
や ejbPassivate
などのライフサイクル コールバック メソッドを実装する必要もなくなった。ただし、これらのコールバック メソッドを実装したい場合は、たとえば @javax.ejb.PostActivate
のように、それらのメソッドに任意の名前を付けて適切なアノテーションとして追加できます。@javax.ejb.Remote
または @javax.ejb.Local
アノテーションを使用して指定できます。javax.ejb.EJBObject
や javax.ejb.EJBLocalObject
を拡張しないようにする必要があります。java.rmi.Remote
を拡張していない場合は、ビジネス インタフェース メソッドから java.rmi.RemoteException
が送出されない可能性がある。
EJB 3.0 プログラミング モデルは非常にシンプルであるため、BEA では EJB 3.0 Bean において EJBGen タグおよびコード生成ツールをサポートしないことになりました。このツールは、2.X Bean でのみ使用できます。詳細については、「EJBGen リファレンス」を参照してください。
@javax.ejb.Stateless
、@javax.ejb.Stateful
、@javax.ejb.MessageDriven
、または @javax.persistence.Entity
) のみ。それ以外のアノテーションのデフォルト値は、EJB の典型的かつ標準的な用途を反映したものになっています。これにより、典型的な EJB をプログラミングする場合であれば Bean ファイルに記述するコードが減り、デフォルト値が適切でない場合にのみアノテーションを追加するだけで済みます。
以下の機能は、エンタープライズ 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
のサブインタフェース (たとえば、BEA Kodo の場合の KodoEntityManager
) を提供している場合は、EJB 3.0 仕様で説明されているような複雑なルックアップ メカニズムを使用するのではなく、単純に注入される側の変数のデータ型を設定できます。次に例を示します。
@PersistenceContext private KodoEntityManager em;
EntityManager
および BEA 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 のインストール ディレクトリ (たとえば /bea/wlserver_10.0
) です。
このドキュメントでは、3.0 のセッション EJB およびメッセージ駆動型 EJB をプログラミングする方法や、セッション EJB から 3.0 エンティティを呼び出す方法について説明します。3.0 エンティティの実際のプログラミングやコンフィグレーションの方法については説明しません。これらについては、『BEA Kodo documentation』の「Enterprise JavaBeans 3 Persistence」を参照してください。
![]() ![]() ![]() |