我正在尝试使用我现有的RCP应用程序(基于火星)来使用远程OSGi服务。但是它似乎不起作用 - 我的应用程序的两个实例看不到另一个实例发布的服务。
我已将最新的ECF SDK添加到目标平台,并且已将以下捆绑包添加到我的产品运行时;
在我的一个捆绑激活器中,我有以下内容在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"
我也看到一条记录出现" _ECFOSGIRSVC"在zeroconf浏览器中。
许多教程似乎表明这个服务应该神奇地在另一个实例上可用。但是没有出现任何内容(运行"服务"在应用程序控制台中仅列出本地服务)。一些问题;
有很多" HelloService"内容不完全相同的教程会使开始变得非常混乱!
答案 0 :(得分:0)
尝试Riena Communication对于发布和绑定远程服务来说,它不那么复杂。它使用hessian作为通信协议。它与soap和co。相比真的很快,因为它的基于二进制的协议(不是xml)
我希望这会有所帮助。