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