use*_*070 4 service osgi bundle
我是OSGi的新手.无论我阅读什么教程,我都无法找到如何在服务和捆绑之间交换数据.我知道一个捆绑包必须通过服务注册表进行注册,以便其他捆绑包可以使用它们.但是,我无法获得服务和包之间的数据交换方式.与Web服务一样,数据以XML格式等交换,并使用Http协议.那么如何在服务和使用它的bundle之间交换数据.它也是通过一些协议或如何?它也涉及任何开销.请帮忙
谢谢
小智 6
没有涉及协议.您执行标准Java方法调用.
它的工作原理基本上是这样的:
您为服务定义Java接口.只是一个普通的界面,没有什么特别的必须实现.例如
interface TimeService {public String getCurrentTime(); }
您实现了接口(在单独的包中,您不从包中导出)
您在OSGi服务注册表中注册此接口:
timeServReg = bc.registerService(TimeService.class.getName(),new TimeServiceSimple(),props);
在第二个包 - 想要使用它的那个包中,您搜索此服务:
timeRef = bc.getServiceReference(TimeService.class.getName()); if(timeRef!= null){timeService =(TimeService)bc.getService(timeRef); }
您只需使用刚刚获得的Java对象即可使用该服务.你调用方法:
System.out.println("当前时间是:"+ timeService.getCurrentTime());
当然,有许多细节和良好实践,例如使用ServiceTracker查找服务等,但这是基础知识.