Replication listener for DAM assets | Community
Skip to main content
mohammadm377380
Level 2
March 1, 2018
Solved

Replication listener for DAM assets

  • March 1, 2018
  • 5 replies
  • 3586 views

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("");

    }

}

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by mohammadm377380

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

     }

}

5 replies

kautuk_sahni
Community Manager
Community Manager
March 1, 2018

Moving this to the Assets topic!!

Kautuk Sahni
smacdonald2008
Level 10
March 1, 2018

Id your log messages being written to the log file?

mohammadm377380
mohammadm377380AuthorAccepted solution
Level 2
March 1, 2018

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

     }

}

smacdonald2008
Level 10
March 1, 2018

We have an older AEM article that shows logic for a replication event handler too -- Adobe CQ Help | Creating Replication Event Handlers for Adobe Experience Manager

mohammadm377380
Level 2
March 2, 2018

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