Persistance Error creating new Group from UserManager (ResourcerResolver.commit()) | Community
Skip to main content
Level 4
October 16, 2015
Solved

Persistance Error creating new Group from UserManager (ResourcerResolver.commit())

  • October 16, 2015
  • 6 replies
  • 1766 views

I have a service I call on to create a new approver group for a user if it doesn't already exist, here's the whole method:

public void updateApproverGroup(Author person) { try { Map<String, Object> param = new HashMap<String, Object>();         param.put(ResourceResolverFactory.SUBSERVICE, "WriteService"); ResourceResolver resourceResolver = resolverFactory.getServiceResourceResolver(param);       log.info(resourceResolver.getUserID());     session = resourceResolver.adaptTo(Session.class);     userManager = resourceResolver.adaptTo(UserManager.class);     String groupName = person.id + "Approvers"; //does the group exist? Group group = (Group) userManager.getAuthorizable(groupName); if(group == null) { //create the group group = userManager.createGroup(groupName,new SimplePrincipal(groupName),"/home/groups/news"); log.error(group.getPath()); } resourceResolver.commit(); } catch (Exception e) { log.error(e.getMessage()); for(int i  = 0; i < e.getStackTrace().length; i++) { log.error(e.getStackTrace()[i].toString()); } return; } }

My catch block catches an exception, here's the first few lines from my console

30.09.2015 09:17:30.342 *INFO* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl writeuser 30.09.2015 09:17:30.347 *ERROR* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl /home/groups/news/TrloE9Ztv_oj1nzsxYfU 30.09.2015 09:17:30.350 *ERROR* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl Unable to commit changes to session. 30.09.2015 09:17:30.351 *ERROR* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.commit(JcrResourceProvider.java:638) 30.09.2015 09:17:30.351 *ERROR* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl org.apache.sling.resourceresolver.impl.helper.ResourceResolverContext.commit(ResourceResolverContext.java:181) 30.09.2015 09:17:30.351 *ERROR* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl org.apache.sling.resourceresolver.impl.ResourceResolverImpl.commit(ResourceResolverImpl.java:1147) 30.09.2015 09:17:30.351 *ERROR* [0:0:0:0:0:0:0:1 [1443619050214] POST /content/news/stories/200005.request HTTP/1.1] com.uc.news.PersonServiceImpl com.uc.news.PersonServiceImpl.updateApproverGroup(PersonServiceImpl.java:205)

writeuser has full rights for the entire repository, so it doesn't seem like a permissions issue. 

The group that it puts in the console at the second line isn't showing up in the repo either (as expected).

I've also tried creating the usermanager from a jackrabbitsession I adapted from the resource resolver, with no luck. (that method is detailed here).

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by smacdonald2008

See this community article where we created both AEM users and groups using the Jackrabbit API:

https://helpx.adobe.com/experience-manager/using/jackrabbit-users.html

6 replies

smacdonald2008
Level 10
October 16, 2015

I have seen that behaviour myself - that looks almost like a bug. Sometimes (like this case) so called deprecated APIs work better. This is one of those cases. 

BenSt10Author
Level 4
October 16, 2015

This worked when I swapped the resourcerevolver to resolverFactory.getAdministrativeResourceResolver(null); (as opposed to using getServiceResourceResolver).

I know that getAdministrativeResourceResolver() is deprecated, but I'll use it for now--are there details on how these differ? Is it as simple as using the admin user? How would the admin user differ from a system user will full rights?

smacdonald2008
smacdonald2008Accepted solution
Level 10
October 16, 2015

See this community article where we created both AEM users and groups using the Jackrabbit API:

https://helpx.adobe.com/experience-manager/using/jackrabbit-users.html

BenSt10Author
Level 4
October 16, 2015

I tried that both before and after the userManager.createGroup() with no success, the log is essentially exactly as before.

Lokesh_Shivalingaiah
Level 10
October 16, 2015

can you use resourceResolver.refresh() before commit() and try

Yogesh_Upadhyay
Level 6
October 16, 2015

Do something like this, I think subservice logic is not working in AEM 6.1 (It used to work in AEM6.0)

@Reference ResourceResolverFactory rrfac; ResourceResolver rr=null; Map<String,Object> authInfo = new HashMap<String,Object>(); //Change this code in future to use read only user authInfo.put(ResourceResolverFactory.USER_IMPERSONATION,"WriteUser"); rr = rrfac.getAdministrativeResourceResolver(authInfo); //Your Logic rr.commit();