2015-01-23 4 views
1

Я пытаюсь вызвать удаленный метод через RMI, который принимает 1 аргумент типа MyData, который является интерфейсом, известным как на стороне сервера, так и на стороне клиента.Возможно ли передать анонимный объект в качестве аргумента метода RMI?

В моем клиенте классе MyClass, я создал анонимный объект типа MyData, и передал его на удаленный метод, и получил исключение:

Caused by: java.lang.reflect.InvocationTargetException 
    at wt.method.RemoteMethodServer.invoke(RemoteMethodServer.java:795) 
    at 
    ... 2 more 
Caused by: java.lang.ClassNotFoundException: MyClass$1 (no security manager: RMI class loader disabled) 

Вопрос: Должен ли я использовать реализацию из интерфейс MyData передать аргумент метода RMI? Эта реализация известна как на стороне сервера, так и на стороне клиента.

+0

Он, похоже, не знает вашего реестра. –

+0

@PeterLawrey Нет никаких доказательств того, что реестр задействован, и если клиент вызывает удаленный метод, он уже должен был успешно выполнить поиск реестра. – EJP

ответ

1

Это возможно, если:

  1. Класс развертывается в CLASSPATH на равных, или доступны через функцию кодовой базы, и
  2. Класс, в котором он определен в Serializable, и
  3. Вы понимаете и принимаете, что экземпляр внешнего класса будет отправлен вместе с анонимным классом, поскольку он является внутренним классом и имеет ссылку на его внешний класс, и поэтому внешний класс также должен быть де- привязанный к сверстнику или доступный через функцию кодовой базы.

(2) Не может быть правдой и не может быть правдой по какой-либо причине, кроме этого, и (3), скорее всего, не соответствует действительности, поскольку, скорее всего, это будет только клиент класс, который не является бизнесом сервера.

Не делайте этого. Нет никакого преимущества и нескольких недостатков. Используйте внешний или статический класс.

Смежные вопросы