2012-06-07 85 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

你正在創建註冊表上portregPort結合到它,它是不找到。

我不知道this.RMIClientPort的目的可能是什麼。我會擺脫它。 RMI服務器沒有關於客戶端端口的業務考慮。

另外,您還要導出兩次HelloWorld對象:一次在Demo.java中調用exportObject(),一次在RMIServer.exportAndBindObject()中再次調用exportObject()。所以其中一個操作必須失敗,否則它不會導出任何內容。所以你的exportObject()方法有問題。