このトピックで、Sun Microsystems 社の Enterprise JavaBeans™ (EJB) バージョン 2.x アーキテクチャー仕様で定義されている分散コンポーネント・アーキテクチャーの大まかな概要を説明します。
Enterprise JavaBean の完全仕様および技術説明については、java.sun.com の Web サイトから情報を取得することができます。
エンタープライズ Bean は、アプリケーション開発者にいくつかの利点を提供します。それらは以下のとおりです。
- 異なるベンダーのツールを使用して開発されたコンポーネントを結合して、分散アプリケーションをビルドすることができる。
- アプリケーションの作成が容易になる。トランザクションや状態管理の低レベルの詳細、マルチスレッド化、リソース・プール、および他の複雑な低レベルの API に取り組む必要はありません。ただし、低レベル API が必要な場合には、エキスパート・プログラマーが低レベル API に直接アクセスすることができます。
- 開発すれば、再コンパイルあるいはソース・コード変更をしなくても、複数プラットフォームにデプロイすることができる。
- エンタープライズ Bean の使用をコントロールする EJB 仕様と、他の Java™ API および CORBA との互換性を提供する。この仕様は、エンタープライズ Bean と非 Java アプリケーション間のインターオペラビリティーも提供します。
- エンタープライズ Bean
- エンタープライズ Bean は、分散およびトランザクション指向エンタープライズ・アプリケーションの非ビジュアル・コンポーネントです。 通常、エンタープライズ Bean は、EJB コンテナーにデプロイされ、EJB サーバー上で実行されます。これらは、デプロイメント記述子を変更することによってカスタマイズ可能であり、新規アプリケーションを作成するために他の Bean とアセンブルすることができます。エンタープライズ Bean には、セッション Bean、エンティティー Bean、
およびメッセージ駆動型 Bean の 3 つのタイプがあります。セッション Bean およびメッセージ駆動型 Bean は、ビジネス・プロセスのモデル化を目的とした粗粒度のコンポーネントであり、一方エンティティー Bean は、細粒度のデータ・オブジェクトを
モデル化するために使用されます。
- セッション Bean: セッション Bean は、非永続のエンタープライズ Bean です。
これらはステートフルまたはステートレスのいずれかです。
- ステートフル・セッション Bean: 単一クライアントに代わって動作し、複数のメソッド呼び出しとトランザクションにわたって、
クライアント固有のセッション情報 (会話型状態と呼ばれます) を保守します。
これらは、単一クライアント/サーバー・セッションの期間中存在します。
- ステートレス・セッション Bean: いかなる会話型状態も保守せず、そのコンテナーによってプールされ、複数のクライアントからの複数の要求を処理します。
- エンティティー Bean: エンティティー Bean は、永続的データを含み、
さまざまな永続的データ・ストアに保存が可能なエンタープライズ Bean です。
各エンティティー Bean は、それぞれ独自の識別を持っています。自己のパーシスタンスを管理するエンティティー Bean は、Bean 管理パーシスタンス (BMP) エンティ
ティー Bean と呼ばれます。
自己のパーシスタンスを EJB コンテナーに委譲させるエンティティー Bean は、コンテナー管理パーシスタンス (CMP) エンティティー Bean と呼ばれます。
- メッセージ駆動型 Bean: メッセージ駆動型 Bean は、JMS メッセージを受信して処理するエンタープライズ Bean です。
セッション Bean やエンティティー Bean と異なり、メッセージ駆動型 Bean にはインターフェースがありません。これらの Bean にはメッセージングでのみアクセスできますが、会話型状態を保守することはありません。メッセージ駆動型 Bean は、キューとリスナーとの非同期通信を可能にし、メッセージ処理とビジネス・ロジックとの分離を実現します。
- リモート・クライアント・ビュー
- リモート・クライアント・ビュー仕様は、EJB 1.1 から使用可能になりました。エンタープライズ Bean のリモート・クライアント・ビューは、ロケーションに依存しません。
Bean インスタンスと同じ JVM で実行中のクライアントは、同一または別のマシン上の別の JVM で実行中のクライアントと同じ API を使用して Bean にアクセスします。リモート・クライアント・ビューは、以下の 2 つのインターフェースから成ります。
- リモート・インターフェース: リモート・インターフェースは、クライアントがエンタープライズ Bean に対して呼び出すことのできるリモート・ビジネス・メソッドを指定します。
- リモート・ホーム・インターフェース: リモート・ホーム・インターフェースは、リモート・クライアントで使用されるメソッドを指定して、エンタープライズ Bean クラス
のインスタンスの位置決め、作成、削除を行います。
- ローカル・クライアント・ビュー
- ローカル・クライアント・ビュー仕様は、EJB 2.0 以降で使用可能です。
リモート・クライアント・ビューとは違って、Bean のローカル・クライアント・ビューは、ロケーションに依存します。ローカル・クライアント・ビューがエンタープライズ Bean にアクセスするには、ローカル・クライアントのほかに、同じ JVM にローカル・クライアント・ビューを配置するエンタープライズ Bean の両方が必要です。このためローカル・クライアント・ビューには、リモート・クライアント・ビューにはあるロケーション透過性がありません。ローカル・インターフェースおよびローカル・ホーム・インターフェースは、ローカル・クライアントであるエンタープライズ Bean からのライト・ウェイト・アクセスをサポートしています。セッション Bean およびエンティティー Bean は、それらのクライアントと緊密に結合しており、リモート・メソッド呼び出しと通常関連付けられたオーバーヘッドのないアクセスを許可します。ローカル・クライアント・ビューは、以下の 2 つのインターフェースから成ります。
- ローカル・インターフェース: ローカル・インターフェースは、リモート・インターフェースのライト・ウェイト・バージョンであり、ローカル・クライアントのためのものです。
ローカル・インターフェースは、ローカル・クライアントに呼び出されるビジネス・ロジック・メソッドを含みます。
- ローカル・ホーム・インターフェース: ローカル・ホーム・インターフェースは、ローカル・クライアントで使用されるメソッドを指定して、エンタープライズ Bean クラスのインスタンスの位置決め、作成、削除を行います。
- Web サービス・クライアント・ビュー
- EJB 2.1 仕様では、EJB アーキテクチャーが Web サービス・サポートを採用しました。セッション Bean のクライアントに、Web サービス・クライアントを使用できます。
Web サービス・クライアントは、ステートレス・セッション Bean の Web サービス・クライアント・ビューを利用できます。このビューには、対応するサービス・エンドポイント・インターフェースが備わっています。
- サービス・エンドポイント・インターフェース
- ステートレス・セッション Bean のサービス・エンドポイント・インターフェースは、セッション Bean の機能を Web サービス・エンドポイントとして公開します。
Web サービスの Web サービス記述言語 (WSDL) 文書には、メッセージに対して作動するエンドポイントのセットとして、Web サービスが記述されています。WSDL 文書に、ステートレス・セッション Bean のサービス・エンドポイント・インターフェースをエンドポイントの 1 つとして含めることができます。
既存のステートレス・セッション Bean を、Web サービス・クライアント・ビューが含まれるように変更したり、あるいは既存の WSDL からサービス・エンドポイント・インターフェースをマップして正しいインターフェースが提供されるようにすることができます。
Web サービス・クライアント・ビューはロケーションに依存しないので、リモート呼び出しによってアクセスすることが可能です。
- EJB クライアント JAR ファイル
- EJB クライアント JAR ファイルは、オプションの JAR ファイルです。このファイルには、クライアント・プログラムが使用する必要のあるクライアント・インターフェースと
、EJB JAR ファイル内に含まれるエンタープライズ Bean のクライアント・ビューを含める
ことができます。
EJB モジュールの EJB クライアント JAR ファイルを作成しないと決定する場合、すべてのクライアント・インターフェース・クラスは EJB JAR ファイルに含まれます。デフォルトでは、ワークベンチはそれぞれの EJB プロジェクトごとに EJB クライアント JAR プロジェクトを作成します。
- EJB コンテナー
- EJB コンテナーは、1 つ以上のエンタープライズ Bean を管理するランタイム環境です。EJB コンテナーは、エンタープライズ Bean オブジェクトのライフサイクルを管理し、分散トランザクションを調整し、オブジェクトのセキュリティーを実装します。各 EJB コンテナーは一般に EJB サーバーによって提供され、EJB コンテナーには、EJB サーバーで実行されるエンタープライズ Bean のセットが含まれます。
- デプロイメント記述子
- デプロイメント記述子は、エンタープライズ Bean と共に EJB JAR ファイルまた
は EAR ファイルにパッケージされた XML ファイルです。デプロイメント記述子には、エンタープライズ Bean の内容および構造が記述してあるメタデータや、EJB コンテナーのランタイム・トランザクションおよびセキュリティー情報が含まれています。
- EJB サーバー
- EJB サーバーは、
エンタープライズ Bean を使用するサーバー・アプリケーションの実行をサポートするためのランタイム環境を提供する、ハイレベルなプロセスまたはアプリケーションです。EJB サーバーは、JNDI アクセス可能な命名サービスを提供し、クライアント・アプリケーションへのリソースの割り振りを管理および調整し、システム・リソースにアクセスし、トランザクション・サービスを提供します。EJB サーバーの機能は、例えば、データベースやアプリケーション・サーバーが提供することもできます。