无法加载自定义适配器工厂时遇到问题

时间:2014-07-15 03:50:46

标签: osgi cq5 sling aem

我们在CQ5中加载自定义适配器工厂时遇到了一些麻烦。适配器工厂代码工作正常,因为我们试图在另一个SlingServlet的@Activate阶段使用它。

似乎在Sling Servlet中调用Activate阶段时,尚未加载Custom Adapter Factory类。

是否有办法在已加载的其他包上指定依赖性,或者尝试在激活函数中使用Adaptable通常是个坏主意。

1 个答案:

答案 0 :(得分:1)

你是对的 - 适配器工厂在servlet之后启动,并且在servlet激活期间它不可用。通常这种情况是通过OSGi依赖管理来解决的,但我们在这里没有明确的依赖关系,因为servlet并不是@Reference适配器工厂,但是它通过吊索使用适配器工厂经理。

您有三种选择:

  1. 引用servlet中的适配器工厂,在两个组件之间创建一个aritficial, strong 依赖项:

    @Reference(target = "(component.name=your.adapter.factory.package.name)")
    
  2. 如果servlet和适配器工厂放在不同的软件包中,您可以使用startlevels来控制软件包激活的顺序。您可以通过将OSGi包放入以下JCR目录来控制启动级别:

    /apps/[app]/install/[startLevel]
    
  3. 从适配器工厂中提取逻辑,并直接在servlet激活器中使用它,而不使用adaptTo()方法。