【发布时间】:2016-06-06 11:46:21
【问题描述】:
我在 Felix 中部署了一个用于 Sling 的 OSGi 包 (BundleA)。此捆绑包加载初始 Sling 内容,然后通过激活器对此内容执行一些操作(设置权限和排序节点)。效果很好,我使用 Felix maven-bundle-plugin 构建它,并在激活器中放置了一个捆绑事件侦听器:
@Override
public void bundleChanged(BundleEvent event) {
if (BundleEvent.STARTED == event.getType()) {
logger.info("Bundle A has started");
BundleContext context = event.getBundle().getBundleContext();
}
}
但我有另一个捆绑包 (BundleB),在部署时会以某种方式触发 BundleA 的激活器。因此,代码再次执行,我不希望这样。
我没有找到任何关于“链接”捆绑包的文档。但我不熟悉 Felix/OSGi,所以我真的不知道要寻找什么。 BundleA 具有 BundleB 具有 Maven 依赖项,提供范围,因为它使用其中的一些常量。否则,我不知道有什么可以将他们两个联系起来。
任何关于什么可以触发另一个捆绑包的激活器的提示都会非常有助于理解它是如何工作的。如果需要,我可以发布更多代码/信息。谢谢
编辑:这是使用 CI 时引发问题的循环
- 部署 BundleB(sling-core):包含一个枚举类来存储常量
- 部署 BundleA (sling-content):加载 Sling 初始内容,并通过激活器使用 Jackrabbit API 自动设置权限和排序节点。此代码使用存储在 BundleA 中的枚举。
- 重新部署 BundleB(sling-core),因为推送了一些更改
- 问题:BundleA 也重新启动,然后重新进行权限和节点排序,这是我不想要的
【问题讨论】:
-
BundleA 也重新启动:BundleA 是否可能已连接到 BundleB(使用 Bundle B 中的类或它们之间定义的任何其他 Require-Capability)?
-
是的,BundleB(核心包)包含一个枚举类来存储资源类型,BundleA(内容包)使用这个枚举来过滤JCR操作。关于 Require-Capability,这就是我在 MANIFEST 中看到的所有内容(由 Maven 捆绑插件生成): Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.7))"
标签: osgi apache-felix