Как получить удаленные сервисы 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)
Надеюсь, это поможет.