Как получить удаленные сервисы OSGi, работающие с Eclipse ECF

Я пытаюсь заставить удаленные службы OSGi работать с моим существующим приложением RCP (на основе Mars). Однако, похоже, что это не работает - два экземпляра моего приложения не видят сервисы, опубликованные в другом.

Я добавил последнюю версию ECF SDK на свою целевую платформу и добавил следующие пакеты в среду выполнения моего продукта;

  • org.eclipse.ecf.discovery
  • org.eclipse.ecf.provider
  • org.eclipse.ecf.provider.remoteservice
  • org.eclipse.ecf.sharedobject
  • org.eclipse.equinox.concurrent
  • org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy
  • org.eclipse.osgi.services.remoteserviceadmin
  • org.eclipse.ecf.remoteservice.asyncproxy
  • org.eclipse.ecf.remoteservice
  • org.eclipse.ecf.osgi.services.distribution
  • org.eclipse.ecf.provider.jmdns
  • ch.ethz.iks.r_osgi.remote
  • org.eclipse.ecf.provider.r_osgi
  • org.eclipse.ecf.console
  • org.eclipse.ecf.provider.dnssd
  • org.xbill.dns
  • org.eclipse.ecf.provider.discovery

В одном из моих активаторов пакета у меня есть следующее, чтобы зарегистрировать мой сервис в методе start ()

ServiceTracker _containerManagerServiceTracker = new ServiceTracker(_context, IContainerManager.class.getName(), null);
_containerManagerServiceTracker.open();

IContainerManager containerManager = (IContainerManager) _containerManagerServiceTracker.getService();

IContainer container = containerManager.getContainerFactory().createContainer("ecf.r_osgi.peer");


IMyService myService = new MyService();
Properties props = new Properties();
props.put(IDistributionConstants.SERVICE_EXPORTED_INTERFACES, IDistributionConstants.SERVICE_EXPORTED_INTERFACES_WILDCARD);
props.put(IDistributionConstants.SERVICE_EXPORTED_CONFIGS, "ecf.r_osgi.peer");
// register remote service
context.registerService(IMyService.class, myService, props);

Я знаю, что что- то работает, как сообщает второй экземпляр;

"WARNING: Port 9278 already in use. This instance of R-OSGi is running on port 9279"

Я также вижу одну запись, которая появляется в браузере zeroconf "_ECFOSGIRSVC".

Многочисленные учебники, кажется, указывают, что этот сервис должен волшебным образом стать доступным в другом экземпляре. Однако ничего не появляется (при запуске "services" в консоли приложения перечисляются только локальные службы). Некоторые вопросы;

  • Это действительно все, что нужно?
  • Как мне отладить это?
    • Как узнать, действительно ли услуга экспортируется?
    • Как мне узнать, действительно ли другой экземпляр его ищет?
  • Можно ли: а) сообщить конечную точку контейнера и "вручную" соединиться с другим экземпляром?

Есть много учебных пособий "HelloService" с не совсем тем же содержанием, которые делают начало очень запутанным!

1 ответ

Попробуйте Riena Communication - его проще для публикации и привязки удаленных сервисов. Он использует гессиан в качестве протокола связи. это действительно быстро по сравнению с мылом и коллегами, так как его двоичный протокол (не XML)

Надеюсь, это поможет.

Другие вопросы по тегам