第6章 Enterprise JavaBeans

6.1. はじめに

6.1.1. Enterprise JavaBeans の概要

Enterprise JavaBeans (EJB) 3.1 は、Enterprise Bean と呼ばれるサーバーサイドコンポーネントを使用してセキュアでポータブルな分散 Java EE アプリケーションを開発するための API です。Enterprise Bean は、再利用を促進する分離された方法でアプリケーションのビジネスロジックを実装します。Enterprise JavaBeans 3.1 は、Java EE 仕様 JSR-318 としてドキュメント化されています。
JBoss Enterprise Application Platform 6 では、Enterprise JavaBeans 3.1 仕様を使用してビルドされたアプリケーションが完全にサポートされます。EJB コンテナは JBoss EJB3 コミュニティープロジェクト (http://www.jboss.org/ejb3) を使用して実装されます。

6.1.2. EJB 3.1 機能セット

以下の機能が EJB 3.1 でサポートされています。
  • セッション Bean
  • メッセージ駆動型 Bean
  • ノーインターフェースビュー (No-interface view)
  • ローカルインターフェース
  • リモートインターフェース
  • JAX-WS web サービス
  • JAX-RS web サービス
  • タイマーサービス
  • 非同期呼び出し
  • インターセプター
  • RMI/IIOP 相互運用性
  • トランザクションサポート
  • セキュリティー
  • 埋め込み API
以下の機能は EJB 3.1 で対応していますが、「プルーニング」用として提案されています。そのため、これらの機能は Java EE 7 ではオプションとなる可能性があります。
  • エンティティー Bean (コンテナおよび Bean 管理の永続性)
  • EJB 2.1 エンティティー Bean のクライアントビュー
  • EJB クエリ言語 (EJB QL)
  • JAX-RPC ベースの Web サービス (エンドポイントおよびクライアントビュー)

6.1.3. EJB 3.1 Lite

EJB Lite は EJB 3.1 仕様のサブセットであり、Java EE 6 Web プロファイルの一部として完全な EJB 3.1 仕様の単純なバージョンを提供します。
EJB Lite により、エンタープライズを使用すると、エンタープライズ Bean を使用した Web アプリケーションでのビジネスロジックの実装が簡略化されます。
  1. Web アプリケーションに適切な機能のみをサポートします。
  2. EJB を同じ WAR ファイルで Web アプリケーションとしてデプロイできます。

6.1.4. EJB 3.1 Lite の機能

EJB Lite には、次の機能があります。
  • ステートレス、ステートフル、およびシングルトンセッション Bean
  • ローカルビジネスインターフェースおよび「インターフェースなし」Bean
  • インターセプター
  • コンテナ管理および Bean 管理トランザクション
  • 宣言およびプログラミング可能なセキュリティ
  • 埋め込み API
EJB 3.1 no are specifically not included:
  • リモートインターフェース
  • RMI と IIOP の相互運用性
  • JAX-WS Web サービスエンドポイント
  • EJB タイマーサービス
  • 非同期セッション Bean 呼び出し
  • メッセージ駆動 Bean

6.1.5. エンタープライズ Bean

Enterprise JavaBeans (EJB) 3.1 仕様、JSR-318 に定義されているように、エンタープライズ Bean はサーバー側のアプリケーションコンポーネントのことです。エンタープライズ Bean は疎結合方式でアプリケーションのビジネスロジックを実装し再利用ができるように設計されています。
エンタープライズ Bean は Java クラスとして記述され、適切な EJB アノテーションが付けられます。アプリケーションサーバーに独自のアーカイブ (JAR ファイル) でデプロイするか、 Java EE アプリケーションの一部としてデプロイすることが可能です。アプリケーションサーバーは各エンタープライズ Bean のライフサイクルを管理し、セキュリティーやトランザクション、同時処理制御などのサービスを提供します。
エンタープライズ Bean はビジネスインターフェースをいくつでも定義することができます。ビジネスインターフェースは、クライアントが使用できる Bean のメソッドに対して優れた制御機能を提供し、リモート JVM で実行されているクライアントへのアクセスも許可します。
EJB 3.1 に定義されているエンタープライズ Bean にはセッション Bean とメッセージ駆動型 Bean の 2 種類があります。
エンティティー Bean は EJB2 で定義された 3 つ目の型のエンタープライズ Bean です。JPA エンティティーが導入されたため、エンティティー Bean の使用は廃止される予定です。

6.1.6. エンタープライズ Bean の書き方

エンタープライズ Bean はサーバー側のコンポーネントで、特定のアプリケーションクライアントから分離された状態でビジネスロジックをカプセル化するためのものです。エンタープライズ Bean 内にビジネスロジックを実装すると、これらの Bean を複数のアプリケーションで再使用することができます。
エンタープライズ Bean はアノテーション付けされた Java クラスとして書かれます。特定の EJB インターフェースを実装する必要や、エンタープライズ Bean として考慮される EJB スーパークラスからサブクラス化される必要はありません。
EJB 3.1 エンタープライズ Bean は Java アーカイブ (JAR) ファイルにパッケージ化されデプロイされます。エンタープライズ Bean の JAR ファイルは、アプリケーションサーバーへデプロイしたり、エンタープライズアーカイブ (EAR) ファイルに含まれるようにしてアプリケーションと共にデプロイすることが可能です。また、Bean が EJB 3.1 Lite 仕様に準拠する場合は、エンタープライズ Bean を Web アプリケーションと共に WAR ファイルにデプロイすることも可能です。

6.1.7. セッション Bean ビジネスインターフェース

6.1.7.1. エンタープライズ Bean のビジネスインターフェース

EJB ビジネスインターフェースは Bean 開発者によって書かれた Java インターフェースで、クライアントが使用できるセッション Bean のパブリックメソッドの宣言を提供します。セッション Bean は ゼロ (「インターフェースのない」Bean) を含む、あらゆる数のインターフェースを実装することが可能です。
ビジネスインターフェースをローカルインターフェースまたはリモートインターフェースとして宣言することができますが、両方を宣言することはできません。

6.1.7.2. EJB ローカルビジネスインターフェース

EJB ローカルビジネスインターフェースは、Bean とクライアントは同じ JVM にある場合に利用可能なメソッドを宣言します。セッション Bean がローカルのビジネスインターフェースを実装する場合、そのインターフェースで宣言されたメソッドのみがクライアントで利用できます。

6.1.7.3. EJB リモートビジネスインターフェース

EJB リモートビジネスインターフェースは、リモートクライアントで利用可能なメソッドを宣言します。リモートインターフェースを実装するセッション Bean へのリモートアクセスは、自動的に EJB コンテナにより提供されます。
リモートクライアントとは別の JVM で実行するクライアントのことで、別のアプリケーションサーバーにデプロイされている Web アプリケーション、サービス、エンタープライズ Bean、デスクトップなどが含まれます。
ローカルクライアントは、リモートのビジネスインターフェースが公開するメソッドへアクセス可能です。これは、リモートクライアントと同じメソッドを使い実行され、リモートリクエストを出した時に付随する通常のオーバーヘッドがすべて発生します。

6.1.7.4. EJB のインタフェース以外の Bean

ビジネスインターフェースを実装しないセッション Bean はインターフェース以外の Bean と呼ばれます。インターフェース以外の Bean の公開メソッドはすべてローカルのクライアントにアクセスできます。
ビジネスインターフェースを実装するセッション Bean は、"non-interface" ビューを表示するために記述可能です。