我在我正在使用的代码库上遇到错误。某些值不是从一个过程传递到另一个过程。经过多次挫折之后,我将罪魁祸首缩小到一个单一的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