How to process node move event with EventListener in AEM? Duplicate calls occurs












0















I have service that implements javax.jcr.observation.EventListener. This service is listening the following event types:




  • Event.NODE_MOVED

  • Event.NODE_REMOVED


When I move node myCustomCodeToExecute() method is triggered twice.



Is there a way to trigger my code only once if someone moves node?



    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 event works as expected










share|improve this question

























  • I think you might be adding multiple/multi-level nodes causing multiple events to be emitted. try printing event.getInfo() and see if thy are same.

    – awd
    Jan 2 at 12:40













  • @awd both executions a relative to the same node. I have moved a leaf, there is no multi-level depth.

    – cylinder.y
    Jan 2 at 12:49
















0















I have service that implements javax.jcr.observation.EventListener. This service is listening the following event types:




  • Event.NODE_MOVED

  • Event.NODE_REMOVED


When I move node myCustomCodeToExecute() method is triggered twice.



Is there a way to trigger my code only once if someone moves node?



    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 event works as expected










share|improve this question

























  • I think you might be adding multiple/multi-level nodes causing multiple events to be emitted. try printing event.getInfo() and see if thy are same.

    – awd
    Jan 2 at 12:40













  • @awd both executions a relative to the same node. I have moved a leaf, there is no multi-level depth.

    – cylinder.y
    Jan 2 at 12:49














0












0








0








I have service that implements javax.jcr.observation.EventListener. This service is listening the following event types:




  • Event.NODE_MOVED

  • Event.NODE_REMOVED


When I move node myCustomCodeToExecute() method is triggered twice.



Is there a way to trigger my code only once if someone moves node?



    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 event works as expected










share|improve this question
















I have service that implements javax.jcr.observation.EventListener. This service is listening the following event types:




  • Event.NODE_MOVED

  • Event.NODE_REMOVED


When I move node myCustomCodeToExecute() method is triggered twice.



Is there a way to trigger my code only once if someone moves node?



    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 event works as expected







events osgi aem cq5 jcr






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 3 at 9:54







cylinder.y

















asked Jan 2 at 12:26









cylinder.ycylinder.y

5321028




5321028













  • I think you might be adding multiple/multi-level nodes causing multiple events to be emitted. try printing event.getInfo() and see if thy are same.

    – awd
    Jan 2 at 12:40













  • @awd both executions a relative to the same node. I have moved a leaf, there is no multi-level depth.

    – cylinder.y
    Jan 2 at 12:49



















  • I think you might be adding multiple/multi-level nodes causing multiple events to be emitted. try printing event.getInfo() and see if thy are same.

    – awd
    Jan 2 at 12:40













  • @awd both executions a relative to the same node. I have moved a leaf, there is no multi-level depth.

    – cylinder.y
    Jan 2 at 12:49

















I think you might be adding multiple/multi-level nodes causing multiple events to be emitted. try printing event.getInfo() and see if thy are same.

– awd
Jan 2 at 12:40







I think you might be adding multiple/multi-level nodes causing multiple events to be emitted. try printing event.getInfo() and see if thy are same.

– awd
Jan 2 at 12:40















@awd both executions a relative to the same node. I have moved a leaf, there is no multi-level depth.

– cylinder.y
Jan 2 at 12:49





@awd both executions a relative to the same node. I have moved a leaf, there is no multi-level depth.

– cylinder.y
Jan 2 at 12:49












1 Answer
1






active

oldest

votes


















1














I found an solution:



@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);
}
}
});
}





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54006380%2fhow-to-process-node-move-event-with-eventlistener-in-aem-duplicate-calls-occurs%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    I found an solution:



    @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);
    }
    }
    });
    }





    share|improve this answer




























      1














      I found an solution:



      @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);
      }
      }
      });
      }





      share|improve this answer


























        1












        1








        1







        I found an solution:



        @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);
        }
        }
        });
        }





        share|improve this answer













        I found an solution:



        @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);
        }
        }
        });
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 3 at 10:01









        NastyaNastya

        313




        313
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54006380%2fhow-to-process-node-move-event-with-eventlistener-in-aem-duplicate-calls-occurs%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Monofisismo

            compose and upload a new article using a custom form

            How to correct the classpath of spring boot application so that it contains a single, compatible version of...