[ 
https://issues.apache.org/jira/browse/OAK-3228?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15162891#comment-15162891
 ] 

Konrad Windszus edited comment on OAK-3228 at 2/24/16 12:23 PM:
----------------------------------------------------------------

I just tested again with the test servlet from above.
With AEM 6.2 (based on Oak 1.3.15) it does work but with AEM 6.1SP1 (based on 
Oak 1.2.7) it doesn't (meaning the PrincipalManager will not immediately expose 
the group which was just being created in the same session).
[~anchela] Do you have any idea which ticket was fixed in between, which could 
have caused this behaviour?



was (Author: kwin):
I just tested again with the test servlet from above.
With AEM 6.2 (based on Oak 1.3.15) it does work but with AEM 6.1SP1 (based on 
Oak 1.2.7) it doesn't (meaning the PrincipalManager will not immediately 
exposed the just created group in the same session).
[~anchela] Do you have any idea which ticket was fixed in between, which could 
have caused this behaviour?


> Delayed visibility of new groups when using PrincipalManager 
> -------------------------------------------------------------
>
>                 Key: OAK-3228
>                 URL: https://issues.apache.org/jira/browse/OAK-3228
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: jcr
>    Affects Versions: 1.2.2
>            Reporter: Georg Henzler
>         Attachments: OAK-3228_testcase.patch
>
>
> PrincipalManager does not show groups that were just created (this is causing 
> problems in our code). As workaround we use now 
> UserManager.getAuthorizable().getPrincipal() which curiously works 
> immediately after saving a group. Also it does not seem to be an index 
> problem, as a query {{SELECT * FROM [rep:Authorizable] WHERE 
> [rep:principalName] = "mygroup"}} also immediately shows a new group.
> See the following servlet snippet for easy reproduction:
> {code}
> ...
> @SlingServlet(paths = "/bin/CreateGroupAndRetrievePrincipal", methods = "GET")
> public class CreateGroupAndRetrievePrincipalServlet extends 
> SlingSafeMethodsServlet {
>     private static final long serialVersionUID = 1L;
>     private static final Logger LOG = 
> LoggerFactory.getLogger(CreateGroupAndRetrievePrincipalServlet.class);
>     @Reference
>     private SlingRepository repository;
>     @Override
>     @SuppressWarnings("deprecation")
>     protected void doGet(final SlingHttpServletRequest request, final 
> SlingHttpServletResponse response) throws ServletException,
>             IOException {
>         response.setContentType("text/plain");
>         PrintWriter out = response.getWriter();
>         final String groupName = request.getParameter("g");
>         LOG.debug("test");
>         Session session = null;
>         try {
>             session = repository.loginAdministrative(null);
>             UserManager usermanager = ((JackrabbitSession) 
> session).getUserManager();
>             Group newGroup = usermanager.createGroup(new 
> java.security.Principal() {
>                 @Override
>                 public String getName() {
>                     return groupName;
>                 }
>             }, "principaltest");
>             out.println("Created Group " + newGroup);
>             session.save();
>         } catch (Exception e) {
>             throw new ServletException(e.getMessage(), e);
>         } finally {
>             if (session != null) {
>                 session.logout();
>                 session = null;
>             }
>         }
>         out.println();
>         try {
>             session = repository.loginAdministrative(null);
>             // No 1: PrincipalManager
>             PrincipalManager principalManager = ((JackrabbitSession) 
> session).getPrincipalManager();
>             Principal principal = principalManager.getPrincipal(groupName);
>             out.println("PrincipalManager: principal: " + principal);
>             // No 2: UserManager
>             UserManager usermanager = ((JackrabbitSession) 
> session).getUserManager();
>             Authorizable authorizable = 
> usermanager.getAuthorizable(groupName);
>             out.println("UserManager: authorizable: " + authorizable);
>             // No 3: query
>             QueryManager queryManager = 
> session.getWorkspace().getQueryManager();
>             final Query query = queryManager.createQuery("SELECT * FROM 
> [rep:Authorizable] WHERE [rep:principalName] = \"" + groupName
>                     + "\"", Query.JCR_SQL2);
>             QueryResult result = query.execute();
>             NodeIterator nodes = result.getNodes();
>             if (!nodes.hasNext()) {
>                 out.println("QUERY: group not found: " + groupName);
>             }
>             while (nodes.hasNext()) {
>                 Node resultNode = (Node) nodes.next();
>                 out.println("QUERY: node " + resultNode.getPath() + " 
> property rep:principalName="
>                         + 
> resultNode.getProperty("rep:principalName").getString());
>             }
>             query.execute();
>         } catch (Exception e) {
>             throw new ServletException(e.getMessage(), e);
>         } finally {
>             if (session != null) {
>                 session.logout();
>                 session = null;
>             }
>         }
>     }
> }
> {code}
> returns (using AEM 6.1)
> {code}
> Created Group Group 'my-test-group'
> PrincipalManager: principal: null
> UserManager: authorizable: Group 'my-test-group'
> QUERY: node /home/groups/principaltest/qb2WDGrrC0q9bE8jaObH property 
> rep:principalName=my-test-group
> {code}
> Potentially the problem is that the principal manager holds its own session 
> (even though it was retrieved by {{((JackrabbitSession) 
> session).getPrincipalManager()}}) and the refresh behaviour of sessions 
> (http://jackrabbit.apache.org/oak/docs/dos_and_donts.html)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to