jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Haller (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OAK-3228) Delayed visibility of new groups when using PrincipalManager
Date Wed, 04 Nov 2015 12:20:27 GMT

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

Andreas Haller commented on OAK-3228:
-------------------------------------

Same problem here. Issue seems to be there:

{code}
class PrincipalProviderImpl implements PrincipalProvider {

    [...]

    private final UserManager userManager;

    PrincipalProviderImpl(@Nonnull Root root,
                          @Nonnull UserConfiguration userConfiguration,
                          @Nonnull NamePathMapper namePathMapper) {
        this.userManager = userConfiguration.getUserManager(root, namePathMapper);
    }

    [...]

}
{code}

> 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: core
>    Affects Versions: 1.2.2
>            Reporter: Georg Henzler
>
> 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)

Mime
View raw message