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;
}
참고 : 질문을 설명하고 대답하기 위해 필요한 모든 정보는 질문 자체에 포함되어야합니다. 당신이 제공 한 pastebin 링크는 무의미한 시간 낭비였습니다. – EJP
@RambabuMandalapu의 삭제 된 답변은 실제로 대답이었습니다. 그냥 잘못된 대답. 이상한 리뷰. – EJP