Насколько я понимаю, после того, как я установил канал связи RMI между двумя системами, я могу передать объект, реализующий «Remote», в один из удаленных методов, который принимает объект этого типа, и дальний конец просто получит удаленный интерфейс для нового объекта (другими словами, он станет новым удаленным соединением, а не просто сериализацией объекта).
Это правильно?
Если это так, я предполагаю, что это как-то связано с сигнатурами методов, но я хотел бы точно знать, как он определяет, что он должен создать новый удаленный объект, а не просто сериализовать весь объект.
Это действительно трудно выразить словами. Позвольте мне попробовать это:
Допустим, у меня есть клиент и серверная система. В серверной системе я создаю и публикую объект RMI, в клиентской системе я получаю интерфейс и могу взаимодействовать с серверной системой.
Client Server
Object1 RemoteIface ---- Object1 Implementation
Все идет нормально. На клиенте Object1.remoteMethod() будет выполняться на сервере (после сериализации параметров).
Теперь вопрос, на клиенте я выполняю такой код:
Object2 object2=new object2(); // Also a remote object
object1.send(object2);
Насколько я понимаю, в этот момент в моей системе появится новый механизм связи:
Client Server
Object1 RemoteIface ----- Object1 Implementation
Object2 Implementation ----- Object2 RemoteIface
В этот момент, если сервер вызывает метод для Object2, этот метод будет фактически выполняться на клиенте.
Мне интересно, в какой момент система решает сделать это, а не просто сериализовать его (как это было бы с любым не удаленным объектом).
Или я совершенно не прав, и он просто сериализует его, и мне нужен какой-то вызов метода getRemoteInterface () для фактического создания удаленного вызова?