JCR - EventListener - 未找到激活方法 - Adob​​e CQ 5.6.0

时间:2014-04-02 13:44:34

标签: cq5 jcr aem

我试图实现一个EventListener来传播一些JCR更改(属性已更改,节点已添加...)。

这个主题已经在很多帖子中进行了讨论,但是可以使用不同的实现,并且我倾向于将所需注释的细节详细描述为一个非常保密的秘密。

SlingRepository在以下文档中没有特定属性进行注释:http://experiencedelivers.adobe.com/cemblog/en/experiencedelivers/2012/04/event_handling_incq.html

和Component注释已按以下方式设置:

@Component
public class JCRListener implements EventListener{
}

有了这种风格,我可以从Adobe CQ Web控制台安装我的软件包,但不会触发我的Active和Deactive方法。

SlingRepository在以下文档中使用特定属性(policy = ReferencePolicy.STATIC,cardinality = ReferenceCardinality.MANDATORY_UNARY)进行注释:https://groups.google.com/forum/#!topicsearchin/day-communique/postEvent%7Csort:date%7Cspell:true/day-communique/BvJsgMzpsAM

和Component注释具有特定设置

@Component(immediate=true)
@Service
public class JCRListener implements EventListener{
    @Activate
    public void activate(ComponentContext componentContext){
      .... 
    } 
    @Deactivate
    public void deactivate(ComponentContext componentContext){
      .... 
    } 
    public void onEvent(EventIterator events) {
     .... 
    }
} 

有了这种味道,我的捆绑包的部署失败了,我收到错误 [com.adobe.cq.JCRListener]激活方法[激活]未找到;组件将失败

非常感谢任何帮助。

顺便说一下,有人知道adobe论坛网站的状态(http://help-forums.adobe.com/content/adobeforums/en.html)???我们倾向于认为该网站不常用....

Wim

2 个答案:

答案 0 :(得分:1)

能够解决此问题。 activate和deactivate(或start和stop)方法的签名(由Activate和Deactivate annotation关键字标识)应该与签名Felix(作为开源OSGI容器)喜欢或同意。

对于我和AFAIK,只有这些签名是正确的

@Activate
public void start() {
   .... add your Event Listeners 
} 

@Deactivate
public void stop() {
   .... remove your Event Listeners 
} 

以下签名是不正确的:

@Activate
public void start(ComponentContext ctx) {
   .... add your Event Listeners 
} 

@Deactivate
public void stop(ComponentContext ctx) {
   .... remove your Event Listeners 
} 

请注意编译捆绑包时收到的警告。如果您的个人识别错误,您可能最终会收到以下警告:

[警告] @Component:生命周期方法启动有错误的参数....在com.adobe.cq.JCRListenerImp中的Java注释:25

请参阅以下帖子中记录的JCR EventListener的CORRECT实现: http://cqdump.wordpress.com/2012/11/13/cq-coding-patterns-sling-vs-jcr-part-2/

我希望这个答案对许多其他人有所帮助。

问候,

Wim

答案 1 :(得分:0)

您的代码看起来正确但导入错误的Activate annotations类可能会导致此错误。

http://markmail.org/message/eiqcgnckgd4mfbw7有一些关于如何解决此问题的信息。

您可能还想将您的代码和捆绑包与一个已知的好示例进行比较,例如Sling的ThumbnailGenerator sample