Expand my Community achievements bar.

Nomination window for the Adobe Community Advisor Program, Class of 2025, is now open!
SOLVED

Adding multiple paths in event listener

Avatar

Adobe Champion

I have an event listener in which I am listening to a path as in the below screenshot using Observation Manger . How can I add multiple paths here , so that I can listen to multiple paths. I cannot add the root path, since I don't want to listen to the root path due to other project requirement constraints.

 

P_V_Nair_0-1643925056613.png

 

1 Accepted Solution

Avatar

Correct answer by
Level 10

Hi @P_V_Nair ,

 

Try using ResourceChangeListener to handle multiple paths.

 

https://techrevel.blog/2017/03/15/resourcechangelistener/ 

View solution in original post

3 Replies

Avatar

Correct answer by
Level 10

Hi @P_V_Nair ,

 

Try using ResourceChangeListener to handle multiple paths.

 

https://techrevel.blog/2017/03/15/resourcechangelistener/ 

Avatar

Employee Advisor

As @Kishore_Kumar_ already pointed out, use the ResourceChangeListener.

 

if that's not possible: 

JackrabbitObservationManager mgr = (JackrabbitObservationManager) session.getWorkspace().getObservationManager;

JackrabbitEventFilter filter = new JackrabbitEventFilter()
  .setAbsPath(PATH1)
  .setAdditionalPaths(PATH2,PATH3, ...)
...

mgr.addEventListener(listener, filter);

This allows to you specify more constraints than the JCR compliant JCR ObservationManager. In Oak the ObservationManager implements the JackrabbitObservationManager.

 

See

https://jackrabbit.apache.org/api/2.12/org/apache/jackrabbit/api/observation/JackrabbitEventFilter.h... https://jackrabbit.apache.org/api/2.12/org/apache/jackrabbit/api/observation/JackrabbitObservationMa...

 

Avatar

Employee

In my case adding multiple paths worked with below syntax

 

@component(service = EventHandler.class,
                immediate = true,
                property = {
                                EventConstants.EVENT_TOPIC + "=" + ReplicationAction.EVENT_TOPIC,
                                EventConstants.EVENT_FILTER + "=(|(paths=/content/projectname/*)(paths=/content/dam/projectname/*))"
                })
@ServiceDescription("Listener to listen on replication action in the resource tree")
@Designate(ocd = ReplicationListener.SolrSearchPropertiesConfiguration.class)
public class ReplicationListener implements EventHandler {

 Specially when we are working on Sling events like Activate or deactivate, the above piece of code will be really handy because you have to listen to activate or deactivate specific paths under your project related folders only in dam and sites.