我在我正在使用的代碼庫上遇到錯誤。某些值不是從一個過程傳遞到另一個過程。經過多次挫折之後,我將罪魁禍首縮小到一個單一的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");
}
}
我的問題是,有沒有什麼辦法可以導致客戶端或服務器在發生這種情況時拋出異常?
當然,你從不想用bug來部署,但如果發生錯誤,你確實需要一種乾淨的方式來處理它。這似乎有點愚蠢。 – Yserbius