[
https://issues.apache.org/jira/browse/OAK-3228?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
angela resolved OAK-3228.
-------------------------
Resolution: Cannot Reproduce
[~kwin], [~henzlerg], if you can provide an updated test-case that allows me to
reproduce your finding in Oak trunk or the 1.2 branch, please feel free to
reopen with a patch (or instructions). thanks a lot.
> 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)