[Seasar-user:179] Re: RMI $B$NAPJ}8~8F$S=P$7$K$D$$$F(B

B isid.co.jp Yasuo Higa higa
2003年 11月 12日 (水) 15:43:39 JST


<[E-MAIL ADDRESS DELETED]> の、
   "[Seasar-user:178] RMIの双方向呼び出しについて" において、
   "Hidetoshi Hosokawa <[E-MAIL ADDRESS DELETED]>"さんは書きました:

ひがです。

> ほそかわです。
> 
> remoteNotificationListenerで詰まっています。
> 
> やりたいことは、別々のマシン上で動く2つのSeasar間で、
> RMIの双方向通信を行いたいのです。
> 
> やりたいことのイメージはこんなです。
> *) 鯖A(Seasar1) と 鯖B(Seasar2)があります。
> 1) 鯖AはRMIで鯖BのMBeanを呼び出します。
> 2) 鯖Bは、1)の呼び出しの返答を鯖Aに送りたいとします。
> 3) 鯖BはRMIで鯖AのMBeanを呼び出します。
> 
> なのですが鯖AのSeasarは、鯖BのSeasarが起動していないとRMIの通信ができず、
> 鯖BのSeasarは鯖AのSeasarが起動していないとRMI通信できません(T_T)
> 
> Seasar起動時に出るエラーはこんなです。
> org.seasar.util.SeasarException: 
> [ESSR0017]Exception occurred, because java.net.
> ConnectException: Connection refused: connect
> 
> それはそうだよな…って感じなのですが、
> RMIを使って双方向通信する方法は無いでしょうか?
> 
MBeanProxyを使えばできます。
鯖Aが起動している状態で、
A a = new A();
JMXService.registerMBean(a, "mbean:name=A");
BMBean b = (BMBean) MBeanProxy.create(BMBean.class, "mbean:name=B",
  鯖BのSeasarContext);
a.setB(b);

鯖Bが起動している状態で、
B b = new B();
JMXService.registerMBean(b, "mbean:name=B");
AMBean a = (AMBean) MBeanProxy.create(AMBean.class, "mbean:name=A",
  鯖AのSeasarContext);
b.setA(a);

とやれば、お互いに通信できると思います。
RemoteNotificationListenerでできるように考えてみます。
---
Yasuo Higa <[E-MAIL ADDRESS DELETED]>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.




Seasar-user メーリングリストの案内