我创建了一个小型示例项目,以使用 Spring(即蓝图)实现 OSGi 的参考实现,并且我可以安装、解析和启动所有包,但包启动时我的服务未注册。
我已经在 github 上提供了整个项目,因此您可以查看源代码 - 构建的 jars 输出在artifacts
文件夹中,但您也可以通过运行自己构建项目gradle assemble
。
据我了解蓝图规范,特别是本指南,如果配置文件位于正确的位置,则无需激活器类来注册服务 - 在我的 jar 中,我在下面有以下内容OSGI-INF/blueprint/sillyservice.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
<bean id="sillyService" class="se.sunstone.silly.service.ServiceImpl"
init-method="startService">
</bean>
<service ref="helloservice"
interface="com.sample.blueprint.helloworld.api.HelloWorldService" />
</blueprint>
部署此捆绑包时,JBoss 将捆绑包报告为 ACTIVE。
然后,当我部署客户端捆绑包时,有一个激活器类运行以下代码段以列出所有已注册的服务:
ServiceReference[] refs = context.getAllServiceReferences(null, null);
if (refs != null) {
logger.info(String.format("There are %s references", refs.length));
for (ServiceReference ref : refs) {
logger.info(ref);
}
} else {
logger.info("There are no registered services.");
}
列出了一堆由 JBoss 内部的 OSGi 框架注册的服务,但没有列出我的SillyService
.
我需要做什么才能完成这项工作?