JCR event listener is not working in aem 6.4 | Adobe Higher Education
Skip to main content
Level 3
November 2, 2018
Répondu

JCR event listener is not working in aem 6.4

Hi all,

Looks like the JCR event listener in 6.4 is broken. Events dont get triggered at all. Is anyone else facing the same issue? Is there any solution?

Ce sujet a été fermé aux réponses.
Meilleure réponse par arunpatidar

Hi Scott,

It does work with system user as well. But you need JCR repository session in order to get jcr events work.

Below code works for me.

aem63app-repo/SampleJCREvent.java at master · arunpatidar02/aem63app-repo · GitHub

@Reference
private SlingRepository repository;
private Session session;
private ObservationManager observationManager;
protected void activate(ComponentContext context) throws Exception {
session = repository.loginService("readService",null);
observationManager = session.getWorkspace().getObservationManager();
observationManager.addEventListener(this, Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED, "/content/AEM64App/fr", true, null,
new String[]{"cq:PageContent","nt:unstructured"} , true);
logger.info("*************added JCR event listener");
}

15 commentaires

smacdonald2008
Level 10
November 3, 2018

Confirmed this output was created:  com.adobe.community.listeners.SimpleResourceListener something has been added : /apps/example/config

Code:

package com.adobe.community.listeners;

import java.util.HashMap;

import java.util.Map;

import javax.jcr.Property;

import javax.jcr.RepositoryException;

import javax.jcr.Session;

import javax.jcr.observation.Event;

import javax.jcr.observation.EventListener;

import javax.jcr.observation.ObservationManager;

import org.apache.sling.api.resource.LoginException;

import org.apache.sling.api.resource.Resource;

import org.apache.sling.api.resource.ResourceResolver;

import org.apache.sling.api.resource.ResourceResolverFactory;

import org.osgi.service.component.annotations.Activate;

import org.osgi.service.component.annotations.Component;

import org.osgi.service.component.annotations.Deactivate;

import org.osgi.service.component.annotations.Modified;

import org.osgi.service.component.annotations.Reference;

import org.osgi.service.metatype.annotations.Designate;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.osgi.service.component.ComponentContext;

import javax.jcr.observation.EventIterator ;

@Component(immediate=true,

service= EventListener.class)

public class SimpleResourceListener implements EventListener{

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

     private Session adminSession;

    

   

     @Reference

     org.apache.sling.jcr.api.SlingRepository repository;

    

     @Activate

     public void activate(ComponentContext context) throws Exception {

     log.info("activating ExampleObservation");

     try {

   adminSession = repository.loginService("datawrite",null);

         adminSession.getWorkspace().getObservationManager().addEventListener(

          this, //handler

          Event.PROPERTY_ADDED|Event.NODE_ADDED, //binary combination of event types

          "/apps/example", //path

          true, //is Deep?

          null, //uuids filter

          null, //nodetypes filter

          false);

    

        

     } catch (RepositoryException e){

      log.error("unable to register session",e);

      throw new Exception(e);

     }

    }

    @Deactivate

    public void deactivate(){

     if (adminSession != null){

      adminSession.logout();

     }

    }

    

    public void onEvent(EventIterator eventIterator) {

      try {

        while (eventIterator.hasNext()){

          log.info("something has been added : {}", eventIterator.nextEvent().getPath());

        }

       } catch(RepositoryException e){

       log.error("Error while treating events",e);

      }

     }

    }

6.4 article  -- https://helpx.adobe.com/experience-manager/using/aem64_event_listener.html

ajinkayk6258253
Level 3
May 29, 2019

this solution is not  working for 6.5

arunpatidar
Community Advisor
Community Advisor
May 29, 2019

Hi,

What error are you getting? Is bundle active?

Arun Patidar
ajinkayk6258253
Level 3
May 29, 2019

not getting any error. bundle is also active, eventlistner not working. it worked with administrativelogin.but not with servicelogin

Level 2
March 25, 2021

It's 2021 Same problem on Cloud AEM when switched to version 2021.3.5087.20210322T071003Z. On version: AEM v2021.1.4794.20210121T150042Z. it was working fine.

arunpatidar
Community Advisor
Community Advisor
May 29, 2019

Hi,

I've just checked below example in 6.5, working fine for me.

I created a system user arch17sysuser, gave CRUD permissions, created mapping with sub service readService

mapping look like below where com.acc.arch17.arch17.core is bundle symbolic name.

com.acc.arch17.arch17.core:readService=arch17sysuser

aem63app-repo/SampleJCREvent.java at master · arunpatidar02/aem63app-repo · GitHub

Arun Patidar
Level 4
January 11, 2023

@arunpatidar 

onEvent method never triggered for me. is it still working for you?

bcz I followed the same from here:aem63app-repo/SampleJCREvent.java at master · arunpatidar02/aem63app-repo · GitHub.

I saw the log event that get registered and unregistered.

 

public void onEvent(EventIterator it) {
while (it.hasNext()) {
Event event = it.nextEvent();
try {
logger.info("********INSIDE TRY *****");
Property changedProperty = session.getProperty(event.getPath());
if (changedProperty.getName().equalsIgnoreCase("jcr:title")
&& !changedProperty.getString().endsWith("!")) {
changedProperty.setValue(changedProperty.getString() + "!");
logger.info("*************Property updated: {}", event.getPath());
session.save();
}
}
catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}

 

arunpatidar
Community Advisor
Community Advisor
January 11, 2023

HI @karthick1356 
Which AEM version are you using?

Arun Patidar