Author: mreutegg
Date: Thu Apr 11 09:53:57 2019
New Revision: 1857306

URL: http://svn.apache.org/viewvc?rev=1857306&view=rev
Log:
OAK-8209: Improve Node.isNodeType(String) performance

Modified:
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1857306&r1=1857305&r2=1857306&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
 Thu Apr 11 09:53:57 2019
@@ -109,6 +109,13 @@ import org.slf4j.LoggerFactory;
 public class NodeImpl<T extends NodeDelegate> extends ItemImpl<T> implements 
Node, JackrabbitNode {
 
     /**
+     * Use an zero length MVP to check read permission on jcr:mixinTypes 
(OAK-7652)
+     */
+    private static final PropertyState EMPTY_MIXIN_TYPES = 
PropertyStates.createProperty(
+            JcrConstants.JCR_MIXINTYPES, Collections.emptyList(), Type.NAMES);
+
+
+    /**
      * The maximum returned value for {@link NodeIterator#getSize()}. If there
      * are more nodes, the method returns -1.
      */
@@ -1305,11 +1312,8 @@ public class NodeImpl<T extends NodeDele
     }
 
     private boolean canReadMixinTypes(@NotNull Tree tree) throws 
RepositoryException {
-        // OAK-7652: use an zero length MVP to check read permission on 
jcr:mixinTypes
-        PropertyState mixinTypes = PropertyStates.createProperty(
-                JcrConstants.JCR_MIXINTYPES, Collections.emptyList(), 
Type.NAMES);
         return sessionContext.getAccessManager().hasPermissions(
-                tree, mixinTypes, Permissions.READ_PROPERTY);
+                tree, EMPTY_MIXIN_TYPES, Permissions.READ_PROPERTY);
     }
 
     private EffectiveNodeType getEffectiveNodeType() throws 
RepositoryException {

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java?rev=1857306&r1=1857305&r2=1857306&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/WorkspaceImpl.java
 Thu Apr 11 09:53:57 2019
@@ -76,6 +76,9 @@ public class WorkspaceImpl implements Ja
         this.queryManager = new QueryManagerImpl(sessionContext);
         this.versionManager = new VersionManagerImpl(sessionContext);
         this.nodeTypeManager = new ReadWriteNodeTypeManager() {
+
+            private Tree types;
+
             @Override
             protected void refresh() throws RepositoryException {
                 getSession().refresh(true);
@@ -84,7 +87,12 @@ public class WorkspaceImpl implements Ja
             @NotNull
             @Override
             protected Tree getTypes() {
-                return sessionDelegate.getRoot().getTree(NODE_TYPES_PATH);
+                Tree t = types;
+                if (t == null) {
+                    t = sessionDelegate.getRoot().getTree(NODE_TYPES_PATH);
+                    types = t;
+                }
+                return t;
             }
 
             @NotNull


Reply via email to