Eclipse RCP, RMI и Bundles - PullRequest
       30

Eclipse RCP, RMI и Bundles

1 голос
/ 10 января 2011

Я пытаюсь объединить Eclipse RCP с RMI. Для этого я создал шесть пакетов: (В скобках указаны зависимости)

  • Core: интерфейсы для клиента и сервера
  • Сервер (основной): реализация сервера и класс запуска реестра
  • ServerApp (Server): GUI-клиент, который в основном просто создает экземпляр реестра (и запускает его при активации)
  • Клиент (ядро): реализация клиента
  • ClientApp (Клиент): клиент GUI

Теперь я начал serverapp, но я получил

Caused by: java.lang.ClassNotFoundException: core.rmi.CallbackServerInterface (no security manager: RMI class loader disabled)

Теперь я запустил сервер с

-consoleLog -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:${workspace_loc}/core/

(мой файл java.policy находится в плагине ядра). Я думал, что проблема была в classpath. Итак, я собрал друзей по ядру и по серверу:

Eclipse-BuddyPolicy: registered

в файле манифеста основного пакета и

Eclipse-RegisterBuddy: core

В файле манифеста комплекта сервера. Что не помогло, так как я получил точно такую ​​же ошибку.

Кто-нибудь знает, где я мог ошибиться в этом?

1 Ответ

1 голос
/ 15 января 2011

Так что, очевидно, проблема была в том, что OSGI использует свой собственный Classloader. Поэтому, прежде чем мы сделаем привязку имен, нам нужно:

Thread.currentThread().setContextClassLoader(
                    this.getClass().getClassLoader());

После этого сервер работает как брелок, и клиент может подключиться.

...