はじめまして、MAKOTOと申します。
EJBを使った開発を行っているのですが、
サーブレットからEJBクラスを呼ぶとき
現在はRemoteインターフェイス、Homeインターフェース、EJBクラス1を1対
にしているのを
Remoteインターフェイス1
Homeインターフェース1
EJBクラス1
Remoteインターフェイス2
Homeインターフェース2
EJBクラス2
↓のように1対Nの関係で呼び出しを行いたい
Remoteインターフェイス
Homeインターフェース
EJBクラス1
EJBクラス2
EJBクラス3
EJBクラス4
EJBクラス5
このようなことは可能なのでしょうか?
No.1ベストアンサー
- 回答日時:
おそらく、EJBの継承を考えた呼び出しということなんだと思います。
実際に簡単なEJBを作成し、JBoss上でEJBを実行してみたところ、
可能でした。
メインのEJBクラス(デプロイメントディスクリプタに指定EJBクラス)
public class MultipleBean implements SessionBean {
protected MultipleBean beanObj;
public void message() throws RemoteException {
beanObj.message();
}
public void ejbCreate(String implementors) throws RemoteException {
try {
beanObj = (MultipleBean)Class.forName(implementors).newInstance();
} catch (Throwable ex) {
throw new RemoteException();
}
}
---- EJBクラス1 ----
public class MultipleBean1 extends MultipleBean {
public void message() {
System.out.println( "MultipleBean1 Call" );
}
}
---- EJBクラス2 ----
public class MultipleBean2 extends MultipleBean {
public void message() {
System.out.println( "MultipleBean2 Call" );
}
}
これで、EJBクライアント(確認では単純なJavaクラスですやりましたが)で
Homeインタフェースを使ってcreateするときに、引数でクラス名を指定して
やると、確かにそれぞれのEJBを呼ぶことはできました。。。
ただし、あくまでも呼び出せるかどうかを検証したレベルであり、EJBクラス(業務ロジック)が
複雑だったり、複数クライアントからの要求はもちろん、いろんな状況で正しく動くかどうかは
確認していませんので、もし実際にこのようなコードを記述するなら、もっと考慮が必要だと思いますが、、、
EJBコンテナがEJBクライアントからEJBクラスにアクセスするための方法としてRemote
インタフェースとHomeインタフェースを提供するという前提を考えると、どうも小手先だけの
間違った実装のような気もしますね。。。
本当なら、やはり1対1で対応するようにRemoteインタフェースとHomeインタフェースを定義すべきなんだと思いますが。。。
spoonyさんお返事ありがとうございました。
その後色々と考えたり、周りの人に相談したりしたのですが、
確かにspoonyさんのご指摘にもあったように
↓の構成のように1対1の関係の設計の方が
いいような気がします。
|-------------Home--------
| |
クライアント--| Bean
| |
|-------------Remote-----
下手に継承などをつかわずに単純にしたほうが確かに見やすいと思います。
そもそもなぜこのようなことをしたかったのかというとEJBの呼び出しを
共通化させたかったのです。現在↓のようなシステムの構成を考えています。
親サーブレット-------------|
|
|
|----子サーブレット1-------EJB1
|
|
|
|----子サーブレット2-------EJB2
|
|
|
|----子サーブレット3-------EJB3
|
|
|
|----子サーブレットN-------EJBN
親サーブレットは子サーブレットの共通する処理を定義し、
子サーブレットはその機能独自の処理のみを実行するようにして、
共通化された部分は単純に親から呼び出すといった形にしたかったのです。
そしてその共通化させるという中にインタフェースの呼び出しがありその呼び出しを
共通化させるため1つのHome、Remoteインタフェースで複数の
Beanのインスタンス化を行いたかったのです。
子サーブレットは親サーブレットにどのBaenのインスタンス化を行うか
メッセージを送り、親サーブレットはそのメッセージを受け取りHome、
Remoteインタフェースの作成を行い、子サーブレットは単純に
呼び出すだけにしたかったのです。
No.2
- 回答日時:
> 子サーブレットは親サーブレットにどのBaenのインスタンス化を行うか
> メッセージを送り、親サーブレットはそのメッセージを受け取りHome、
> Remoteインタフェースの作成を行い、子サーブレットは単純に
> 呼び出すだけにしたかったのです。
すみません。
どうも、大きな勘違いをしていたようです。
↓に示されたようなシステムにおいて、子サーブレットからのメッセージに
合わせて親サーブレット内でEJBにアクセスするというのであれば、単純に
デプロイメント・ディスクリプタ内で同一のRemote、Homeインタフェースを
持つ別のEJBを定義してやればよい話ですね。。。
ejb-jar.xml で
<ejb-name>beanmultiple1</ejb-name>
<home>beanMultiple.BeanMultipleHome</home>
<remote>beanMultiple.BeanMultiple</remote>
<ejb-class>beanMultiple.BeanMultipleBean</ejb-class>
:
<ejb-name>beanmultiple2</ejb-name>
<home>beanMultiple.BeanMultipleHome</home>
<remote>beanMultiple.BeanMultiple</remote>
<ejb-class>beanMultiple.BeanMultipleBean2</ejb-class>
:
という感じで、同一のインタフェースを持つ2つのEJBを定義し、別々の
名前でJNDIに登録しておいて、例えば子サーブレットからメッセージとして
JNDI名をもらって親サーブレットでもらったJNDI名を使ってEJBを呼び出す
という方法をとればいいのではないでしょうか?
これだと、EJBクラスに1対1に対応するHomeインタフェースと
Remoteインタフェースが存在することになり、EJBの設計上、問題
ないように思います。
何度もお返事をいただいて誠にありがとうございます。
この方法でもう一度設計をよく見直して行きます。
後、ポイントをつけるのを忘れてしまい申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
シングルページでのカレント表...
-
ATLとMFCの違いは何でしょうか?
-
IPアドレスの3バイト目の呼び方
-
クラスモジュールの使い方が詳...
-
現在または将来、需要のある言...
-
A・B・Cクラスとは?
-
オブジェクト間の依存性とは
-
IPアドレスのクラスAを取得して...
-
eclipse でクラスに色
-
DIVの中の<a>について
-
FunkctionとMethodの違いについ...
-
成人式の後中3のクラスで集まろ...
-
進学校通ってたんですけど、眼...
-
3年間同じクラスになる確率
-
重複エラーを解決するには
-
無名インナークラスからアクセ...
-
「天声人語」をインターネット...
-
JSP jsp:usebean で総称型クラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列の重複する値とその個数を...
-
どこからも呼ばれていない無意...
-
java eclipse 型に解決できません
-
「天声人語」をインターネット...
-
main()を持つクラスが2つ以上...
-
1 つのヘッダファイルに複数の...
-
IPアドレスのクラスAを取得して...
-
同一パッケージにあるクラスが...
-
同じクラスにならない確率を教...
-
重複エラーを解決するには
-
共通で使う関数を集めたクラス...
-
3年間同じクラスになる確率
-
複数のクラスで共通した関数を...
-
同じパッケージ、クラス名が含...
-
A・B・Cクラスとは?
-
自作のクラスファイルがインポ...
-
ATLとMFCの違いは何でしょうか?
-
eclipse でクラスに色
-
コンボボックスのマウスホイー...
-
UMLのクラス図はmain()も含むん...
おすすめ情報