第8章 Enterprise JavaBeans 3.2
8.1. はじめに
8.1.1. Enterprise JavaBeans の概要
Enterprise JavaBeans (EJB) 3.1 は、Enterprise Bean と呼ばれるサーバー側のコンポーネントを使用して、分散型のトランザクション型のセキュアな移植可能な Java EE アプリケーションを開発するための API です。エンタープライズ Bean は、再利用を促すような分離方法でアプリケーションのビジネスロジックを実装します。Enterprise JavaBeans 3.1 は、JavaEE 仕様 JSR-318 として文書化されています。
JBoss EAP 6 では、Enterprise JavaBeans 3.1 仕様を使用してビルドされたアプリケーションが完全にサポートされます。
8.1.2. EJB 3.1 機能セット
次の機能は EJB3.1 でサポートされています
- セッション Bean
- メッセージ駆動 Bean
- インターフェースなしビュー
- ローカルインターフェース
- リモートインターフェース
- JAX-WS Web サービス
- JAX-RSWeb サービス
- タイマーサービス
- 非同期呼び出し
- インターセプター
- RMI/IIOP の相互運用性
- トランザクションサポート
- セキュリティー
- 組み込み API
以下の機能は EJB3.1 でサポートされていますが、プルーニング用に提案されています。これは、これらの機能が JavaEE7 でオプションになる可能性があることを意味します。
- エンティティー Bean (コンテナーおよび Bean で管理された永続性)
- EJB 2.1 エンティティー Bean クライアントビュー
- EJB クエリー言語 (EJB QL)
- JAX-RPC ベースの Web サービス: エンドポイントおよびクライアントビュー
8.1.3. EJB 3.1 Lite
EJB Lite は、EJB3.1 仕様のサブセットです。これは、Java EE6Web プロファイルの一部として完全な EJB3.1 仕様のより単純なバージョンを提供します。
EJB Lite は、次の方法でエンタープライズ Bean を使用する Web アプリケーションでのビジネスロジックの実装を簡素化します。
- Web アプリケーションに意味のある機能のみをサポートし、
- EJB を Web アプリケーションと同じ WAR ファイルにデプロイできるようにします。
8.1.4. EJB3.1Lite の機能
EJB Lite には、次の機能が含まれています。
- ステートレス、ステートフル、およびシングルトンセッション Bean
- ローカルビジネスインターフェイスとインターフェイスなし Bean
- インターセプター
- コンテナー管理および Bean 管理のトランザクション
- 宣言型およびプログラムによるセキュリティー
- 組み込み API
EJB3.1 の次の機能は特に含まれていません。
- リモートインターフェース
- RMI/IIOP の相互運用性
- JAX-WS Web サービスエンドポイント
- EJB タイマーサービス
- 非同期セッション Bean の呼び出し
- メッセージ駆動 Bean
8.1.5. エンタープライズ Bean
エンタープライズ Bean は、Enterprise JavaBeans (EJB)3.1 仕様、JSR-318 で定義されているサーバー側のアプリケーションコンポーネントです。エンタープライズ Bean は、再利用を促進するために、分離された方法でアプリケーションビジネスロジックを実装するように設計されています。
エンタープライズ Bean は Java クラスとして記述され、適切な EJB アノテーションが付けられます。Java EE アプリケーションの一部としてデプロイすることも、独自のアーカイブ (JAR ファイル) でアプリケーションサーバーにデプロイできます。アプリケーションサーバーは、各エンタープライズ bean のライフサイクルを管理し、セキュリティー、トランザクション、同時実行管理などのサービスを提供します。
また、エンタープライズ Bean は任意の数のビジネスインターフェースを定義できます。ビジネスインターフェースは、クライアントで利用できる Bean のメソッドの制御を強化し、リモート JVM で実行しているクライアントへのアクセスも許可します。
エンタープライズ Bean には、セッション Bean、メッセージ駆動型 Bean、およびエンティティー Bean の 3 種類があります。
重要
エンティティー Bean は EJB3.1 で非推奨になり、Red Hat は代わりに JPA エンティティーの使用を推奨しています。Red Hat は、レガシーシステムとの下位互換性のためにエンティティー Bean の使用のみを推奨しています。
8.1.6. EnterpriseBeans の作成の概要
エンタープライズ Bean は、特定のアプリケーションクライアントから切り離された方法でビジネスロジックをカプセル化するように設計されたサーバー側コンポーネントです。エンタープライズ Bean 内にビジネスロジックを実装することにより、それらの Bean を複数のアプリケーションで再利用できるようになります。
エンタープライズ Bean は、注釈付きの Java クラスとして記述されており、特定の EJB インターフェイスを実装したり、エンタープライズ Bean と見なされるために EJB スーパークラスからサブクラス化したりする必要はありません。
EJB 3.1 エンタープライズ Bean は、Java アーカイブ (JAR) ファイルにパッケージ化され、デプロイされます。エンタープライズ BeanJAR ファイルは、アプリケーションサーバーにデプロイすることも、エンタープライズアーカイブ (EAR) ファイルに含めてそのアプリケーションとともにデプロイすることもできます。エンタープライズ Bean を Web アプリケーションと一緒に WAR ファイルにデプロイすることも可能です。
8.1.7. セッション Bean ビジネスインターフェイス
8.1.7.1. エンタープライズ Bean のビジネスインターフェース
EJB ビジネスインターフェースは、Bean 開発者が作成する Java インターフェースで、クライアントで利用可能なセッション Bean のパブリックメソッドの宣言を提供する 。セッション Bean は任意の数のインターフェースを実装できます。なし ("no-interface" bean) も含まれます。
ユーザーインターフェースは、ローカルインターフェースまたはリモートインターフェースとして宣言できますが、両方に宣言することはできません。
8.1.7.2. EJB ローカルビジネスインターフェース
EJB ローカルビジネスインターフェースは、Bean とクライアントが同じ JVM にある場合に使用できるメソッドを宣言します。セッション Bean がローカルビジネスインターフェースを実装すると、そのインターフェースで宣言されたメソッドのみがクライアントで利用できます。
8.1.7.3. EJB リモートビジネスインターフェース
EJB リモートビジネスインターフェースは、リモートクライアントで使用できるメソッドを宣言します。リモートインターフェースを実装するセッション Bean へのリモートアクセスは、EJB コンテナーにより自動的に提供されます。
リモートクライアントは、異なる JVM で実行されているクライアントです。また、デスクトップアプリケーションや、異なるアプリケーションサーバーにデプロイされた Web アプリケーション、サービス、およびエンタープライズ Bean を含めることができます。
ローカルクライアントは、リモートビジネスインタフェースで公開されるメソッドにアクセスできます。
8.1.7.4. EJB No-interface Beans
いずれのビジネスインターフェースも実装しないセッション Bean は、インターフェースなしの bean (no-interface bean) と呼ばれます。no-interface Bean のすべてのパブリックメソッドは、ローカルクライアントからアクセスできます。
また、ビジネスインターフェースを実装するセッション Bean を作成して、"no-interface" ビューを公開することもできます。