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

Multi tool use
Multi tool use












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







            J7h8Bev3,8t,Bx0ox52oWQJ B22CExYQpy0Sf Hze
            d7b5B7JTlrKjbAUQ6IJ3iXW7AT 0,nnBO97W7Ow q3z

            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas