エンタープライズ Bean
エンタープライズ Bean は Java™ コンポーネントの 1 つで、他のリソースと結合して Java アプリケーションを作成することができます。 エンタープライズ Bean には、エンティティー Bean、セッション Bean、 およびメッセージ駆動型 Bean の 3 種類があります。
Bean はすべて Enterprise JavaBeans (EJB) コンテナー内にあり、 Bean と Bean があるアプリケーション・サーバーとの間のインターフェースはこのコンテナーによって提供されます。
EJB 2.1 以前のバージョンの仕様では、エンティティー Bean は 永続データを保管する手段として定義されているため、ある形体のパーシスタント・ストレージに接続する必要があります。このストレージは、データベース、既存のレガシー・アプリケーション、ファイル、 または他のタイプのパーシスタント・ストレージである可能性があります。
EJB 3.0 仕様では、 EJB 1.1 スタイルのエンティティー Bean は非推奨です。Java パーシスタンス API (JPA) 仕様は、 非推奨のエンタープライズ Bean を置き換えるためのものです。Java パーシスタンス API (JPA) 置き換えはエンティティー・クラスと呼ばれていますが、エンティティー・エンタープライズ Bean と混同してはなりません。JPA エンティティーはエンタープライズ Bean ではなく、EJB コンテナー内で実行する必要はありません。
セッション Bean は一般的に、アプリケーション用のハイレベルおよびミッドレベルのビジネス・ロジックを含みます。 セッション Bean の各メソッドは、特定のハイレベル操作を実行します。これには例えば、注文の発注登録や口座間での送金があります。 セッション Bean は、そのビジネス・ロジックの過程で、エンティティー Bean のメソッドを呼び出すことがあります。
セッション Bean は、ステートフル、ステートレス、または singleton のいずれかにできます。ステートフル Bean のインスタンスは、その存続期間内で単一のクライアントによる使用を想定していますが、クライアントは、そのクライアントの存続期間中、相互に関連した一連のメソッド呼び出しを実行します。 一例として、ショッピング・カート では、クライアントがオンライン・ショッピングのセッション中にカートにアイテムを追加します。 一方、ステートレス Bean のインスタンスは一般的に、その存続期間内に複数のクライアントにより使用されるため、単一のメソッド呼び出しの範囲で完了することのできるビジネス・ロジックの操作に適しています。ステートフル Bean はどうしても必要な場合にのみ使用すべきです。ステートレス Bean を使用することにより、アプリケーションのデバッグ、保守、拡張性が向上します。
EJB 3.1 仕様で singleton セッション Bean が導入されています。EJB コンテナーは、singleton セッション Bean の 1 つのインスタンスのみを初期化し、そのインスタンスはすべてのクライアントによって共有されます。1 つのインスタンスがすべてのクライアントで共有されるため、singleton セッション Bean には特別なライフサイクルおよび並行性のセマンティクスがあります。singleton セッション Bean は、ビジネス・ローカル、ビジネス・リモート、および Web サービスのクライアント・ビューを持つことができます。EJB 2.1 のローカルまたはリモートのクライアント・ビューを持つことはできません。
- ビジネス・インターフェースを定義する。
- ビジネス・インターフェースを実装するクラスを定義する。
- アノテーションまたは XML デプロイメント記述子を使用して、メタデータを追加する。
package ejb3demo;
@Stateful
public class Cart3Bean implements ShoppingCart {
private ArrayList contents = new ArrayList();
public void addToCart (Object o) {
contents.add(o);
}
public Collection getContents() {
return contents;
}
}
モジュールが EJB 3.x モジュールである場合、EJB コンポーネントは @EJB および他の注入可能な
@Resource 参照などのアノテーションを使用することができます。Web アプリケーション・クライアントおよびアプリケーション・クライアントは、デプロイメント記述子で定義された EJB 参照を使用することができます。 参照がホーム・インターフェースを持たない EJB 3.x セッション Bean 用である場合、その参照はデプロイメント記述子内で NULL <home> または <local-home> 設定を使用して定義する必要があります。
Web アプリケーション・クライアントおよびアプリケーション・クライアントは、同じエンタープライズ・アーカイブ (EAR) ファイル内の EJB セッション Bean への参照用の @EJB 注入を使用することもできます。 ただし、バインディングでコンテナー内の AutoLink サポートを使用するか、またはアノテーションで、デプロイメント記述子によって定義されてアプリケーションのインストール時にバインドされた参照の名前を使用する必要があります。AutoLink の詳細情報については、 トピック『EJB 3.x アプリケーション・バインディングのサポート』を参照してください。
- EJB コンテナーおよび Java Message Service (JMS) プロバイダーは、 連携してメッセージを処理します。 メッセージが JMS 経由で別のアプリケーション・コンポーネントから到着すると、EJB コンテナーは、onMessage メソッド呼び出しを使ってメッセージをメッセージ駆動型 Bean インスタンスに転送します。そのインスタンスでメッセージが処理されます。 その他の点で、 メッセージ駆動型 Bean はステートレス・セッション Bean と同じです。
- EJB コンテナーおよび Java Connector Architecture (JCA) リソース・アダプターは、連携して、エンタープライズ情報システム (EIS) からのメッセージを処理します。EIS からメッセージが到着すると、リソース・アダプターはメッセージを受信して、メッセージを処理するメッセージ駆動型 Bean に送信します。メッセージ駆動型 Bean には、他のエンタープライズ Bean へのサービス提供と同様に、EJB コンテナーによるトランザクション・サポートなどのサービスが提供されます。
データ・アクセスを必要とする Bean は、データ・ソースを使用します。 このデータ・ソースは、パーシスタント・ストレージ・メカニズムへの接続プールを定義する管理リソースです。