hsp wrote:
session.getWorkspace().getObservationManager().addEventListener(
                ListenerNodeAddEscribaBase.getInstance(),
                Event.NODE_ADDED,
                "/",
                true,
                null,
                new String[] {"nt:base"},
                false
);
                
Node nodeGrupo = (Node)session.getItem("/");
nodeGrupo.addNode(nomeNode, "nt:folder");
session.save();
session.logout();

Events are delivered with an asynchronous background thread. This way the internals of jackrabbit do not have to wait for listener implementations to complete the commit of changes.

because your code logs out the session immediately after save() it may happen that the notification of your listener does not happen within that short period of time. As soon as a session is logged out all its associated EventListeners are invalidated and are not notified anymore. This is because the Event instances are bound to the namespace mappings of the current session. Event.getPath() must return the namespace prefixes according to the currently set mapping in the Session. When the session is gone, Event.getPath() would not be able to return any sensible value anymore.

I doubt there is a practical use case, which requires what you are doing in your code.

If you really need such a functionality, which I doubt, you may write an event listener that implements org.apache.jackrabbit.core.observation.SynchronousEventListener

Implementing classes are guaranteed to get events before save() returns.

regards
 marcel

Reply via email to