是否可以在CQ中以编程方式禁用OSGi组件?

时间:2014-04-17 13:13:59

标签: osgi cq5

不要手动对Felix中的OSGi组件进行配置更改,最好在JCR中创建sling:OsgiConfig个节点,以确保设置受版本控制,跨环境应用相同的设置等。

同样,我想在每个环境中禁用开箱即用的组件。有没有办法通过配置实现这一目标?而不是去system/console/components并在那里禁用它?

我读到的任何内容都提到了在内部进行更改,但由于它是我不拥有的,我需要一些外部配置来执行此操作。

2 个答案:

答案 0 :(得分:1)

您可以使用SCR运行时捆绑包发布的ScrService执行此操作。 API文档为here

请注意,ScrService不是“标准”,即它不是来自OSGi规范。然而它受到Felix和Equinox以及Knopflerfish的支持,所以它几乎是事实上的标准。实际上,当您转到system/console/components时,Web服务器将使用此服务。

答案 1 :(得分:0)

尝试在policy=ConfigurationPolicy.REQUIRE上使用属性@Component

然后,您可以为每个环境准备一组包,作为构建的一部分。对于为每个环境提供不同的OSGI配置,这也是一种很好的做法。

因此,对于某些环境,您可能只是不能为特定组件提供配置。这样的组件不会运行 - 它会有不满意的状态。

我相信我已经在AEM中看到了这种方法。

您还可以创建一个过滤器来删除当前配置,但仍需要至少禁用一次该组件。此解决方案仅在此组件提及策略时才有效。

另一种方法是准备一个负责禁用其他组件的服务 - 它可以是可配置的。但这对我来说听起来不是一个好的解决方案。