2014-01-14 2 views
-1

내가 작업하고있는 코드베이스에서 오류가 발생했습니다. 특정 값이 한 프로세스에서 다른 프로세스로 전달되지 않았습니다. 많은 좌절감을 겪은 후, 나는 범인을 단일 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"); 
    } 
} 

내 질문에, 클라이언트 또는 서버가 이런 일이 발생하면 예외를 발생시킬 수있는 방법이 있습니까?

답변

0

내 질문에, 클라이언트 또는 서버가 이런 일이 발생하면 예외를 발생시킬 수있는 방법이 있습니까?

예외를 throw합니다. NotSerializableException입니다. 이 경우, 클라이언트는 ServerException에 랩핑되어 수신됩니다. 클라이언트 코드가 컴파일되지 않으므로 예외가 발생하지 않고 클라이언트가 제어권을 다시 얻지 못한다는 주장은 신뢰성이 부족합니다.

+0

확실히 버그로 배포하고 싶지는 않지만 버그가 발생하면이를 처리 할 수있는 확실한 방법이 필요합니다. 이것은 단지 어리석은 것처럼 보입니다. – Yserbius

0

나는 당신의 질문을 이해한다면 나도 몰라,하지만 당신은 예외를 throw 할 경우에 사용할 수 :

throw new YourCustomException(); 

또는 필요한 경우 시도 캐치와 예외를 catch 할 수도 있지만 물론 당신 잘못된 데이터를 입력하는 사용자와 관련하여 알고있는 예외를 처리하기 위해이 작업을 수행해야하며 사용자에게 이것이 잘못된 경우 사용자에게 잘못되었음을 알리고 싶습니다.

하지만 수정할 수있는 버그가 직렬화해야하는 개체를 serialize하는 것처럼 고정되어 있는지 확인하십시오. 이것들은 네트워크를 통해 전송되는 객체입니다.

+0

그건 내가 찾던 것이 아니야. 특정 거의 탐지 할 수없는 예외가 발생할 때 예외를 throw하는 방법을 원했습니다. – Yserbius

+0

글쎄, 당신은 거의 탐지 할 수 없다고 말하면서 예외가 언제 발생 하는지를 알 수있는 방법이다. 이 때 당신은 당신 자신의 예외를 던지거나 당신이 말하는이 예외를 잡아야한다. – Digihash