2014-12-02 3 views
0

RMI를 사용하여 원격 서버에서 fibonacci 메서드를 호출하려고하지만 메서드에 정수 값을 제공하여 클라이언트 측에서 메서드를 호출하려고하면 다음 오류가 발생합니다.원격 메서드 호출시 오류

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: unrecognized method hash: method not supported by remote object 
    at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) 
    at sun.rmi.transport.Transport$1.run(Unknown Source) 
    at sun.rmi.transport.Transport$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Unknown Source) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
    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 java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source) 
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source) 
    at com.sun.proxy.$Proxy0.fibonacciArrayTest(Unknown Source) 
    at ie.gmit.FibonacciClient.main(FibonacciClient.java:37) 

누구든지이 구현에 대해 잘못된 생각을 갖고 있습니까? 나 또한 여기 The return type is incompatible with IPower.fibonacciArrayTest(int) .I 내가 지정 아니에요이에서 수집 오류가

 //get user input 
     Scanner user_input = new Scanner(System.in); 
     String fibMaxNum; 

     System.out.println("Enter the max fibonacci number: "); 
     fibMaxNum = user_input.next(); 


     int fibMax = Integer.parseInt(fibMaxNum); 

    //Get Fibonacci array. 
    int[] sequence = power_proxy.fibonacciArrayTest(fibMax); 
    for (int value : sequence) { 
     System.out.println(value); 
    } 

그리고 이것은 서버 측의 구현 :

는 RMI 응용 프로그램의 클라이언트 쪽 Ipower 인터페이스에서 올바른 반환 유형을 사용하지만이 문제를 해결하기 위해 서명을 어떻게 수정할 수 있습니까? 나는 Ipower에 방법을 변경해야합니다 :

public int[] fibonacciArrayTest(int n) { 

     int a = 0; 
     int b = 1; 
     int[] sequence = new int[n]; 

     // Fill array with Fibonacci values. 
     for (int i = 0; i < n; i++) { 
      sequence[i] = a; 

      int temp = a; 
      a = b; 
      b = temp + b; 
     } 
     return sequence; 
     } 

인터페이스 : 당신은 배포 후 원격 메소드 서명을 변경 한

public interface IPower extends Remote{ 

    //Declare available methods and must throw RemoteException 
     int[] fibonacciArrayTest(int fibMax) throws RemoteException; 

} 
+1

참고 : 질문을 설명하고 대답하기 위해 필요한 모든 정보는 질문 자체에 포함되어야합니다. 당신이 제공 한 pastebin 링크는 무의미한 시간 낭비였습니다. – EJP

+0

@RambabuMandalapu의 삭제 된 답변은 실제로 대답이었습니다. 그냥 잘못된 대답. 이상한 리뷰. – EJP

답변

3

.

레지스트리를 다시 시작하는 것을 잊지 않고 클라이언트와 서버 모두를 청소하고 다시 작성하고 다시 배포하십시오.

관련 문제