【问题标题】:RMI server startup binding problemRMI服务器启动绑定问题
【发布时间】:2011-09-29 11:15:35
【问题描述】:

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

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

有人知道为什么会这样吗? 为什么 ThreadPoolExecutor 无论如何都应该是可序列化的?它既不包含在作为我的代码库的 jar 文件中,也不包含在策略文件指定的文件中。 这两个参数只包含两个类文件。这些反过来导入更复杂的类。这可能是我的问题的原因吗?

【问题讨论】:

    标签: java serialization rmi


    【解决方案1】:

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

    【讨论】:

    • thx,确实很愚蠢..我想知道为什么整个互联网上似乎没有其他人以前遇到过这个问题;)
    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    相关资源
    最近更新 更多