Я разрабатываю два приложения, которые общаются друг с другом через RMI
, с одним помещением данных в свою локальную очередь, а другой - для опроса очереди для данных удаленно. подход однопользовательской связи между производителями и потребителями. Были некоторые обновления, и теперь мне нужно сделать связь двусторонней, и для этого требуется использовать два опроса RMI. По-видимому, я не могу запустить два start rmiregistry
на одной машине. Что мне делать? Есть ли обходной путь для этого? Мне нужно запустить два приложения параллельно в двух разных проектах в Eclipse!Запустить два приложения RMI на одной машине и одну IDE
Код RMI для обоих приложений такой же, как указано ниже. Поэтому в основном, когда я запускаю первый, а затем второй, он генерирует исключение в следующем.
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();
}
И исключение:
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)
Eclipse - это IDE; у него нет ничего общего с этим. Вам нужны два разных порта, вот и все. – duffymo
Я знаю, но мне не нужно запускать две «rmiregistry»? Я не могу этого сделать. Только один запускается в любое время! –
http://www.javaworld.com/article/2072868/viewing-names-bound-to-rmi-registry.html. Несколько имен, каждый со своим хостом и портом. – duffymo