내가 작업하고있는 코드베이스에서 오류가 발생했습니다. 특정 값이 한 프로세스에서 다른 프로세스로 전달되지 않았습니다. 많은 좌절감을 겪은 후, 나는 범인을 단일 RMI 통화로 좁혔다. 클라이언트 프로세스는 서버에서 일부 데이터를 검색하기 위해 호출합니다. 이 메서드는 특정 클래스의 ArrayList
을 반환합니다. 디버깅을 통해 서버가이 방법을 제대로 실행하지만 클라이언트가 제어권을 다시 얻지 못하는 것으로 나타났습니다. 클라이언트가 멈 춥니 다. 클라이언트가 필요로하는 클래스가 Serializable
을 구현하지 않는다는 것을 깨달았습니다. 그 문제를 해결하면 문제가 해결됩니다. Java 버전은 1.6입니다.코드가 RMI를 통해 직렬화되지 않은 객체를 보내려고 할 때 예외가 발생하도록하려면 어떻게해야합니까?
public interface RMIServer extends Remote{
public ArrayList<MyObject> getObjects() throws RemoteException;
}
public class MyRMIServer implements RMIServer{
public ArrayList<MyObject> getObjects() throws RemoteException{
//All of the following code is called
ArrayList<MyObject> objects = new ArrayList<MyObject>();
objects.add(new MyObject());
objects.add(new MyObject());
objects.add(new MyObject());
return objects;
}
}
public class RMIClient{
public static void main(String args[]){
RMIServer rmiServer = (RMIServer)Namespace.lookup("localhost/rmiServer");
ArrayList<MyObject> listOfObjects = rmiServer.getObjects();
System.out.println("This is never called");
}
}
내 질문에, 클라이언트 또는 서버가 이런 일이 발생하면 예외를 발생시킬 수있는 방법이 있습니까?
확실히 버그로 배포하고 싶지는 않지만 버그가 발생하면이를 처리 할 수있는 확실한 방법이 필요합니다. 이것은 단지 어리석은 것처럼 보입니다. – Yserbius