2011-03-03 5 views
1

У меня есть сервер RMI, который экспортирует один класс «Менеджер». Клиент RMI подключается к серверу и извлекает экземпляр класса «Менеджер». Затем я вызываю «Manager.createBox()», который создает поле, а затем «Manager.getBox (0)» для извлечения поля.RMI Instantiate Remote Objects

Теперь, если я вношу какие-либо изменения в этот «ящик», который я только что получил, измените его, а затем снова вызовите «Manager.getBox (0)», я снова получу исходное поле без изменений. Я «фиксирую» изменения, которые я только что сделал для Box на стороне клиента? Или мне нужно добавить метод к менеджеру?

ответ

2

Если ящик является простым сериализуемым классом, то его состояние просто сериализуется, отправляется на провод и десериализируется на клиенте при вызове getBox. Таким образом, клиент модифицирует копию поля, а не оригинал.

Если вы хотите, чтобы на сервере был изменен флажок, отправьте его обратно на сервер (manager.modifyBox(box)) или сделайте ящик удаленным объектом (сделав его удаленным интерфейсом Box, реализованным конкретным классом BoxImpl расширение UnicastRemoteObject).