我是 osgi 的新手,对它的经验很少。我有一个 osgi 包,它使用 config xml 文件将 bean 导出为 osgi 服务。我想在另一个 osgi 包中使用该服务。谁能告诉我该怎么做?我正在使用 maven 和 felix osgi。
2 回答
您想使用带有蓝图的服务吗?您的描述“config xml”听起来有点像它可能是蓝图。在这种情况下,您可以使用
我的网站上有一个完整的例子: http ://www.liquid-reality.de/x/DIBZ
该示例展示了如何使用蓝图导出和导入服务。
使用蓝图或其他方式如何导出 OSGi 服务并不重要——因为它是一个 OSGi 服务,您的包可以从 OSGi 服务注册表中获取它。为此,您必须:
在你的包清单中导入它的包,以声明依赖。您必须在 META-INF/Manifest.mf 中添加 Import-Package: com.acme.theservicepackage
在您的 Activator 类中,您必须使用捆绑上下文从服务注册表中获取服务:
timeRef = bc.getServiceReference(TimeService.class.getName()); if (timeRef != null) { timeService = (TimeService) bc.getService(timeRef); }
然后,您只需通过调用它的方法来使用 timeService(或您的服务使用的任何接口),无论它们是什么。
这里有很多细节,你可以使用帮助器 ServiceTracker 类,或者蓝图,或者声明式服务......但是由于你似乎是 OSGi 的新手,我已经让它尽可能简单,并展示了最基本的方法来做。
这里有基本 OSGi 服务的演示。