Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

Replication listener for DAM assets

mohammadm377380
Level 2
Level 2

Hi,

I'm working on this replication listener to capture events on my publish instance whenever DAM assets are published in our author instance.

This replication listener is used to filter paths and if matches our desired filters, it will also trigger replication to other publisher.

Basically, our setup is:

When activating a cq:page:
AUTHORING (author) ==> STAGING (publish).

Then activate from STAGING (publish) ==> LIVE (publish)

When activating/deactivating a dam:Asset

AUTHOR ==> STAGING

AUTHOR ==> LIVE

Sample code below:

@Component(

        label = "Replication Event Listener",

        description = "Listen to replication events and relay it to publisher if necessary.",

        metatype = false

)

@Properties({

    // Scope the paths as tightly as possible based on your use-case.

    @Property(

            label = "Topic",

            description = "Event topic for replication",

            name = EventConstants.EVENT_TOPIC,

            value = ReplicationAction.EVENT_TOPIC

    )

})

@Service

public class ReplicationEventListener implements EventHandler {

     private Logger log = LoggerFactory.getLogger(this.getClass());

     @Override

    public void handleEvent(Event event) {

        String n[] = event.getPropertyNames();

        log.info("");

        log.info("Event occurred: {}", event.getProperty(WorkflowEvent.EVENT_TYPE));

        log.info("Event properties: ");

        for (String s : n) {

            log.info(s + " = " + event.getProperty(s));

        }

        action = ReplicationAction.fromEvent(event);

        if (action != null) {

            log.info("Replication action {} occured on {} ", action.getType().getName(), action.getPath());

        }

        log.info("");

    }

}

1 Accepted Solution
mohammadm377380
Correct answer by
Level 2
Level 2

Yes, It is writing logs.

I think I got it solved already. I have figured out that it is not triggering any replication action but only:

org/apache/sling/api/resource/Resource/ADDED

org/apache/sling/api/resource/Resource/CHANGED

org/apache/sling/api/resource/Resource/REMOVED

Here's my

@Properties({

    @Property(

        label = "Filter",

        description = "Event filter for replication",

        name = EventConstants.EVENT_FILTER,

        value = "(path=/content/dam/*)"

    ),

    @Property(

        label = "Topic",

        description = "Event topic for replication",

        name = EventConstants.EVENT_TOPIC,

        value = {

            SlingConstants.TOPIC_RESOURCE_ADDED,

            SlingConstants.TOPIC_RESOURCE_CHANGED,

            SlingConstants.TOPIC_RESOURCE_REMOVED

        }

    )

})

@Service

public class DamEventListener implements EventHandler {

     private Logger log = LoggerFactory.getLogger(this.getClass());

     @Override

     public void handleEvent(Event event) {

          String path = (String) event.getProperty(SlingConstances.PROPERTY_PATH);

          String topic = event.getTopic();

          log.info("PATH: {}", path);

          log.info("TOPIC: {}", topic);

     }

}

View solution in original post

5 Replies
kautuk_sahni
Community Manager
Community Manager

Moving this to the Assets topic!!

smacdonald2008
Level 10
Level 10

Id your log messages being written to the log file?

mohammadm377380
Correct answer by
Level 2
Level 2

Yes, It is writing logs.

I think I got it solved already. I have figured out that it is not triggering any replication action but only:

org/apache/sling/api/resource/Resource/ADDED

org/apache/sling/api/resource/Resource/CHANGED

org/apache/sling/api/resource/Resource/REMOVED

Here's my

@Properties({

    @Property(

        label = "Filter",

        description = "Event filter for replication",

        name = EventConstants.EVENT_FILTER,

        value = "(path=/content/dam/*)"

    ),

    @Property(

        label = "Topic",

        description = "Event topic for replication",

        name = EventConstants.EVENT_TOPIC,

        value = {

            SlingConstants.TOPIC_RESOURCE_ADDED,

            SlingConstants.TOPIC_RESOURCE_CHANGED,

            SlingConstants.TOPIC_RESOURCE_REMOVED

        }

    )

})

@Service

public class DamEventListener implements EventHandler {

     private Logger log = LoggerFactory.getLogger(this.getClass());

     @Override

     public void handleEvent(Event event) {

          String path = (String) event.getProperty(SlingConstances.PROPERTY_PATH);

          String topic = event.getTopic();

          log.info("PATH: {}", path);

          log.info("TOPIC: {}", topic);

     }

}

View solution in original post

mohammadm377380
Level 2
Level 2

Yeah, I actually used that logic when listening to the replication of our pages.