通过RMI

时间:2015-10-26 21:12:19

标签: java serialization rmi

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

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

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

1 个答案:

答案 0 :(得分:2)

  

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

重点是,这不是一个远程对象,所以它被序列化,你不想要。

  

我希望他们的行为就好像他们是同一台机器上的同一个对象。

完全。你需要:

  1. 让它实现远程接口
  2. 导出它,方法是扩展UnicastRemoteObject(首选)或在构建时调用UnicastRemoteObject.exportObject()