2012-06-07 2 views
0

Я новичок в технологии RMI и обратился к проблеме ниже.Как связать один объект с несколькими серверами RMI

У нас есть несколько устройств того же типа, подключенных к локальной системе, где на каждом устройстве служба RMI работает на разных портах.

Когда мы пытаемся подключить одно устройство к локальной системе через RMI, он работает нормально. Когда мы пытаемся подключить второе устройство к локальной системе, мы получаем ошибку, как показано ниже:

Не могли бы вы помочь нам решить проблему ниже?

Заранее спасибо.

 


    java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
     java.net.ConnectException: Connection refused: connect 
     at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601) 
     at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198) 
     at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) 
     at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322) 
     at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) 
     at java.rmi.Naming.rebind(Naming.java:160) 
     at com.rmi.server.RMIServer.exportAndBindObject(Unknown Source) 

 

Demo.java



    this.myRMIServer = new RMIServer(this.RMIServerPort,this.RMIClientPort, new RMISocketFactory()); 
    this.helloWorld = new HelloWorld(); 
    this.myRMIServer.exportObject(this.helloWorld); 
    this.myRMIServer.exportAndBindObject(this.rmiServiceName, this.helloWorld); 

RMIServer.java



    public RMIServer(int port, int rmiPort, java.rmi.server.RMISocketFactory sf) 
      throws RemoteException { 
     this.sf = sf; 
     this.rmiPort = rmiPort; 
     this.regPort = port; 
     synchronized (this) { 
      if (registry == null) 
       registry = LocateRegistry.createRegistry(port); 
     } 
    } 

    public void exportAndBindObject(String name, RemoteObject ro) 
      throws RemoteException, MalformedURLException { 
     exportObject(ro); 
     String url = "//127.0.0.1:" + this.regPort + "/" + name; 
     Naming.rebind(url, ro); 
    } 

+0

Я не вижу связи между вашим названием и вашим вопросом, и я не могу поверить, что этот код работает вообще в любой системе, если только порты не равны: см. Мой ответ. – EJP

ответ

1

Вы создаете реестр на port но привязки к нему на regPort, где нет найденный.

Я не знаю, какова цель this.RMIClientPort. Я бы избавился от этого. Серверы RMI не имеют представления о клиентских портах.

Также вы экспортируете объект HelloWorld дважды: один раз в Demo.java, где вы вызываете exportObject(), и один раз в RMIServer.exportAndBindObject(), где вы снова вызываете exportObject(). Поэтому одна из этих операций должна быть неудачной, иначе она ничего не экспортировала. Так что в вашем методе exportObject() есть что-то не так.

Смежные вопросы