Как заставить удаленные службы 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

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

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"

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

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

  • Это действительно все, что нужно?
  • How do I debug this?
    • How do I know if the service is really exported?
    • Как узнать, действительно ли другой экземпляр ищет его?
  • Можно ли а) сообщить о конечной точке контейнера и «вручную» подключиться к другому экземпляру?

Существует множество руководств по «HelloService» с не совсем одинаковым содержанием, что делает начало работы очень запутанным!


person Simon    schedule 29.04.2016    source источник


Ответы (1)


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

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

person Hisham Khalil    schedule 03.05.2016