【发布时间】:2016-02-16 14:42:25
【问题描述】:
我们正在从给定文件夹加载带有 Apache Felix 及其子项目 Apache File Install 的 OSGi 包。在我们的例子中,这个文件夹中可能会包含带有 Import-Package 的捆绑包,它不在容器的类路径中。这会导致错误日志消息(每 2 秒)。 (没关系,不应该加载捆绑包)。
我的问题是:是否有可能在安装包之前对其进行过滤?
我检查了org.apache.felix.fileinstall.internal.DirectoryWatcher 的实现,发现我可能想要一个org.apache.felix.fileinstall.ArtifactListener:
final ArtifactListener myListener = new ArtifactListener() {
@Override
public boolean canHandle(final File artifact) {
return bundleFullfillsPrecoditions(artifact);
}
};
不幸的是,我无法正确注册该侦听器(并且从未调用过 canHandle)。我试图将它注册为 BundleContext 上的服务:
//Initialize Felix Framework
org.osgi.framework.launch.Framework osgiFramework = this.createFramework(configuration);
osgiFramework.init();
osgiFramework.start();
//Register Listener?
osgiFramework.getBundleContext().registerService(ArtifactListener.class, myListener, null);
//Start File Install Bundle
org.osgi.framework.Bundle pluginFolderWatcher = osgiFramework.getBundleContext().installBundle(getFolderWatcherJarPath());
pluginFolderWatcher.start();
也许这是错误的方式,或者我错过了一些东西。你有想法吗?提前致谢。
【问题讨论】:
标签: java osgi apache-felix osgi-bundle