- PR -

分散環境のEJB呼び出し

1
投稿者投稿内容
頭脳パン
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 89
投稿日時: 2005-10-12 13:12
EJBの呼び出し元とは物理的に別のサーバーのEJBを呼び出したいのですが
イメージがわきません。(EJB2.0使用)
現状は、以下のようにEJBを呼んでいますが、これだと呼び出し元にある
EJBを呼んでしまいます。

Context initialContext = new InitialContext();
Object obj = (Object) initialContext.lookup("java:comp/env/ejb/xxxBean");
xxxBeanHome home = (xxxBeanHome) PortableRemoteObject.narrow(obj, xxxBeanHome.class);
xxxBeanRemote remote = home.create();
ResultData resultData = remote.xxx();

web.xml
<ejb-ref>
<ejb-ref-name>ejb/xxxBean</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>xxxBeanHome</home>
<remote>xxxBeanRemote</remote>
</ejb-ref>

別のサーバーのIPやホスト名等を指定して呼ぶのかなぁと思うのですが
どこで指定するのでしょう?
media
会議室デビュー日: 2003/04/10
投稿数: 7
投稿日時: 2005-10-12 19:07
公開するEJBのJNDIの設定で一緒に設定できたかと思います。

weblogicであれば、weblogic.xmlにこんな感じで。
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>ejb/HogeHogeEJB</ejb-ref-name>
<jndi-name>t3://別サーバのURL:ポート/JNDI名</jndi-name>
</ejb-reference-description>
</reference-descriptor>

JNDI名の前に記述すればOKかと。複数サーバにEJBがデプロイされている場合は、
ポート番号の後にカンマで区切りでURLを続けて書けばOKです。

他のJ2EEサーバでは試した事無いので外してたらごめんなさい。
頭脳パン
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 89
投稿日時: 2005-10-13 10:45
mediaさんありがとうございます。
まだ、環境が手元になくて試せないので下調べ更に行っています。

そこで↓のような記述をみつけたのですがInitialContextに
URLを指定しても出来るんでしょうか。

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, xxxFactory?);
p.put(Context.PROVIDER_URL, URL);
Context ctx = new InitialContext(p);
Object home = ctx.lookup(JNDI名);

ちなみに、コンテナは富士通のInterstageです。
初めて使うもので勝手がよくわからないです。
media
会議室デビュー日: 2003/04/10
投稿数: 7
投稿日時: 2005-10-13 12:46
InitialContextにURLを渡す方法でも可能かと思いますが、DDに定義しておいた
方が、
・実装コードは接続先を知らなくていい
・登録されているjndi-name単位で接続先が制御可能
等のメリットがあるかと思います。
DDであれば、デプロイされている状態からDDの書き換えも可能だたと思います。
コードに書くと変更があった場合再ビルド&デプロイが必要になります。

Interstageなら
http://interstage.fujitsu.com/jp/technical/tips/tip024003_29.html
に書かれてる、Interstage.xmlに記述すれば解決するんじゃないですかね。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-14 13:32
どのアプリケーションサーバでも使えるかどうかはわかりませんが、一般的な方法としては
jndi.propertiesで定義する方法があります。

java.naming.factory.initial=ファクトリクラス名
java.naming.provider.url=プロバイダURL

と記述したjndi.propertiesファイルをクラスパスの通っている場所(Webアプリケーションで
あれば通常はWEB-INF/classes)に置いておけば最初のコードのままで動くはずです。
1

スキルアップ/キャリアアップ(JOB@IT)