Реализация интерфейса через разные JVM - PullRequest
0 голосов
/ 14 января 2009

Допустим, у вас есть определение интерфейса.

Этот интерфейс может быть Операция .

Затем у вас есть два приложения, работающие в разных JVM и обменивающиеся каким-либо образом удаленно путем обмена Operation экземплярами.

Позволяет называть их приложение A и приложение B .

Если приложение A реализует Операция с классом, которого нет в пути к классу приложения B , будет приложение B все еще в состоянии справиться с этой реализацией интерфейса? Даже когда B находится в другой JVM?

Ответы [ 3 ]

5 голосов
/ 14 января 2009

Это зависит от магии, которая происходит в вашей части "как-то общаться удаленно".

Если эта связь осуществляется через RMI или аналогичную технологию, то это будет хорошо. Приложение B создаст удаленный прокси для объекта Operation в JVM A, а вызовы методов на этом прокси генерируют HTTP-запросы к JVM A, которые сопоставляются с фактическим объектом, живущим в этой JVM (которая имеет доступ к классу реализации) .

Если эта связь осуществляется путем сериализации объектов и отправки их по проводам, то это не будет работать. Когда объект из приложения A поступает в JVM B, десериализация завершится неудачно (с ClassNotFoundException или подобным).

Могут быть и другие технологии удаленного взаимодействия, в этом случае все зависит от реализации. Я знаю, что загрузчики классов могут загружать классы из байтовых массивов, и, таким образом, концептуально очень возможно иметь такие загрузчики классов, которые могли бы загружать классы из удаленных источников. Я полагаю, что сетевая библиотека теоретически могла бы сериализовать реальный класс по проводам таким образом, поэтому, хотя JVM B изначально не знала бы о реализующем классе, ее загрузчик классов мог бы быть обеспечен байт-кодом класса, как требуется.

1 голос
/ 14 января 2009

Это зависит от того, что вы подразумеваете под «общением как-то удаленно». Если приложение A на самом деле просто передает приложению B какой-то токен, который встроен в прокси-сервер, такой, что вызовы интерфейса Operation передаются обратно приложению A, тогда это может быть нормально. Если идея состоит в том, чтобы приложение B создавало локальный экземпляр класса реализации, то это не сработает, поскольку оно не будет знать, как выглядит объект.

0 голосов
/ 14 января 2009

Пока он только пытается ссылаться на него через общий интерфейс, он должен быть в состоянии справиться с этим. Реальная реализация не имеет значения, если они оба реализуют одну и ту же версию интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...