2011-11-30 47 views
2

是否可以從服務器串行調用Java RMI到其他服務器?將Java RMI從一臺服務器調入其他

RMI客戶端1> - (1)---> RMI服務器1> ---(2)-----> RMI服務器2

手段上RMI客戶端1將調用方法上RMI服務器1和RMI服務器1將在同一個執行程序調用方法對其他RMI服務器二代client..for RMI服務器2

請幫助..

代碼這裏: 例外:java.lang中。 ClassCastException:$ Proxy0不能轉換爲interfc2

rmiserver1.java

import java.rmi.*; 
import java.rmi.server.*; 

import java.io.*; 
import java.util.*; 


class rmiserver1 extends UnicastRemoteObject implements interfc1 
{ 
public rmiserver1() throws RemoteException 
{ 
    System.out.println("RMIServer 1 Constructor "); 
} 


public String remote1() 
{ 
    System.out.println("here Calling RMIServer2 method remote2 "); 
       try 
       { 
        interfc2 obj2=(interfc2) Naming.lookup("rmi://localhost/rmiserver2"); 
        String r2=obj2.remote2(); 
        System.out.println("Result from rmiserver2 :"+r2); 
       } 
       catch(Exception e){e.printStackTrace();} 

    return "RMIServer1 remote 1 method return here...."; 

} 


public static void main(String[] args) 
{ 
    System.out.println("RMIServer 1 Main method "); 

    try 
      { 
       rmiserver1 p1=new rmiserver1(); 
        Naming.rebind("rmiserver1",p1); 

      System.out.println("RMIServer 1 rebinded "); 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

} 
} 

interfc1.java

import java.rmi.*; 
import java.io.*; 
import java.util.*; 

public interface interfc1 extends Remote 
{ 
public String remote1() throws RemoteException; 
} 

interfc2.java

import java.rmi.*; 
import java.io.*; 
import java.util.*; 

public interface interfc2 extends Remote 
{ 
public String remote2() throws RemoteException; 
} 

rmiserver2.java

import java.rmi.*; 
import java.rmi.server.*; 

import java.io.*; 
import java.util.*; 


class rmiserver2 extends UnicastRemoteObject implements interfc2 
{ 
public rmiserver2() throws RemoteException 
{ 
    System.out.println("RMIServer 2 Constructor "); 
} 


public String remote2() 
{ 
    return "RMIServer2 remote 2 method return here...."; 
} 


public static void main(String[] args) 
{ 
    System.out.println("RMIServer 2 Main method "); 

    try 
      { 
       rmiserver1 p1=new rmiserver1(); 
        Naming.rebind("rmiserver2",p1); 

      System.out.println("RMIServer 2 rebinded "); 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

} 
} 

rmiclient1.java

import java.rmi.*; 
import java.rmi.server.*; 

import java.io.*; 
import java.util.*; 



class rmiclient1 
{ 
public static void main(String[] args) 
{ 
    System.out.println("RMIClient 1 Main method"); 

    try 
    { 
     interfc1 obj1=(interfc1) Naming.lookup("rmi://localhost/rmiserver1"); 
     String r1=obj1.remote1(); 
     System.out.println("Result from rmiserver1 :"+r1); 
    } 
    catch(Exception e){e.printStackTrace();} 
} 
} 

上rmiserver1提示異常:

java.lang.ClassCastException: $Proxy0 cannot be cast to interfc2 
    at rmiserver1.remote1(rmiserver1.java:23) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. 
java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces 
sorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:5 
35) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTranspor 
t.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport 
.java:649) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec 
utor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor 
.java:908) 
    at java.lang.Thread.run(Thread.java:619) 

強調文本

+0

應該有可能。你遇到了什麼問題? –

+0

異常:java.lang.ClassCastException:$ Proxy0不能轉換爲interfc2 – techpush

回答

2

我薄k您的RMI Server 1必須實現操作2的RMI Client的接口。因此,它將充當進程1的服務器和進程2的客戶機。

+0

異常:java.lang.ClassCastException:$ Proxy0不能轉換爲interfc2 – techpush

相關問題