You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Tobias Bocanegra (JIRA)" <ji...@apache.org> on 2013/08/23 07:09:53 UTC

[jira] [Commented] (JCR-3654) Error MembershipCache if a group node contains MV property

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

Tobias Bocanegra commented on JCR-3654:
---------------------------------------

Note that the collectDeclaredMembershipFromTraversal() is only invoked if the authorizable node cannot be found via weakreference lookup. this is the case if the authorizable does not exist yet (or anymore) in the session where the lookup is performed. this usually only happens during concurrent user/group updates.

                
> Error MembershipCache if a group node contains MV property
> ----------------------------------------------------------
>
>                 Key: JCR-3654
>                 URL: https://issues.apache.org/jira/browse/JCR-3654
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: security
>    Affects Versions: 2.2, 2.3, 2.4, 2.5, 2.6, 2.7
>            Reporter: Tobias Bocanegra
>            Assignee: Tobias Bocanegra
>
> the MembershipCache.collectDeclaredMembershipFromTraversal traverses the entire /home/groups tree and analyzes all properties if they contain a reference to the authorizable node. this is very suboptimal and in case there is a multivalue, this even throws an error.
> suggest:
> * do an intelligent traversal instead using the TraversingItemVisitor.
> * be cautious not to read MV properties unchecked.
> Potential error: 
> com.day.crx.security.ldap.LDAPLoginModule Cause: javax.jcr.ValueFormatException: propert
> y /home/groups/a/administrators/jcr:mixinTypes is a multi-valued property, so it's values can only be retrieved as an array
> at org.apache.jackrabbit.core.PropertyImpl.internalGetValue(PropertyImpl.java:483)
> at org.apache.jackrabbit.core.PropertyImpl.getValue(PropertyImpl.java:510)
> at org.apache.jackrabbit.core.PropertyImpl.getString(PropertyImpl.java:520)
> at org.apache.jackrabbit.core.security.user.MembershipCache$1.entering(MembershipCache.java:363)
> at javax.jcr.util.TraversingItemVisitor.visit(TraversingItemVisitor.java:160)
> at org.apache.jackrabbit.core.PropertyImpl.accept(PropertyImpl.java:904)
> at javax.jcr.util.TraversingItemVisitor.visit(TraversingItemVisitor.java:187)
> at org.apache.jackrabbit.core.NodeImpl.accept(NodeImpl.java:1720)
> at javax.jcr.util.TraversingItemVisitor.visit(TraversingItemVisitor.java:191)
> at org.apache.jackrabbit.core.NodeImpl.accept(NodeImpl.java:1720)
> at javax.jcr.util.TraversingItemVisitor.visit(TraversingItemVisitor.java:191)
> at org.apache.jackrabbit.core.security.user.MembershipCache.collectDeclaredMembershipFromTraversal(MembershipCache.java:374)
> at org.apache.jackrabbit.core.security.user.MembershipCache.collectDeclaredMembership(MembershipCache.java:200)
> at org.apache.jackrabbit.core.security.user.AuthorizableImpl.collectMembership(AuthorizableImpl.java:358)
> at org.apache.jackrabbit.core.security.user.AuthorizableImpl.declaredMemberOf(AuthorizableImpl.java:89)
> at org.apache.jackrabbit.core.security.user.UserImpl.declaredMemberOf(UserImpl.java:38)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira