【发布时间】:2013-11-10 20:14:27
【问题描述】:
目标
我目前正在调整现有的 Java 应用程序,将其转换为基于插件的系统。这是一个基于 Spring MVC 的 Web 服务,它提供各种服务。我打算使这些服务可插入,由 OSGi 包提供。我已经拥有提供这些服务的所有 OSGi 捆绑包,使用 maven-bundle-plugin 创建。
我做了什么
我决定使用 OSGi R4 API 将 OSGI 框架 (Apache Felix) 嵌入到我的应用程序中,方法是将其添加为 Maven 依赖项:
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
<version>4.2.1</version>
</dependency>
初始化它:
FrameworkFactory frameworkFactory = ServiceLoader
.load(FrameworkFactory.class).iterator().next();
Map<String, String> config = new HashMap<String, String>();
config.put(FelixConstants.LOG_LEVEL_PROP, Integer.toString(Logger.LOG_DEBUG));
this.framework = frameworkFactory.newFramework(config);
this.framework.init();
this.context = framework.getBundleContext(); // keep ref to context
通过上下文安装所有包:
context.installBundle(jarPath)
并启动框架:
framework.start();
然后我检查所有包的状态,除框架之外的所有包都具有INSTALLED 状态。框架包是ACTIVE。
很明显,安装的包没有被解析。
问题
Felix 什么时候尝试解析捆绑包?根据我对 OSGi 生命周期的理解,解决会自动发生。但我不知道菲利克斯是否甚至试图解决这些捆绑包。即使我将日志级别配置为调试,它也不会打印任何日志。如果我能看到某个包无法解析的原因(即,Felix 可以告诉我缺少哪些包?),那么调试我的设置会很容易。
【问题讨论】:
标签: java maven osgi apache-felix