Oracle® Fusion Middleware Oracle WebLogic Server Enterprise JavaBeansバージョン3.0のプログラミング 11g リリース1(10.3.4) B61625-02 |
|
前 |
次 |
以下の節では、EJB 3.0の新機能とプログラミング・モデルについて説明します。
ここでは、Javaプログラミング、Java Platform, Enterprise Edition (Java EE)バージョン5、およびEJB 2.xの概念と機能に精通している読者を対象としています。
Enterprise 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デプロイメント記述子ファイル(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 Enterprise JavaBeansのプログラミング』の「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で実行するデフォルト・インターセプタ・メソッドを構成できます。
以下の機能は、Enterprise 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、インターセプタ・クラス、エンティティの呼出し方法などに関する単純なサンプルについては、第3章「Enterprise 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」を参照してください。