Esta conversación ha sido bloqueada debido a la inactividad. Cree una nueva publicación.
Nivel 1
Nivel 2
Iniciar sesión en la comunidad
Iniciar sesión para ver todas las insignias
Esta conversación ha sido bloqueada debido a la inactividad. Cree una nueva publicación.
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?
¡Resuelto! Ir a solución.
Vistas
Respuestas
Total de me gusta
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"); | |
| } |
Vistas
Respuestas
Total de me gusta
Dear Sir or Madam,
That's impossible, if your AEM system managed to install it means that JCR Event Listener has been working(or worked).
Would it be possible that any of your code has broken Listener or your code incorrectly hooks into Listeners?
Regards,
Peter
Vistas
Respuestas
Total de me gusta
Vistas
Respuestas
Total de me gusta
Exactly - this is where the issue is. I will test this on 6.4.
Vistas
Respuestas
Total de me gusta
I got this working with the following code. The result was this - which shows the logic working:
02.11.2018 11:08:47.895 *INFO* [sling-oak-observation-19] SimpleResourceListener something has been added : /apps/example/templates
02.11.2018 11:08:47.895 *INFO* [sling-oak-observation-19] SimpleResourceListener something has been added : /apps/example/templates/jcr:primaryType
02.11.2018 11:08:47.895 *INFO* [sling-oak-observation-19] SimpleResourceListener something has been added : /apps/example/templates/jcr:createdBy
02.11.2018 11:08:47.895 *INFO* [sling-oak-observation-19] SimpleResourceListener something has been added : /apps/example/templates/jcr:created
Java 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.loginAdministrative(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);
}
}
}
I tried replacing use of login with a system user - that did not fire the event. So I whitelisted the bundle and this works. Try that.
Vistas
Respuestas
Total de me gusta
Tested again - this session (even though system user belongs to admin group and has all required permissions) does not fire off the event:
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");
ResourceResolver resolver = null;
try {
//Invoke the adaptTo method to create a Session used to create a QueryManager
resolver = resolverFactory.getServiceResourceResolver(param);
session = resolver.adaptTo(Session.class);
Vistas
Respuestas
Total de me gusta
Hi Scott,
I'm actually getting a session object in this way, using the subservice and system user. It is the recommended way right? Is there any workaround for this? I wouldn't want to get the session by passing null object because it is not the secure way.
Vistas
Respuestas
Total de me gusta
I'm getting via subservice and a system user, the usual way.
Vistas
Respuestas
Total de me gusta
hi Scott, even this code didn't work
adminSession = repository.loginAdministrative(null);
observationManager = adminSession.getWorkspace().getObservationManager();
observationManager.addEventListener(this, Event.NODE_ADDED | Event.NODE_MOVED | Event.NODE_REMOVED, "/content/dam/products",true, null, null, false);
Vistas
Respuestas
Total de me gusta
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"); | |
| } |
Vistas
Respuestas
Total de me gusta
that is great! We will create a 6.4 HELXP article and show this code.
Vistas
Respuestas
Total de me gusta
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
Vistas
Respuestas
Total de me gusta
this solution is not working for 6.5
Vistas
Respuestas
Total de me gusta
Vistas
Respuestas
Total de me gusta
not getting any error. bundle is also active, eventlistner not working. it worked with administrativelogin.but not with servicelogin
Vistas
Respuestas
Total de me gusta
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.
Vistas
Respuestas
Total de me gusta
Vistas
Respuestas
Total de me gusta
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
Vistas
Respuestas
Total de me gusta
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);
}
}
}
Vistas
Respuestas
Total de me gusta
HI @karthick1356
Which AEM version are you using?
Vistas
Respuestas
Total de me gusta
Hi @arunpatidar , AEM version is 6.5.13.
Vistas
Respuestas
Total de me gusta
Vistas
me gusta
Respuestas
Vistas
me gusta
Respuestas