我们在CQ5中加载自定义适配器工厂时遇到了一些麻烦。适配器工厂代码工作正常,因为我们试图在另一个SlingServlet的@Activate阶段使用它。
似乎在Sling Servlet中调用Activate阶段时,尚未加载Custom Adapter Factory类。
是否有办法在已加载的其他包上指定依赖性,或者尝试在激活函数中使用Adaptable通常是个坏主意。
答案 0 :(得分:1)
你是对的 - 适配器工厂在servlet之后启动,并且在servlet激活期间它不可用。通常这种情况是通过OSGi依赖管理来解决的,但我们在这里没有明确的依赖关系,因为servlet并不是@Reference
适配器工厂,但是它通过吊索使用适配器工厂经理。
您有三种选择:
引用servlet中的适配器工厂,在两个组件之间创建一个aritficial, strong 依赖项:
@Reference(target = "(component.name=your.adapter.factory.package.name)")
如果servlet和适配器工厂放在不同的软件包中,您可以使用startlevels来控制软件包激活的顺序。您可以通过将OSGi包放入以下JCR目录来控制启动级别:
/apps/[app]/install/[startLevel]
从适配器工厂中提取逻辑,并直接在servlet激活器中使用它,而不使用adaptTo()
方法。