EventHandler未捕获AEM 6.4中的resourceChangedAttributes和resourceAddedAttributes筛选事件

EventHandler未捕获AEM 6.4中的resourceChangedAttributes和resourceAddedAttributes筛选事件,aem,eventhandler,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.

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

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 ......");
    }

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

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

自2.0.6(sling api Bundle 2.0.6)以来,它已被弃用。 您应该实现
org.apache.sling.api.resource.observation.ResourceChangeListener

请参阅示例:

MyGut说您设置的实际事件过滤器有问题。您是否已验证可以在/system/console/events控制台中看到更改事件?如果您在那里看到它们,则可以确认是否存在错误的筛选器。@hbtolearn-您是否能够解决此问题?ResourceChangeListener无法解决此问题。诸如getChangedPropertyNames()之类的方法也不推荐使用,因为“应用程序代码不能依赖于获取正确的已更改属性集。资源提供程序实现可以不支持此操作。”