如何在OSGi中的服务和捆绑之间交换数据?

use*_*070 4 service osgi bundle

我是OSGi的新手.无论我阅读什么教程,我都无法找到如何在服务和捆绑之间交换数据.我知道一个捆绑包必须通过服务注册表进行注册,以便其他捆绑包可以使用它们.但是,我无法获得服务和包之间的数据交换方式.与Web服务一样,数据以XML格式等交换,并使用Http协议.那么如何在服务和使用它的bundle之间交换数据.它也是通过一些协议或如何?它也涉及任何开销.请帮忙

谢谢

小智 6

没有涉及协议.您执行标准Java方法调用.

它的工作原理基本上是这样的:

  1. 您为服务定义Java接口.只是一个普通的界面,没有什么特别的必须实现.例如

    interface TimeService {public String getCurrentTime(); }

  2. 您实现了接口(在单独的包中,您不从包中导出)

  3. 您在OSGi服务注册表中注册此接口:

    timeServReg = bc.registerService(TimeService.class.getName(),new TimeServiceSimple(),props);

  4. 在第二个包 - 想要使用它的那个包中,您搜索此服务:

    timeRef = bc.getServiceReference(TimeService.class.getName()); if(timeRef!= null){timeService =(TimeService)bc.getService(timeRef); }

  5. 您只需使用刚刚获得的Java对象即可使用该服务.你调用方法:

    System.out.println("当前时间是:"+ timeService.getCurrentTime());

当然,有许多细节和良好实践,例如使用ServiceTracker查找服务等,但这是基础知识.

你可以在这里找到很多例子.