RMI服务器启动绑定问题

时间:2011-07-06 09:29:41

标签: java serialization rmi

当我尝试绑定我的接口实现时遇到问题。

java.rmi.MarshalException: error marshalling arguments; nested exception is: 
    java.io.NotSerializableException: java.util.concurrent.ThreadPoolExecutor

有谁知道为什么会这样? 为什么ThreadPoolExecutor仍然可以序列化?它既不包含在我的jar文件中,也不包含在我的代码库中,也不包含在策略文件指定的文件中。 这两个参数只包含两个类文件。这些反过来导入更复杂的类。这可能是我遇到问题的原因吗?

1 个答案:

答案 0 :(得分:0)

您尚未导出远程对象。它不会扩展UnicastRemoteObject,也没有调用UnicastRemoteObject.exportObject()。其中任何一个都会这样做(不是两个),而你没有做过任何一个。因此,您的实际远程对象在bind()方法中被序列化到Registry,并且这失败了,因为您的远程对象具有ThreadPoolExecutor类型的非瞬态实例成员,该成员不可序列化。但问题是导出,而不是实例成员。如果对象已导出,则其存根将序列化到注册表,并且不会出现问题。