如何在java中存储rmi连接?

时间:2009-11-20 20:06:25

标签: java rmi

我在这里有问题。 我有一个客户端A代码,通过RMI调用B。之后,我通过JMS向真实实现C发送队列请求。但是,我不知道A的“地址”。有没有办法以某种方式存储连接数据,以便我可以在以后将数据返回到A

基本上,问题是B可能有大量请求,需要将其与请求者同步。怎么做?

示例:

A:

...
    rmiB.HelloWorld("Sys");
...

B:

String HelloWorld(String s) {
    ...
   sendToJMS(s);
    ...
   return????
}

C:

String HelloWorldOnJMS(String aff) {
    return "aff+2"
}

3 个答案:

答案 0 :(得分:1)

如果你不能修改A,那么B需要负责阻塞,直到C产生结果,并且作为RMI方法的结果返回该结果同步。

所以似乎问题更多的是C如何回复B(或“Bs”,因为它听起来像你有一组这些),而不是如何回复{{1} }}

通常,这样的同步调用是通过JMS在消息上由creating a temporary queue,specifying that as the reply address模拟的。因此,A会创建一个临时队列,然后阻止该队列,直到它从B收到结果,然后将回复的内容返回到C

我可能完全不了解您的情况,但似乎任何其他方法都需要修改A - A界面。

答案 1 :(得分:0)

那么,由于A和B已经通过RMI定位器连接,为什么不只是让A注册一个服务,然后让B调用该服务?

答案 2 :(得分:0)

RMI呼叫转发到JMSService?听起来像Apache Camel正是你所需要的;它是一个实现这种企业集成的框架。

组件page包含如何设置RMI和JMS(以及无数其他)端点的示例。然后,您将使用其强大的DSL编写路由,以将消息从一个端点转发到另一个端点。