EJB アーキテクチャー

このトピックでは、Sun Microsystems 社 の Enterprise JavaBeans (EJB) バージョン 2.x アーキテクチャー仕様で定義されている分散コンポーネント・アーキテクチャーのハイレベルな概要を説明します。

Enterprise JavaBeans の詳細な仕様とテクノロジーの説明は、Web サイト java.sun.com でご覧になれます。

エンタープライズ Bean は、アプリケーション開発者にいくつかの利点を提供します。以下のことが実現されます。

エンタープライズ Bean
エンタープライズ Bean は、 分散およびトランザクション指向エンタープライズ・アプリケーションの非ビジュアル・コンポーネントです。 通常、エンタープライズ Bean は、EJB コンテナーにデプロイされ、EJB サーバー上で実行されます。 これらは、デプロイメント記述子を変更することによってカスタマイズ可能であり、 新規アプリケーションを作成するために他の Bean とアセンブルすることができます。 エンタープライズ Bean には、セッション Bean、エンティティー Bean、およびメッセージ駆動型 Bean の 3 つの型があります。セッション Bean とメッセージ駆動型 Bean は、ビジネス・プロセスをモデル化するように設計されたおおまかなコンポーネントですが、エンティティー Bean は、詳細なデータ・オブジェクトをモデル化するために使用されます。
  • セッション Bean: セッション Bean は、非永続エンタープライズ Bean です。これらはステートフルまたはステートレスのいずれかです。
    • ステートフル・セッション Bean は、単一クライアントに代わって動作し、 複数のメソッド呼び出しとトランザクションにわたって、 クライアント固有のセッション情報 (会話型状態と呼ばれます) を保守します。 これは、単一クライアント/サーバー・セッションの期間中存在します。
    • ステートレス・セッション Bean は、会話型状態を保持せず、自身のコンテナーによってプールされ、複数のクライアントからの複数の要求を処理します。
  • エンティティー Bean: エンティティー Bean は、永続的データを含み、 さまざまな永続的データ・ストアに保存が可能なエンタープライズ Bean です。各エンティティー Bean は、独自の ID を持っています。自己のパーシスタンスを管理するエンティティー 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 サーバーの機能は、例えばデータベース・サーバーやアプリケーション・サーバーが提供することもできます。

フィードバック