Hi There,
I am getting an error called "this session has been closed " while accessing getNodes() method in event listener using jcr session object. Before executing the below block of code session is coming properly. But whenever i tried to access anything from jcr it is closing the session.
Could you please help what can be the possible reason for this ?
jcrContentNode = getJCRContentNode(event.getProperty(SlingConstants.PROPERTY_PATH).toString());
/*after event.getProperty(...) execution session is getting null values under sd and session context */
private Node getJCRContentNode(String nodePath) throws PathNotFoundException, RepositoryException {
logger.debug("NODE PATH : {}",nodePath);
Node node = jcrSession.getNode(nodePath);
return node;
}
Solved! Go to Solution.
Views
Replies
Total Likes
It looks like you are having trouble accessing the Session object. It's best practice to use "service users" while trying to obtain the Session object as you can define limitations of access within the JCR.
A great example of how to implement Sling event handlers in AEM, while utilising "service users" to obtain a Session object can be found in this blog. https://aem.redquark.org/2018/10/day-14-eventing-in-aem.html
Follow this blog article to learn how to create system users; learning the manual process is best when you are new to "system users" - http://www.aemcq5tutorials.com/tutorials/create-system-user-in-aem/
Utilise ACS Commons - Ensure Authorize feature to automate the creation of "system users" via OSGI configurations (https://adobe-consulting-services.github.io/acs-aem-commons/features/ensure-service-users/index.html)
Note: It is not recommended to obtain the session with SlingRepository.loginAdministrative() and ResourceResolverFactory.getAdministrativeResourceResolver() methods provided by Sling because of bad design and performance implementations (documentation: https://helpx.adobe.com/uk/experience-manager/6-4/sites/administering/using/security-service-users.h...). Rather, aim for "service users".
Views
Replies
Total Likes
It looks like you are having trouble accessing the Session object. It's best practice to use "service users" while trying to obtain the Session object as you can define limitations of access within the JCR.
A great example of how to implement Sling event handlers in AEM, while utilising "service users" to obtain a Session object can be found in this blog. https://aem.redquark.org/2018/10/day-14-eventing-in-aem.html
Follow this blog article to learn how to create system users; learning the manual process is best when you are new to "system users" - http://www.aemcq5tutorials.com/tutorials/create-system-user-in-aem/
Utilise ACS Commons - Ensure Authorize feature to automate the creation of "system users" via OSGI configurations (https://adobe-consulting-services.github.io/acs-aem-commons/features/ensure-service-users/index.html)
Note: It is not recommended to obtain the session with SlingRepository.loginAdministrative() and ResourceResolverFactory.getAdministrativeResourceResolver() methods provided by Sling because of bad design and performance implementations (documentation: https://helpx.adobe.com/uk/experience-manager/6-4/sites/administering/using/security-service-users.h...). Rather, aim for "service users".
Thanks for the update. I forgot to mention that we are getting a session using system user only by creating sub-service.
public ResourceResolver getServiceResourceResolver() throws RepositoryException {
HashMap<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "testService");
ResourceResolver resourceResolver = null;
try {
resourceResolver = rrf.getServiceResourceResolver(param);
} catch (Exception e) {
logger.error("Error in getting Engage Sys User Resolver : {}",e);
}
return resourceResolver;
}
public Session getServiceUserSession() {
try{
Session sysSession = getServiceResourceResolver().adaptTo(Session.class);
return sysSession;
}catch(Exception exp){
logger.error("Error in getting Engage User session" + exp);
}
return null;
}
And also we are getting the session but it got nullify whenever we try to access jcr nodes or resource.
Views
Replies
Total Likes
Views
Replies
Total Likes
Views
Likes
Replies