EventHandler не захватывает события, отфильтрованные resourceChangedAttributes и resourceAddedAttributes в AEM 6.4

Мы реализовали обработчик событий, зарегистрированный, как показано ниже:

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

}  

Проблема: наш handleEvent не перехватывается при изменении значения свойства для jcr:title на любой странице по пути: /content/we-retail/us/en

Версия AEM: используется версия 6.4 sling: org.apache.sling.api


person hbtolearn    schedule 23.08.2018    source источник
comment
Моя интуиция подсказывает, что что-то не так с фильтром событий, который вы настроили. Вы убедились, что видите события изменений в консоли /system/console/events? Если вы их там видите, подозрение на неправильный фильтр подтверждается.   -  person 3xil3    schedule 24.08.2018
comment
@hbtolearn - Вам удалось решить эту проблему?   -  person phemanthkumar28    schedule 16.01.2019


Ответы (1)


Начиная с версии 2.0.6 (Sling API Bundle 2.0.6) он устарел. Вы должны реализовать org.apache.sling.api.resource.observation.ResourceChangeListener, см. пример: пример ResourceChangeListener

person Prosis    schedule 06.09.2018
comment
ResourceChangeListener не решает проблему. Его методы, такие как getChangedPropertyNames(), также устарели, потому что «код приложения не может полагаться на получение правильного набора измененных свойств. Реализация поставщика ресурсов может не поддерживать это». - person dzuma; 11.04.2019