Expand my Community achievements bar.

SOLVED

Page activation event handling

Avatar

Level 2

Hi,

I am trying to invoke event handler after page activation. Event handler is invoking for all activation's(like image,file and page) but I need to invoke handler when I activate pages from specific paths. I am using OSGI annotations not felix. Below is my code snippet 

@component(immediate = true, service = EventHandler.class, property = {

EventConstants.EVENT_TOPIC + "=" + ReplicationAction.EVENT_TOPIC,
EventConstants.EVENT_FILTER + "(" + ReplicationAction.PROPERTY_PATH + "=/content/mypage/*)"

})
public class SimpleDSComponent implements Runnable, EventHandler {

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

public void handleEvent(Event event) {
String n[] = event.getPropertyNames();
log.info("Replication action: {} on {}", event.getProperty(ReplicationAction.PROPERTY_TYPE), event.getProperty(ReplicationAction.PROPERTY_PATH));
// log.info("Event occurred: {}", event.getProperty(WorkflowEvent.EVENT_TYPE));
log.info("Event properties: ");
for(String s : n) {
log.info(s + " = " + event.getProperty(s));
}
ReplicationAction action = ReplicationAction.fromEvent(event);
if(action != null) {
log.info("Replication action {} occured on {} ", action.getType().getName(), action.getPath());
}
log.info("");
}

 

When I use event filter handler is not invoking for any activation. I am suspecting event filter definition is wrong.

 

Can you please help me out how can I write filter with multiple paths.

 

Thanks,

Sathish

 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor
5 Replies

Avatar

Community Advisor

Try once by replacing EventConstants.EVENT_FILTER + "(" + ReplicationAction.PROPERTY_PATH + "=/content/mypage/*)"

to 

EventConstants.EVENT_FILTER + "=(" + ReplicationAction.PROPERTY_PATH + "=/content/mypage/*)"

or

EventConstants.EVENT_FILTER + "=(" + SlingConstants.PROPERTY_PATH) + "=/content/mypage/*)"

 

Regards

Albin I

https://www.albinsblog.com

Avatar

Correct answer by
Community Advisor

Hi,

It should work, I tried with below, it worked for me

 

https://github.com/arunpatidar02/aem63app-repo/blob/master/java/ReplicationEvent2.java

 



Arun Patidar

Avatar

Level 2

Hi Arun,

 

Thank you for your Reply.

 

Now handler is activating but it is activating for all pages and images irrespective of path. How can I restrict it. 

@component(immediate = true, service = EventHandler.class, property = {

EventConstants.EVENT_TOPIC + "=" + ReplicationAction.EVENT_TOPIC,
EventConstants.EVENT_FILTER + "path=/content/mypage/en/help/*"

})

 

Thanks,

Sathish

Avatar

Community Advisor

Hi, I have just updated the code with correct path filter

e.g.

 

EventConstants.EVENT_FILTER + "=(paths=/content/mypage/en/help/*)" 



Arun Patidar