我有一个RMI服务器导出一个“Manager”类。 RMI客户端连接到服务器,并检索“Manager”类的实例。然后,我调用“Manager.createBox()”,它创建一个框,然后“Manager.getBox(0)”来检索框。
现在,如果我对我刚刚检索到的那个“Box”做了任何修改,修改它,然后再次调用“Manager.getBox(0)”,我再次得到原始框而没有我的更改..我怎么能“提交”我刚刚在客户端对Box进行的更改?或者,我是否需要向经理添加方法?
答案 0 :(得分:2)
如果Box是一个简单的可序列化类,那么它的状态只是序列化,在线上发送,并在调用getBox时在客户端反序列化。客户端因此修改了盒子的副本,而不是原始的副本。
如果您希望修改后的框位于服务器上,则将其发送回服务器(manager.modifyBox(box)
),或将Box作为远程对象(通过使其成为远程接口Box,由BoxImpl具体类扩展了UnicastRemoteObject)。