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()之类的方法也不推荐使用,因为“应用程序代码不能依赖于获取正确的已更改属性集。资源提供程序实现可以不支持此操作。”