Expand my Community achievements bar.

Dive into Adobe Summit 2024! Explore curated list of AEM sessions & labs, register, connect with experts, ask questions, engage, and share insights. Don't miss the excitement.
SOLVED

Replication listener for DAM assets

Avatar

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

Avatar

Correct answer by
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

Avatar

Administrator

Moving this to the Assets topic!!



Kautuk Sahni

Avatar

Level 10

Id your log messages being written to the log file?

Avatar

Correct answer by
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);

     }

}

Avatar

Level 2

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