はじめまして、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で質問しましょう!
似たような質問が見つかりました
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- ドラマ 自分の好きな映画、ドラマのジャンルについて 今まで見たドラマで愛の不時着、イカゲーム、25、21、今 2 2023/05/21 13:19
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- いじめ・人間関係 高2。今度クラス会があります。 行ってみたいけど、クラスではぼっちだし、楽しめるか不安なので参加する 6 2023/03/24 21:15
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- 高校 クラス一位に戻りたいのですが、 4 2023/06/11 17:41
- 高校 クラス目標について案があれば教えてくださいっ! 先日、クラス目標を決めようと言う話がクラスであったの 2 2023/04/13 15:54
- 学校 中2女子不登校です。中2の5月辺りからクラス替えの変化で1年の頃からのストレスによる頭痛が悪化し、体 2 2022/03/23 17:16
- 学校 うちの学校では1.2.3と3つのクラスがあり数学の授業の際はAクラスとBクラスに分かれるのですがプリ 1 2022/06/23 19:19
- 学校 上手く言えないんですけど、音が妙に気になるというか… 外も、学校のクラスの中も全部全部音が気になって 2 2022/09/25 19:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
string formatについて
-
「自作クラスの型」にキャスト...
-
java eclipse 型に解決できません
-
内部クラスを別ファイルに
-
javaで画像ファイルの入出力方法
-
エクセルVBAでのwitheventsにつ...
-
サーブレット実行時のエラー
-
体育祭クラス全員参加のムカデ...
-
河合塾のクラス分けについて
-
ASP.NETでのジェネリックの利用
-
クラスにアクセスできません。
-
自作のクラスファイルがインポ...
-
Javaの継承についてです。 この...
-
ATLとMFCの違いは何でしょうか?
-
ベクターワークスでの【クラス...
-
A・B・Cクラスとは?
-
クラスの継承でメンバ変数が・・
-
グローバルIPとプライベートIP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報