特集
2004/01/30 18:55:00 更新


特集:第1回 EJBの仕組みを知ろう (6/6)


EJBの持ち味「RMI-IIOP」によるネットワークを介した呼び出し

 EJBでは、RMI-IIOP(Remote Method Invocation over Internet Inter-ORB Protocol)を使い、ネットワーク越しにメソッドが呼び出される。これは、すでにFig.4やFig.5に示したように、Enterprise Beanが複数のサーバに分散していたり、WebコンテナとEJBコンテナが同一のサーバでなかったりする構成を許すためだ。


EJB 2.0では、リモートではなくローカルなメソッド呼び出しもサポートされている。ローカルなメソッド呼び出しを使うには、EJBObjectインタフェース、EJBHomeインタフェースの代わりに、それぞれEJBLocalObjectインタフェース、EJBLocalHomeインタフェースを使えばよい。そうすれば、引数や戻り値をシリアル化する必要がないためリモート呼び出しよりも高速になるというメリットがある(シリアル化とは端的に言うと、引数やメソッドをエンコードしてすべて文字列に変換する処理だ)。また、下記に述べる制限もなくなる。

しかしEJBLocalObjectインタフェースとEJBHomeインタフェースを利用した場合には、EJBコンテナと同一のサーバー(もっと厳密に言えば、同一の管理下にあるJavaVM)からしかEnterprise Beanを利用できなくなる。ローカルな呼び出しは、たとえば、複数のEnterprise Beanがあり、そのEnterprise Bean同士が同一のEJBコンテナに配備され、互いに呼び出し合う場合などに使われる。

 EJBでは、RMI-IIOPを使ってメソッドの呼び出しをするため、メソッドの実装として、次の制限がある。

制限1 EJBObjectインタフェース(EJBオブジェクト)の各メソッドでは、ネットワーク経由での呼び出しの例外に備え、java.rmi.RemoteExceptionをスローするように宣言しなければならない


Beanクラス自身のメソッドでは、java.rmi.RemoteExceptionのスローを宣言する必要はない。なぜなら、Beanクラスのメソッドは、Fig.6に示したように、EJBコンテナ内で、EJBオブジェクトによって呼び出されるため、リモート経由のアクセスとはならないためだ。

制限2 引数や戻り値として、プリミティブ型、Serializable、Remote型以外の型は利用できない

要素配備のための配備記述子

 このように、Enterprise Beanは、「ホームオブジェクト」「EJBオブジェクト」「Beanオブジェクト」の3つで構成されるため、結局のところはEnterprise Beanを作るために次の要素が必要となる。

1. Beanクラス

 Bean自身のクラス。このクラスには、任意のビジネスロジックのメソッドを実装する。一般に、Beanクラスは、XXXBeanのように最後にBeanを付加する名称にするのが慣例だ。

 このクラスは、EJB対応ではないJava Beansと作り方が同じである。ただし、EJB対応とするためには、EnterpriseBeanインタフェースを実装(implements)しなければならない。

 ただし、実際にBeanクラスを構築する場合には、EnterpriseBeanインタフェースを直接実装するのではなく、Enterprise Beanの種類に応じて、次のそれぞれのインタフェースを実装する。どのインタフェースもEnterpriseBeanインタフェースから派生したものだ。

  • セッションBeanの場合

 SessionBeanインタフェース

  • エンティティBeanの場合

 EntityBeanインタフェース

  • メッセージドリブンBeanの場合

 MessageDrivenBeanインタフェース

 すでに説明したように、ホームオブジェクトのxxxメソッドが呼び出されると、BeanクラスのejbXxxという名前のメソッドが呼び出されるため、ホームインタフェースの実装によって、適したejbXxxのメソッドも実装する必要がある。たとえばホームインタフェースにcreateメソッドを実装したならば、ejbCreateメソッドを、removeメソッドを実装したならばejbRemoveメソッドをそれぞれ実装しなければならない。

2. ホームインタフェース

 EJBHomeインタフェースから継承したインタフェースとして用意する。このインタフェースには、createメソッド、removeメソッド、findxxxメソッドなどを必要に応じて実装する。一般的に、ホームインタフェースの名称は、XXXHomeのようにリモートインタフェースの末尾にHomeを付加させた名称とするのが慣例だ。

3. リモートインタフェース

 EJBObjectインタフェースから継承したインタフェースとして用意する。このインタフェースには、「1.」のBeanクラスに実装したメソッドと同じものを実装する。ただし各メソッドは、「java.rmi.RemoteException」例外をthrowするように記述しなければならない。

 実際にEJBコンテナで動作させるためには、これらの要素をどのように組み合わせてEnterprise Beanを構成するのかを指定する設定ファイルが必要となる。そのファイルは、「配備記述子(DD:Deployment Definition)」と呼ばれるものだ。配備記述子は、「ejb-jar.xml」という名称のXML形式ファイルとなる。

 今回の第1回目は、EJBの基礎についてを解説してきた。第2回目では、Beanのより深い面について触れていくことにしよう。

関連記事
▼MySQLとJBossが協業
▼SunとJBossのJava論争が決着
▼JBoss、顧客に免責保証提供
▼JBoss、顧客保護の方針を明らかに
▼オープンソース分野での勢力拡大を目指すJBoss

関連リンク
▼Java チャンネル

前のページ | 1 2 3 4 5 6 |      

[大澤文孝,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.