Как обработать событие перемещения узла с помощью EventListener в AEM?Дублирующиеся звонки происходят - PullRequest
0 голосов
/ 02 января 2019

У меня есть сервис, который реализует javax.jcr.observation.EventListener. Эта служба прослушивает следующие типы событий:

  • Event.NODE_MOVED
  • Event.NODE_REMOVED

При перемещении узла * метод 1009 * запускается дважды.

Есть ли способ вызвать мой код только один раз, если кто-то перемещает узел?

    executor.submit(() -> {
        List<Event> eventsList = IteratorUtils.toList(eventIterator);
        for (final Event event : eventsList) {
            try {
                myCustomCodeToExecute()
            } catch (Exception e) {
                LOGGER.error("Can't send event", e);
            }
        }
    });

Событие REMOVE работает как положено

1 Ответ

0 голосов
/ 03 января 2019

Я нашел решение:

@Override
public void onEvent(EventIterator eventIterator) {
    executor.submit(() -> {
        List<Event> eventsList = IteratorUtils.toList(eventIterator);
        for (final Event event : eventsList) {
            try {
                if (eventType == Event.NODE_REMOVED) {
                    if (eventsList.stream().noneMatch(e -> Event.NODE_MOVED == e.getType())) {
                         //remove event
                    }
                         //move event will be processed in next iteration
                         continue;
                    }
                }
            } catch (Exception e) {
                LOGGER.error("Can't send event", e);
            }
        }
    });
}
...