0

我创建了一个小型示例项目,以使用 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.

我需要做什么才能完成这项工作?

4

1 回答 1

1

要启用 Blueprint 功能,您需要安装 Blueprint Extender 捆绑包。有两种可用的实现:Apache Aries 和 Eclipse Gemini。我推荐 Aries,可从http://aries.apache.org/获得

于 2013-07-26T09:50:06.243 回答