Java2 Enterprise Editionの基礎知識

EJBの動作原理を教えてください

テンアートニ 中越智哉
2001/2/27

 サーブレット(以下Servlet)にServletコンテナがあるのと同じように、EJBも、JavaVMの上で直接動作するわけではなく、EJBコンテナの上で動作するようになっています。

 EJBコンテナとは、EJBを動作させるための機能(例えば、システムレベルのサービスなど)を実装した環境で、個々のEJBでは隠されていたり抽象化されているサービスをEJBに代わって実行します。

 さらに、EJBコンテナを動作させる環境として、EJBサーバが必要です。EJBサーバはEJBコンテナと外部リソースとの通信を行う機能を実装しています。1つのEJBサーバで、複数のEJBコンテナを管理して動作させることもできます。

 では、EJBが動作する手順はどうなっているのでしょうか? まず、ひとくちにEJBといった場合には、以下の3つの要素から構成されたものを指しています。

●Bean Class
EJBの本体となるクラス。ここに実際のビジネスロジックなどを記述します。

●Home Interface
EJBの生成、消滅、検索を行うためのインターフェイス。それぞれの機能に対応したメソッドのシグニチャが定義されています。

●Remote Interface
ビジネスロジックの呼び出しを行うためのインターフェイス。Bean Classのビジネスロジックメソッドのシグニチャが定義されています。

 これらがどういった役割を果たしているかを含めて、以下にEJBの動作手順を説明しましょう。

EJBの動作手順。(1)〜(5)の内容は以下の記事を参照

(1) EJBクライアント(EJBを利用する側)が、必要なEJBがどこにあるかを、ネーミングサービス(JNDIなど)に問い合わせます(実際には、Beanのインスタンスを生成するためのHome Interfaceへの参照を問い合わせます)。

(2) ネーミングサービスは、呼び出し元に、Home Interfaceへの参照を返します。以下のリストは、 「Calc」という名前で登録されたBeanのHome Interfaceを取得するコードの例です。

javax.naming.InitialContext ctx = new javax.naming.InitialContext();
Object homeObject = ctx.lookup("Calc");
CalcHome calcHome = (CalcHome)javax.rmi.PortableRemoteObject.narrow(homeObject,CalcHome.class);

(3) EJBクライアントは、取得したHome Interfaceを用いて、Beanインスタンスの生成や検索を行います。

(4) Beanインスタンス生成の際に、戻り値として Remote Interfaceの参照が取得できます。以下のリストは、 「Calc」という名前のBeanのインスタンスを生成するコードの例です。

Calc calcRemote = calcHome.create();

(5) EJBクライアントは、Remote Interfaceのメソッドを呼び出すことにより、 ビジネスロジックを実行します。以下のリストは、 「Calc」という名前のBeanのビジネスロジックを呼び出すコードの例です。

int number = 256;
int answer = calcRemote.pow(number);

 さまざまなシステムレベルのサービスが実装されたEJBコンテナと、EJBの間にインターフェイスを設け、それを介してEJBにアクセスする構造になっています。こうすることによって、EJBを呼び出す側にも、EJBの側にも、複雑なサービスにかかわる処理を意識させることなく処理を行うことができ、コンポーネントとしての再利用性を高めることが可能になっています。

 

「Java Solution FAQ」




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間