EventHandler未捕获AEM 6.4中的resourceChangedAttributes和resourceAddedAttributes过滤事件

时间:2018-08-23 11:30:37

标签: aem eventhandler

我们已经实现了一个注册如下的事件处理程序:

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.observation.ResourceChangeListener;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * This is a node observer class which would observe the path /content/we-retail
 * for any addition or updation of nodes (type = cq:PageContent). 
 * @author 
 */

@Component(label = "Test Event Listener", immediate = true, metatype =
    false, enabled = true)
@Properties({

   /* @Property(name = EventConstants.EVENT_TOPIC, value = ReplicationAction.EVENT_TOPIC)
            })*/

    @Property(name = EventConstants.EVENT_TOPIC, value =
        {"org/apache/sling/api/resource/Resource/ADDED",
            "org/apache/sling/api/resource/Resource/CHANGED"}),
    @Property(name = EventConstants.EVENT_FILTER, value = "(&" +
        "(path=/content/we-retail/us/en/*/jcr:content) (|(" + SlingConstants
        .PROPERTY_CHANGED_ATTRIBUTES + "=*jcr:title) "
        + "(" + ResourceChangeListener.CHANGES + "=*jcr:title)))")
})

@Service(EventHandler.class)
public class TestEventHandler implements EventHandler {

    private static final Logger LOG = LoggerFactory.getLogger(TestEventHandler.class);

    /*
     * Reference of ResourceResolverFactory object.
     */
    @Reference
    private ResourceResolverFactory resourceResolverFactory;

    /*
     * (non-Javadoc)
     * @see org.osgi.service.event.EventHandler#handleEvent(org.osgi.service.event.Event)
     */
    @Override
    public void handleEvent(Event event) {
        LOG.info("Hi event is called ......");
    }

}  

问题是:在以下路径下的任何页面上更改jcr:title的属性值时,我们的handleEvent不会被捕获:/ content / we-retail / us / en

AEM版本为:6.4 使用的吊索版本是:org.apache.sling.api

1 个答案:

答案 0 :(得分:0)

从2.0.6(Sling API捆绑包2.0.6)开始,不推荐使用。 您应该实施org.apache.sling.api.resource.observation.ResourceChangeListener 请参阅示例:ResourceChangeListener sample