EJB の基礎

EJB には、分散型でコンポーネントベースのアプリケーションを作成するためのコンポーネントアーキテクチャがあります。これは、J2EE (Java 2 Enterprise Edition) アーキテクチャの重要な部分であり、EJB 仕様の機能だけを使用して書かれた EJB は、いずれの J2EE アプリケーションサーバでも使用できます。

「エンタープライズ」は、この略語の中で重要な言葉です。EJB はエンタープライズレベルのアプリケーション用アーキテクチャであり、EJB プログラミングモデルは、EJB API (Application Programming Interface:アプリケーションプログラミングインターフェイス) を理解している経験豊富なサーバサイド Java 開発者に最も適しています。ただし、EJB 仕様に対応するには、アプリケーションサーバがさまざまな EJB コンテナサービスを提供する必要があります。これらのサービスを使用することにより、ビジネスロジックの開発に専念できます。さらに JRun では、スタブレスオープンディレクトリデプロイ、エンタープライズデプロイウィザード、XDoclet サポートなどの機能を提供して、EJB 開発処理が簡素化されています。

EJB のパーツ

次の表で、EJB の構成を説明します。
パーツ
説明
ホームインター
フェイス
EJB のインスタンスの作成、削除、配置などの EJB のライフサイクルオペレーションを管理するメソッドを提供します。ホームインターフェイスには 2 つのタイプがあります。
  • リモートホーム リモートクライアントによって使用されます。
  • ローカルホーム 同じ JRun サーバで実行中のクライアントによって使用されます。
コンポーネント
インターフェイス
EJB クライアントに適用されるビジネスメソッドを定義します。コンポーネントインターフェイスには 2 つのタイプがあります。
  • リモート リモートクライアントによって使用されます。
  • ローカル 同じ JRun サーバで実行中のクライアントによって使用されます。
bean 実装
ビジネスロジックを実行するメソッドが含まれます。また、必要に応じて EJB 開発者が実装するコールバックメソッドも含まれます。
デプロイメントディスクリプタ
EJB とそれに必要なサービスを説明する宣言セマンティクスを指定します。

EJB の使用については、弟 14 章、「EJB プログラミングテクニック」を参照してください。

EJB クライアント

EJB クライアントは次のようにリモートアクセスとローカルアクセスを使用できます。

アプリケーションデプロイ担当者は、クライアントがアクセスするすべての EJB のためのコンパイル済みインターフェイスが、クライアントのクラスパスに含まれていることを確認する必要があります。

メモ:  元の EJB 仕様では、クライアントが bean とそのメソッドにアクセスするのに、リモートメソッド呼び出し (RMI) を使用する必要がありました。EJB の優れた使用方法が整備されるにつれて、EJB クライアントと EJB コンテナを同じアプリケーションサーバのインスタンスに配置する方法でパフォーマンスを最適化するデザインパターンが現れました。しかし、このようなクライアントはやはり RMI のオーバーヘッドに制約されたため、多くのアプリケーションサーバが、同じ場所に配置されたクライアントを最適化するオプションを提供しました。最新の EJB 仕様では、アプリケーションサーバは、ローカルとリモートの両方のインターフェイスをサポートする必要があります。

リモート bean

リモート EJB はクライアントのさまざまな JVM で実行されます。EJB がリモートで実行されることによって、ネットワークの任意の場所に配置されたクライアントからアクセスできます。

次のように bean のリモートインターフェイスを定義することによって、リモート能力を有効化できます。

次の例に示すように、ejb-jar.xml ファイルで EJB を定義する場合は、remote 要素と
remote-home 要素も入れる必要があります。

...
<session>
  <display-name>Simple</display-name>
  <ejb-name>Simple</ejb-name>
  <home>SimpleHome</home>
  <remote>Simple</remote>
  <ejb-class>SimpleBean</ejb-class>
  <session-type>Stateless</session-type>
  <transaction-type>Container</transaction-type>
</session>
...

リモートとローカルの EJB クライアントのコーディングの詳細については、弟 14 章、「EJB プログラミングテクニック」を参照してください。

ローカル bean

ローカル EJB はクライアントと同じサーバで実行されます。ローカルで実行されることにより、EJB が RMI 呼び出しのオーバーヘッドを回避します。

典型的なシナリオは、1 つ以上のローカルエンティティ bean に対してクライアントとして動作するステートレスセッション bean に関係があります。

次のように、bean のローカルインターフェイスを定義することによって、ローカル能力を有効化できます。

EJB のためにリモートインターフェイスとローカルインターフェイスを実装できますが、これは一般的ではありません。

次の例に示すように、ejb-jar.xml ファイルで EJB を定義する場合は、local 要素と local-home 要素も入れる必要があります。

...
<session>
  <display-name>SimpleLocal</display-name>
  <ejb-name>SimpleLocal</ejb-name>
  <local-home>SimpleLocalHome</local-home>
  <local>SimpleLocal</local>
  <ejb-class>SimpleLocalBean</ejb-class>
  <session-type>Stateless</session-type>
  <transaction-type>Container</transaction-type>
</session>
...

リモートとローカルの EJB クライアントのコーディングの詳細については、弟 14 章、「EJB プログラミングテクニック」を参照してください。

デプロイメントディスクリプタ

EJB デプロイメントディスクリプタは XML 形式のテキストファイルで、1 つ以上の EJB に必要なコンポーネント、機能、サービスを定義する要素が含まれます。多くの開発者は、テキストエディタを使用して手作業でコーディングすることによって、デプロイメントディスクリプタを管理しています。さらに、JRun では、エンタープライズデプロイウィザードと XDoclet サポートが提供され、デプロイメントディスクリプタ要素を自動的に生成できます。次の例に示すように、EJB デプロイメントディスクリプタには ejb-jar.xml という名前を付け、インターフェイスと bean の実装に関連付けられている META-INF ディレクトリに保管する必要があります。

これは、META-INF/ejb-jar.xml ファイルでの EJB の定義方法のイメージを示しています。

詳細については、弟 14 章、「EJB プログラミングテクニック」を参照してください。JRun 特有のデプロイメントディスクリプタを使用して、JRun 特有の機能を実装することもできます。詳細については、第 14 章および『JRun アセンブルとデプロイガイド』を参照してください。