You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2013/03/26 11:56:06 UTC

svn commit: r1461058 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/

Author: jukka
Date: Tue Mar 26 10:56:06 2013
New Revision: 1461058

URL: http://svn.apache.org/r1461058
Log:
OAK-702: Optimize access to node type information

Use the internal Tree insteance instead of NodeImpl for the
getDefinition() call in internalSetProperty(). Avoid the extra
check on whether a property already exists (see also JCR-3543).

Remove the now unused DefinitionProvider method signature.
Also remove the OAK-652 feature flag as we're getting closer to
resolving the issue.

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java?rev=1461058&r1=1461057&r2=1461058&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/DefinitionProvider.java Tue Mar 26 10:56:06 2013
@@ -96,26 +96,6 @@ public interface DefinitionProvider {
 
     /**
      * Calculates the applicable definition for the property with the specified
-     * characteristics under the given parent node.
-     *
-     * @param parent The parent node.
-     * @param propertyName The internal oak name of the property for which the
-     * definition should be retrieved.
-     * @param isMultiple {@code true} if the target property is multi-valued.
-     * @param type The target type of the property.
-     * @param exactTypeMatch {@code true} if the required type of the definition
-     * must exactly match the type of the target property.
-     * @return the applicable definition for the target property.
-     * @throws ConstraintViolationException If no matching definition can be found.
-     * @throws RepositoryException If another error occurs.
-     */
-    @Nonnull
-    PropertyDefinition getDefinition(Node parent, String propertyName,
-                                     boolean isMultiple, int type, boolean exactTypeMatch)
-            throws ConstraintViolationException, RepositoryException;
-
-    /**
-     * Calculates the applicable definition for the property with the specified
      * characteristics under the given parent tree.
      *
      * @param parent The parent tree.

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java?rev=1461058&r1=1461057&r2=1461058&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java Tue Mar 26 10:56:06 2013
@@ -430,13 +430,6 @@ public abstract class ReadOnlyNodeTypeMa
 
     @Nonnull
     @Override
-    public PropertyDefinition getDefinition(Node parent, String propertyName, boolean isMultiple, int type, boolean exactTypeMatch) throws RepositoryException {
-        EffectiveNodeType effective = getEffectiveNodeType(parent);
-        return effective.getPropertyDefinition(propertyName, isMultiple, type, exactTypeMatch);
-    }
-
-    @Nonnull
-    @Override
     public PropertyDefinition getDefinition(Tree parent, String propertyName, boolean isMultiple, int type, boolean exactTypeMatch) throws RepositoryException {
         EffectiveNodeType effective = getEffectiveNodeType(parent);
         return effective.getPropertyDefinition(propertyName, isMultiple, type, exactTypeMatch);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java?rev=1461058&r1=1461057&r2=1461058&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java Tue Mar 26 10:56:06 2013
@@ -40,13 +40,6 @@ import org.slf4j.LoggerFactory;
  */
 abstract class ItemImpl<T extends ItemDelegate> extends AbstractItem {
 
-    /**
-     * Flag to disable expensive transient item definition checks.
-     * FIXME: This flag should be removed once OAK-652 gets resolved.
-     */
-    protected static final boolean DISABLE_TRANSIENT_DEFINITION_CHECKS =
-            Boolean.getBoolean("OAK-652");
-
     protected final SessionContext sessionContext;
     protected final T dlg;
     protected final SessionDelegate sessionDelegate;
@@ -193,16 +186,12 @@ abstract class ItemImpl<T extends ItemDe
     protected abstract ItemDefinition getDefinition() throws RepositoryException;
 
     public void checkProtected() throws RepositoryException {
-        if (DISABLE_TRANSIENT_DEFINITION_CHECKS) {
-            return;
-        }
-
         ItemDefinition definition;
         try {
             definition = getDefinition();
-        }
-        catch (RepositoryException ignore) {
-            // No definition -> not protected but a different error which should be handled else where
+        } catch (RepositoryException ignore) {
+            // FIXME: No definition -> not protected but a different error
+            // which should be handled else where
             return;
         }
         checkProtected(definition);

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1461058&r1=1461057&r2=1461058&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Tue Mar 26 10:56:06 2013
@@ -1606,30 +1606,19 @@ public class NodeImpl<T extends NodeDele
 
             @Override
             public Property perform() throws RepositoryException {
-                Value targetValue;
-                if (DISABLE_TRANSIENT_DEFINITION_CHECKS) {
-                    targetValue = value;
-                } else {
-                    PropertyDefinition definition;
-                    // TODO: Avoid extra JCR method calls (OAK-672)
-                    if (hasProperty(jcrName)) {
-                        definition = getProperty(jcrName).getDefinition();
-                    } else {
-                        definition = getDefinitionProvider().getDefinition(
-                                NodeImpl.this, oakName, false, type,
-                                exactTypeMatch);
-                    }
-                    checkProtected(definition);
-                    if (definition.isMultiple()) {
-                        throw new ValueFormatException(
-                                "Cannot set single value to multivalued property");
-                    }
-
-                    int targetType = getTargetType(value, definition);
-                    targetValue = ValueHelper.convert(
-                            value, targetType, getValueFactory());
+                // TODO: Avoid extra JCR method calls (OAK-672)
+                PropertyDefinition definition = getDefinitionProvider().getDefinition(
+                        dlg.getTree(), oakName, false, type, exactTypeMatch);
+                checkProtected(definition);
+                if (definition.isMultiple()) {
+                    throw new ValueFormatException(
+                            "Cannot set single value to multivalued property");
                 }
 
+                int targetType = getTargetType(value, definition);
+                Value targetValue = ValueHelper.convert(
+                        value, targetType, getValueFactory());
+
                 PropertyState state =
                         PropertyStates.createProperty(oakName, targetValue);
                 return new PropertyImpl(dlg.setProperty(state), sessionContext);
@@ -1653,30 +1642,19 @@ public class NodeImpl<T extends NodeDele
 
             @Override
             public Property perform() throws RepositoryException {
-                Value[] targetValues;
-                if (DISABLE_TRANSIENT_DEFINITION_CHECKS) {
-                    targetValues = values;
-                } else {
-                    PropertyDefinition definition;
-                    // TODO: Avoid extra JCR method calls (OAK-672)
-                    if (hasProperty(jcrName)) {
-                        definition = getProperty(jcrName).getDefinition();
-                    } else {
-                        definition = getDefinitionProvider().getDefinition(
-                                NodeImpl.this, oakName, true, type,
-                                exactTypeMatch);
-                    }
-                    checkProtected(definition);
-                    if (!definition.isMultiple()) {
-                        throw new ValueFormatException(
-                                "Cannot set value array to single value property");
-                    }
-
-                    int targetType = getTargetType(values, definition);
-                    targetValues = ValueHelper.convert(
-                            values, targetType, getValueFactory());
+                // TODO: Avoid extra JCR method calls (OAK-672)
+                PropertyDefinition definition = getDefinitionProvider().getDefinition(
+                        dlg.getTree(), oakName, true, type, exactTypeMatch);
+                checkProtected(definition);
+                if (!definition.isMultiple()) {
+                    throw new ValueFormatException(
+                            "Cannot set value array to single value property");
                 }
 
+                int targetType = getTargetType(values, definition);
+                Value[] targetValues = ValueHelper.convert(
+                        values, targetType, getValueFactory());
+
                 Iterable<Value> nonNullValues = Iterables.filter(
                         Arrays.asList(targetValues), Predicates.notNull());
                 PropertyState state =