首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一台机器和单个IDE上运行两个RMI应用程序

在一台机器和单个IDE上运行两个RMI应用程序
EN

Stack Overflow用户
提问于 2016-02-16 00:34:23
回答 1查看 796关注 0票数 0

我一直在开发两个通过RMI相互通信的应用程序,其中一个将数据放在本地队列中,另一个在队列中远程轮询数据--类似于单向通信生产者-消费者的方法。有一些更新,现在我需要使通信双向,这需要使用两个RMI轮询。显然,我不能在一台机器上运行两个start rmiregistry。怎么办?有什么解决办法吗?我需要在Eclipse中的两个不同项目上并行运行这两个应用程序!

两个应用程序的RMI代码都相同,如下所示。因此,基本上,当我运行第一个,然后第二个,它抛出一个异常在下面。

代码语言:javascript
复制
try {
            ServerRMI obj = new ServerRMI();
            Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

            // Bind the remote object's stub in the registry
            Registry registry = LocateRegistry.getRegistry();
            registry.bind("Hello", stub);
            System.err.println("Server ready");
        } catch (Exception e) {
            System.err.println("Server exception: " + e.toString());
            e.printStackTrace();
        }

例外是:

代码语言:javascript
复制
Server exception: java.rmi.AlreadyBoundException: Hello
java.rmi.AlreadyBoundException: Hello
    at sun.rmi.registry.RegistryImpl.bind(RegistryImpl.java:183)
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:410)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:268)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$240(TCPTransport.java:683)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/305254903.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
    at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
    at sun.rmi.server.UnicastRef.invoke(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
    at test.ServerRMI.main(ServerRMI.java:26)
EN

回答 1

Stack Overflow用户

发布于 2016-02-16 01:12:15

您不需要两个RMI注册中心。一个就够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35421670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档