Можно ли передать анонимный объект в качестве аргумента метода RMI?

1

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

В моем клиентском классе 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 Здесь нет доказательств того, что Реестр задействован, и если клиент вызывает удаленный метод, он, должно быть, уже выполнил успешный поиск в Реестре.
Теги:
anonymous-class
rmi

1 ответ

1
Лучший ответ

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню