Java 通过RMI使用反序列化对象更新服务器对象

Java 通过RMI使用反序列化对象更新服务器对象,java,serialization,rmi,Java,Serialization,Rmi,我在服务器上有一个对象,客户端可以在分布式系统中检索该对象。这一切都发生在本地计算机上,客户端通过RMI查找调用服务器对象。关键是服务器对象应该是一个客户机可以修改的单一对象。但是,在客户端反序列化之后,它们都有一个不同的对象ID。也就是说,它们似乎得到了一个新对象,即使它们都应该从服务器检索相同的对象。考虑到对象应该在不同的机器上(每个客户机),这是有意义的 我尝试在服务器对象上实现hashcode和equals方法,但客户端仍然获得不同的对象id。当客户端对反序列化的服务器对象执行操作时,原

我在服务器上有一个对象,客户端可以在分布式系统中检索该对象。这一切都发生在本地计算机上,客户端通过RMI查找调用服务器对象。关键是服务器对象应该是一个客户机可以修改的单一对象。但是,在客户端反序列化之后,它们都有一个不同的对象ID。也就是说,它们似乎得到了一个新对象,即使它们都应该从服务器检索相同的对象。考虑到对象应该在不同的机器上(每个客户机),这是有意义的

我尝试在服务器对象上实现hashcode和equals方法,但客户端仍然获得不同的对象id。当客户端对反序列化的服务器对象执行操作时,原始服务器对象不会收到更改。我之所以知道这一点,是因为任何后续查找都会检索处于原始状态的服务器对象

基本上,我的问题是:如何让我的客户机通过对相应的反序列化对象执行客户机操作来更新原始服务器对象?当另一个客户端查看其反序列化对象的getter时,它必须看到其他客户端执行的所有更改。为了进一步澄清,尽管对象是在不同的机器上反序列化的,但我希望它们的行为就像它们是同一机器上的同一个对象一样

关键是服务器对象应该是一个客户机可以修改的单一对象。但是,在客户端反序列化之后,它们都有不同的对象ID

关键是这不是一个远程对象,所以它会被序列化,这是您不想要的

我想让它们表现得像是同一台机器上的同一个物体

没错。您需要:

  • 让它实现一个远程接口
  • 导出它,可以让它扩展
    UnicastRemoteObject
    (首选),也可以在构造时调用
    UnicastRemoteObject.exportObject()

  • 这确实是我的问题。。我附加了一个远程接口,让它将新对象作为单播存根作为变量存储在我的服务器上,并在客户端调用get方法检索对象时返回该存根。现在很好用。非常感谢你!