dポイントプレゼントキャンペーン実施中!

「ひとつのインターフェースで複数のEJBクラスを参照する」の続き

こんにちは、k-makotoと申します。

インターフェースが同じなら↓のような構成は可能でしょうか?
「ひとつのインターフェースで複数のEJBクラスを参照する」の投稿の
続きなのですが、


仮にBeanごとにインタフェースが違うならこの構成はむりなのでしょうか?


子サーブレット1                                 Bean1
子サーブレット2---共通HomeI/F、共通HomeI/F-----Bean2
子サーブレット3                                 Bean3
子サーブレットN                                 BeanN



Bean1の機能
データベースの検索 Data_Search()
検索結果をCSVファイルで取得する Get_Csv()

Bean2の機能
テーブルの更新 Data_Update()
テーブルの新規作成 Data_New()

BeanNの機能
........

のような場合だったら共通RemoteI/F側にBean1~Nのインタフェースの定義をしてさらに
Bean1~Nに使わないインターフェースの実装も行わないとだめだということですよね.... .

A 回答 (1件)

> 仮にBeanごとにインタフェースが違うならこの構成はむりなのでしょうか?



「ひとつのインターフェースで複数のEJBクラスを参照する」の続きと言うことですが、Beanごとのインタフェースが違うんなら、Remote や Homeインタフェースを共有するというのは、EJB設計上問題があると思うのですが。。。

> 共通RemoteI/F側にBean1~Nのインタフェースの定義をしてさらに
> Bean1~Nに使わないインターフェースの実装も行わないとだめだということですよね.... .

そういうことになりますね。。。


このような状況に対応する方法としては、以下の2パターンがあると思います。
1.EJBを呼び出すメソッドを子サーブレットに実装させる
2.個別のEJBを呼び出すEJBを用意する
  プロキシクラスとか、アダプタクラスとか呼ばれる呼び出し元と
  呼び出し先の間のブリッジになるクラスを使う

1の方は、親サーブレットに callEJB() といったメソッドを用意し、子サーブレットで、EJB呼び出しを実装するというものです。
最初の質問で、子サーブレットは独自の処理を実装するとなっていましたが、
EJBクラスのI/Fが別々ということであれば、それは既に独自の処理となると思うので、
EJB呼び出し用のメソッドを子サーブレットごとに実装していきます。

2の方では、ブリッジになるEJBを用意し、サーブレットからはこのEJBに呼び出したい
EJBの情報を渡します。それで、このブリッジになるEJB内で、受け取った情報に
合わせたEJBを呼び出して結果を返却します。


2の方は、フレームワークを作成するときなどに一般に使われる方法だと思います。
特に、ブリッジに渡す情報を外部ファイル化したり、パラメータ化したりすると
新しいEJBの追加時の修正個所が局所化できると思います。
ただし2の場合、単純な場合でも、少なくとも2回EJB呼び出しが発生するので、
呼び出しのオーバーヘッドが気になるところですが。。。

# EJB2.0 からは、LocalHome、Local インタフェースが定義できるので、
# それらを使うことも考慮すべきですね
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
いろいろと考えたのですが、2の方法で考えてみようかと
思っています。EJBを2回呼び出さないといけないので
処理時間が気になりますが、それは実際に作ってみて検証を
してみようと思っています。

お礼日時:2002/07/09 14:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!