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 md...@apache.org on 2012/08/30 17:13:31 UTC

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

Author: mduerig
Date: Thu Aug 30 15:13:30 2012
New Revision: 1378981

URL: http://svn.apache.org/viewvc?rev=1378981&view=rev
Log:
OAK-66: JCR Node Type Management
refactor NodeTypeManagerImpl: remove session scope remove session scope dependencies 

Added:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/AbstractNodeTypeManager.java
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java

Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/AbstractNodeTypeManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/AbstractNodeTypeManager.java?rev=1378981&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/AbstractNodeTypeManager.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/AbstractNodeTypeManager.java Thu Aug 30 15:13:30 2012
@@ -0,0 +1,185 @@
+package org.apache.jackrabbit.oak.plugins.type;
+
+import java.util.List;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.ValueFactory;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeDefinition;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.NodeTypeTemplate;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
+
+import com.google.common.collect.Lists;
+import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
+import org.apache.jackrabbit.oak.api.CoreValueFactory;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl;
+import org.apache.jackrabbit.oak.plugins.memory.MemoryValueFactory;
+import org.apache.jackrabbit.oak.util.NodeUtil;
+
+public abstract class AbstractNodeTypeManager implements NodeTypeManager {
+
+    /**
+     * Returns the internal name for the specified JCR name.
+     *
+     * @param jcrName JCR node type name.
+     * @return the internal representation of the given JCR name.
+     * @throws javax.jcr.RepositoryException If there is no valid internal representation
+     * of the specified JCR name.
+     */
+    @Nonnull
+    protected final String getOakName(String jcrName) throws RepositoryException {
+        String oakName = getNameMapper().getOakName(jcrName);
+        if (oakName == null) {
+            throw new RepositoryException("Invalid JCR name " + jcrName);
+        }
+        return oakName;
+    }
+
+    /**
+     * @return  {@link org.apache.jackrabbit.oak.api.Tree} instance where the node types
+     * are stored or {@code null} if none.
+     */
+    @CheckForNull
+    protected abstract Tree getTypes();
+
+    /**
+     * Called by the {@link NodeTypeManager} implementation methods to
+     * refresh the state of the session associated with this instance.
+     * That way the session is kept in sync with the latest global state
+     * seen by the node type manager.
+     *
+     * @throws RepositoryException if the session could not be refreshed
+     */
+    protected void refresh() throws RepositoryException {
+    }
+
+    /**
+     * The value factory to be used by {@link org.apache.jackrabbit.oak.plugins.type.PropertyDefinitionImpl#getDefaultValues()}.
+     * If {@code null} the former returns {@code null}.
+     * @return  {@code ValueFactory} instance or {@code null}.
+     */
+    @CheckForNull
+    protected ValueFactory getValueFactory() {
+        return null;
+    }
+
+    @Nonnull
+    protected CoreValueFactory getCoreValueFactory() {
+        return MemoryValueFactory.INSTANCE;
+    }
+
+    @Nonnull
+    protected NameMapper getNameMapper() {
+        return NamePathMapperImpl.DEFAULT;
+    }
+
+    //----------------------------------------------------< NodeTypeManager >---
+
+    @Override
+    public boolean hasNodeType(String name) throws RepositoryException {
+        Tree types = getTypes();
+        return types != null && types.hasChild(getOakName(name));
+    }
+
+    @Override
+    public NodeType getNodeType(String name) throws RepositoryException {
+        Tree types = getTypes();
+        if (types != null) {
+            Tree type = types.getChild(getOakName(name));
+            if (type != null) {
+                return new NodeTypeImpl(this, getValueFactory(),
+                        new NodeUtil(type, getCoreValueFactory(), getNameMapper()));
+            }
+        }
+        throw new NoSuchNodeTypeException(name);
+    }
+
+    @Override
+    public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
+        List<NodeType> list = Lists.newArrayList();
+        Tree types = getTypes();
+        if (types != null) {
+            for (Tree type : types.getChildren()) {
+                list.add(new NodeTypeImpl(this, getValueFactory(),
+                        new NodeUtil(type, getCoreValueFactory(), getNameMapper())));
+
+            }
+        }
+        return new NodeTypeIteratorAdapter(list);
+    }
+
+    @Override
+    public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException {
+        List<NodeType> list = Lists.newArrayList();
+        NodeTypeIterator iterator = getAllNodeTypes();
+        while (iterator.hasNext()) {
+            NodeType type = iterator.nextNodeType();
+            if (!type.isMixin()) {
+                list.add(type);
+            }
+        }
+        return new NodeTypeIteratorAdapter(list);
+    }
+
+    @Override
+    public NodeTypeIterator getMixinNodeTypes() throws RepositoryException {
+        List<NodeType> list = Lists.newArrayList();
+        NodeTypeIterator iterator = getAllNodeTypes();
+        while (iterator.hasNext()) {
+            NodeType type = iterator.nextNodeType();
+            if (type.isMixin()) {
+                list.add(type);
+            }
+        }
+        return new NodeTypeIteratorAdapter(list);
+    }
+
+    @Override
+    public NodeTypeTemplate createNodeTypeTemplate() throws RepositoryException {
+        return new NodeTypeTemplateImpl(this, getValueFactory());
+    }
+
+    @Override
+    public NodeTypeTemplate createNodeTypeTemplate(NodeTypeDefinition ntd) throws RepositoryException {
+        return new NodeTypeTemplateImpl(this, getValueFactory(), ntd);
+    }
+
+    @Override
+    public NodeDefinitionTemplate createNodeDefinitionTemplate() {
+        return new NodeDefinitionTemplateImpl();
+    }
+
+    @Override
+    public PropertyDefinitionTemplate createPropertyDefinitionTemplate() {
+        return new PropertyDefinitionTemplateImpl();
+    }
+
+    @Override
+    public NodeType registerNodeType(NodeTypeDefinition ntd, boolean allowUpdate) throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] ntds, boolean allowUpdate) throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public void unregisterNodeType(String name) throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public void unregisterNodeTypes(String[] names) throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+}

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java?rev=1378981&r1=1378980&r2=1378981&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/NodeTypeManagerImpl.java Thu Aug 30 15:13:30 2012
@@ -21,7 +21,6 @@ import java.io.InputStreamReader;
 import java.util.List;
 import java.util.Map;
 
-import javax.annotation.Nonnull;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
@@ -29,17 +28,17 @@ import javax.jcr.ValueFactory;
 import javax.jcr.nodetype.ItemDefinition;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.nodetype.NodeDefinition;
-import javax.jcr.nodetype.NodeDefinitionTemplate;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.nodetype.NodeTypeDefinition;
 import javax.jcr.nodetype.NodeTypeExistsException;
 import javax.jcr.nodetype.NodeTypeIterator;
-import javax.jcr.nodetype.NodeTypeManager;
 import javax.jcr.nodetype.NodeTypeTemplate;
 import javax.jcr.nodetype.PropertyDefinition;
-import javax.jcr.nodetype.PropertyDefinitionTemplate;
 import javax.jcr.version.OnParentVersionAction;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
 import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -49,12 +48,9 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
 import org.apache.jackrabbit.oak.namepath.NameMapper;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 
-public class NodeTypeManagerImpl implements NodeTypeManager, NodeTypeConstants {
+public class NodeTypeManagerImpl extends AbstractNodeTypeManager {
 
     private final ContentSession session;
 
@@ -62,8 +58,7 @@ public class NodeTypeManagerImpl impleme
 
     private final ValueFactory factory;
 
-    public NodeTypeManagerImpl(
-            ContentSession session, NameMapper mapper, ValueFactory factory) {
+    public NodeTypeManagerImpl(ContentSession session, NameMapper mapper, ValueFactory factory) {
         this.session = session;
         this.mapper = mapper;
         this.factory = factory;
@@ -86,12 +81,12 @@ public class NodeTypeManagerImpl impleme
                     }
                     for (NodeTypeTemplate template : templates.values()) {
                         if (!template.isMixin()
-                                && !NT_BASE.equals(template.getName())) {
+                                && !JcrConstants.NT_BASE.equals(template.getName())) {
                             String[] supertypes =
                                     template.getDeclaredSupertypeNames();
                             if (supertypes.length == 0) {
                                 template.setDeclaredSuperTypeNames(
-                                        new String[] {NT_BASE});
+                                        new String[] {JcrConstants.NT_BASE});
                             } else {
                                 // Check whether we need to add the implicit "nt:base" supertype
                                 boolean needsNtBase = true;
@@ -102,7 +97,7 @@ public class NodeTypeManagerImpl impleme
                                 }
                                 if (needsNtBase) {
                                     String[] withBase = new String[supertypes.length + 1];
-                                    withBase[0] = NT_BASE;
+                                    withBase[0] = JcrConstants.NT_BASE;
                                     System.arraycopy(supertypes, 0, withBase, 1, supertypes.length);
                                     template.setDeclaredSuperTypeNames(withBase);
                                 }
@@ -121,114 +116,27 @@ public class NodeTypeManagerImpl impleme
         }
     }
 
-    /**
-     * Returns the internal name for the specified JCR name.
-     *
-     * @param jcrName JCR node type name.
-     * @return the internal representation of the given JCR name.
-     * @throws RepositoryException If there is no valid internal representation
-     * of the specified JCR name.
-     */
-    @Nonnull
-    protected String getOakName(String jcrName) throws RepositoryException {
-        String oakName = mapper.getOakName(jcrName);
-        if (oakName == null) {
-            throw new RepositoryException("Invalid JCR name " + jcrName);
-        }
-        return oakName;
-    }
-
-    /**
-     * Called by the {@link NodeTypeManager} implementation methods to
-     * refresh the state of the session associated with this instance.
-     * That way the session is kept in sync with the latest global state
-     * seen by the node type manager.
-     *
-     * @throws RepositoryException if the session could not be refreshed
-     */
-    protected void refresh() throws RepositoryException {
-    }
-
-    //----------------------------------------------------< NodeTypeManager >---
-
-    @Override
-    public boolean hasNodeType(String name) throws RepositoryException {
-        Tree types = session.getCurrentRoot().getTree(NODE_TYPES_PATH);
-        return types != null && types.hasChild(getOakName(name));
-    }
-
-    @Override
-    public NodeType getNodeType(String name) throws RepositoryException {
-        Tree types = session.getCurrentRoot().getTree(NODE_TYPES_PATH);
-        if (types != null) {
-            Tree type = types.getChild(getOakName(name));
-            if (type != null) {
-                return new NodeTypeImpl(this, factory, new NodeUtil(
-                        type, session.getCoreValueFactory(), mapper));
-            }
-        }
-        throw new NoSuchNodeTypeException(name);
-    }
-
     @Override
-    public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
-        List<NodeType> list = Lists.newArrayList();
-        Tree types = session.getCurrentRoot().getTree(NODE_TYPES_PATH);
-        if (types != null) {
-            for (Tree type : types.getChildren()) {
-                list.add(new NodeTypeImpl(this, factory, new NodeUtil(
-                        type, session.getCoreValueFactory(), mapper)));
-
-            }
-        }
-        return new NodeTypeIteratorAdapter(list);
-    }
-
-    @Override
-    public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException {
-        List<NodeType> list = Lists.newArrayList();
-        NodeTypeIterator iterator = getAllNodeTypes();
-        while (iterator.hasNext()) {
-            NodeType type = iterator.nextNodeType();
-            if (!type.isMixin()) {
-                list.add(type);
-            }
-        }
-        return new NodeTypeIteratorAdapter(list);
+    protected Tree getTypes() {
+        return session.getCurrentRoot().getTree(NodeTypeConstants.NODE_TYPES_PATH);
     }
 
     @Override
-    public NodeTypeIterator getMixinNodeTypes() throws RepositoryException {
-        List<NodeType> list = Lists.newArrayList();
-        NodeTypeIterator iterator = getAllNodeTypes();
-        while (iterator.hasNext()) {
-            NodeType type = iterator.nextNodeType();
-            if (type.isMixin()) {
-                list.add(type);
-            }
-        }
-        return new NodeTypeIteratorAdapter(list);
-    }
-
-    @Override
-    public NodeTypeTemplate createNodeTypeTemplate() throws RepositoryException {
-        return new NodeTypeTemplateImpl(this, factory);
+    protected ValueFactory getValueFactory() {
+        return factory;
     }
 
     @Override
-    public NodeTypeTemplate createNodeTypeTemplate(NodeTypeDefinition ntd) throws RepositoryException {
-        return new NodeTypeTemplateImpl(this, factory, ntd);
+    protected CoreValueFactory getCoreValueFactory() {
+        return session.getCoreValueFactory();
     }
 
     @Override
-    public NodeDefinitionTemplate createNodeDefinitionTemplate() {
-        return new NodeDefinitionTemplateImpl();
+    protected NameMapper getNameMapper() {
+        return mapper;
     }
 
-    @Override
-    public PropertyDefinitionTemplate createPropertyDefinitionTemplate() {
-        return new PropertyDefinitionTemplateImpl();
-    }
+    //----------------------------------------------------< NodeTypeManager >---
 
     @Override
     public NodeType registerNodeType(NodeTypeDefinition ntd, boolean allowUpdate) throws RepositoryException {
@@ -245,7 +153,8 @@ public class NodeTypeManagerImpl impleme
     }
 
     @Override
-    public NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] ntds, boolean allowUpdate) throws RepositoryException {
+    public final NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] ntds, boolean allowUpdate)
+            throws RepositoryException {
         // TODO handle inter-type dependencies (OAK-66)
         Root root = session.getCurrentRoot();
         Tree types = getOrCreateNodeTypes(root);
@@ -278,100 +187,99 @@ public class NodeTypeManagerImpl impleme
         }
         type = types.addChild(oakName);
 
-        CoreValueFactory factory = session.getCoreValueFactory();
-        NodeUtil node = new NodeUtil(type, factory, mapper);
-        node.setName(JCR_PRIMARYTYPE, NT_NODETYPE);
-        node.setName(JCR_NODETYPENAME, jcrName);
-        node.setNames(JCR_SUPERTYPES, ntd.getDeclaredSupertypeNames());
-        node.setBoolean(JCR_IS_ABSTRACT, ntd.isAbstract());
-        node.setBoolean(JCR_IS_QUERYABLE, ntd.isQueryable());
-        node.setBoolean(JCR_ISMIXIN, ntd.isMixin());
-        node.setBoolean(JCR_HASORDERABLECHILDNODES, ntd.hasOrderableChildNodes());
+        NodeUtil node = new NodeUtil(type, getCoreValueFactory(), mapper);
+        node.setName(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_NODETYPE);
+        node.setName(JcrConstants.JCR_NODETYPENAME, jcrName);
+        node.setNames(JcrConstants.JCR_SUPERTYPES, ntd.getDeclaredSupertypeNames());
+        node.setBoolean(NodeTypeConstants.JCR_IS_ABSTRACT, ntd.isAbstract());
+        node.setBoolean(NodeTypeConstants.JCR_IS_QUERYABLE, ntd.isQueryable());
+        node.setBoolean(JcrConstants.JCR_ISMIXIN, ntd.isMixin());
+        node.setBoolean(JcrConstants.JCR_HASORDERABLECHILDNODES, ntd.hasOrderableChildNodes());
         String primaryItemName = ntd.getPrimaryItemName();
         if (primaryItemName != null) {
-            node.setName(JCR_PRIMARYITEMNAME, primaryItemName);
+            node.setName(JcrConstants.JCR_PRIMARYITEMNAME, primaryItemName);
         }
 
         int pdn = 1;
         for (PropertyDefinition pd : ntd.getDeclaredPropertyDefinitions()) {
-            NodeUtil def = node.addChild(JCR_PROPERTYDEFINITION + pdn++, NT_PROPERTYDEFINITION);
+            NodeUtil def = node.addChild(JcrConstants.JCR_PROPERTYDEFINITION + pdn++, JcrConstants.NT_PROPERTYDEFINITION);
             internalRegisterPropertyDefinition(def, pd);
         }
 
         int ndn = 1;
         for (NodeDefinition nd : ntd.getDeclaredChildNodeDefinitions()) {
-            NodeUtil def = node.addChild(JCR_CHILDNODEDEFINITION + ndn++, NT_CHILDNODEDEFINITION);
+            NodeUtil def = node.addChild(JcrConstants.JCR_CHILDNODEDEFINITION + ndn++, JcrConstants.NT_CHILDNODEDEFINITION);
             internalRegisterNodeDefinition(def, nd);
         }
 
         return new NodeTypeImpl(this, this.factory, node);
     }
 
-    private void internalRegisterItemDefinition(
+    private static void internalRegisterItemDefinition(
             NodeUtil node, ItemDefinition def) {
         String name = def.getName();
         if (!"*".equals(name)) {
-            node.setName(JCR_NAME, name);
+            node.setName(JcrConstants.JCR_NAME, name);
         }
-        node.setBoolean(JCR_AUTOCREATED, def.isAutoCreated());
-        node.setBoolean(JCR_MANDATORY, def.isMandatory());
-        node.setBoolean(JCR_PROTECTED, def.isProtected());
+        node.setBoolean(JcrConstants.JCR_AUTOCREATED, def.isAutoCreated());
+        node.setBoolean(JcrConstants.JCR_MANDATORY, def.isMandatory());
+        node.setBoolean(JcrConstants.JCR_PROTECTED, def.isProtected());
         node.setString(
-                JCR_ONPARENTVERSION,
+                JcrConstants.JCR_ONPARENTVERSION,
                 OnParentVersionAction.nameFromValue(def.getOnParentVersion()));
     }
 
-    private void internalRegisterPropertyDefinition(
+    private static void internalRegisterPropertyDefinition(
             NodeUtil node, PropertyDefinition def) {
         internalRegisterItemDefinition(node, def);
 
         node.setString(
-                JCR_REQUIREDTYPE,
+                JcrConstants.JCR_REQUIREDTYPE,
                 PropertyType.nameFromValue(def.getRequiredType()));
-        node.setBoolean(JCR_MULTIPLE, def.isMultiple());
-        node.setBoolean(JCR_IS_FULLTEXT_SEARCHABLE, def.isFullTextSearchable());
-        node.setBoolean(JCR_IS_QUERY_ORDERABLE, def.isQueryOrderable());
-        node.setStrings(JCR_AVAILABLE_QUERY_OPERATORS, def.getAvailableQueryOperators());
+        node.setBoolean(JcrConstants.JCR_MULTIPLE, def.isMultiple());
+        node.setBoolean(NodeTypeConstants.JCR_IS_FULLTEXT_SEARCHABLE, def.isFullTextSearchable());
+        node.setBoolean(NodeTypeConstants.JCR_IS_QUERY_ORDERABLE, def.isQueryOrderable());
+        node.setStrings(NodeTypeConstants.JCR_AVAILABLE_QUERY_OPERATORS, def.getAvailableQueryOperators());
 
         String[] constraints = def.getValueConstraints();
         if (constraints != null) {
-            node.setStrings(JCR_VALUECONSTRAINTS, constraints);
+            node.setStrings(JcrConstants.JCR_VALUECONSTRAINTS, constraints);
         }
 
         Value[] values = def.getDefaultValues();
         if (values != null) {
-            node.setValues(JCR_DEFAULTVALUES, values);
+            node.setValues(JcrConstants.JCR_DEFAULTVALUES, values);
         }
     }
 
-    private void internalRegisterNodeDefinition(NodeUtil node, NodeDefinition def) {
+    private static void internalRegisterNodeDefinition(NodeUtil node, NodeDefinition def) {
         internalRegisterItemDefinition(node, def);
 
-        node.setBoolean(JCR_SAMENAMESIBLINGS, def.allowsSameNameSiblings());
+        node.setBoolean(JcrConstants.JCR_SAMENAMESIBLINGS, def.allowsSameNameSiblings());
         node.setNames(
-                JCR_REQUIREDPRIMARYTYPES,
+                JcrConstants.JCR_REQUIREDPRIMARYTYPES,
                 def.getRequiredPrimaryTypeNames());
         String defaultPrimaryType = def.getDefaultPrimaryTypeName();
         if (defaultPrimaryType != null) {
-            node.setName(JCR_DEFAULTPRIMARYTYPE, defaultPrimaryType);
+            node.setName(JcrConstants.JCR_DEFAULTPRIMARYTYPE, defaultPrimaryType);
         }
     }
 
-    private Tree getOrCreateNodeTypes(Root root) {
-        Tree types = root.getTree(NODE_TYPES_PATH);
+    private static Tree getOrCreateNodeTypes(Root root) {
+        Tree types = root.getTree(NodeTypeConstants.NODE_TYPES_PATH);
         if (types == null) {
-            Tree system = root.getTree(JCR_SYSTEM);
+            Tree system = root.getTree('/' + JcrConstants.JCR_SYSTEM);
             if (system == null) {
-                system = root.getTree("").addChild(JCR_SYSTEM);
+                system = root.getTree("/").addChild(JcrConstants.JCR_SYSTEM);
             }
-            types = system.addChild(JCR_NODE_TYPES);
+            types = system.addChild(NodeTypeConstants.JCR_NODE_TYPES);
         }
         return types;
     }
 
     private boolean nodeTypesInContent() {
         Root currentRoot = session.getCurrentRoot();
-        Tree types = currentRoot.getTree(NODE_TYPES_PATH);
+        Tree types = currentRoot.getTree(NodeTypeConstants.NODE_TYPES_PATH);
         return types != null && types.getChildrenCount() > 0;
     }
 
@@ -379,7 +287,7 @@ public class NodeTypeManagerImpl impleme
     public void unregisterNodeType(String name) throws RepositoryException {
         Tree type = null;
         Root root = session.getCurrentRoot();
-        Tree types = root.getTree(NODE_TYPES_PATH);
+        Tree types = root.getTree(NodeTypeConstants.NODE_TYPES_PATH);
         if (types != null) {
             type = types.getChild(getOakName(name));
         }
@@ -399,7 +307,7 @@ public class NodeTypeManagerImpl impleme
     @Override
     public void unregisterNodeTypes(String[] names) throws RepositoryException {
         Root root = session.getCurrentRoot();
-        Tree types = root.getTree(NODE_TYPES_PATH);
+        Tree types = root.getTree(NodeTypeConstants.NODE_TYPES_PATH);
         if (types == null) {
             throw new NoSuchNodeTypeException("Node types can not be unregistered.");
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java?rev=1378981&r1=1378980&r2=1378981&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/type/PropertyDefinitionImpl.java Thu Aug 30 15:13:30 2012
@@ -75,7 +75,13 @@ class PropertyDefinitionImpl extends Ite
 
     @Override
     public Value[] getDefaultValues() {
-        return node.getValues("jcr:defaultValues", factory);
+        if (factory != null) {
+            return node.getValues("jcr:defaultValues", factory);
+        }
+        else {
+            log.warn("Cannot create default values: no value factory");
+            return null;
+        }
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java?rev=1378981&r1=1378980&r2=1378981&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java Thu Aug 30 15:13:30 2012
@@ -158,7 +158,12 @@ public class WorkspaceImpl implements Ja
         return new NodeTypeManagerImpl(
                 sessionDelegate.getContentSession(),
                 sessionDelegate.getNamePathMapper(),
-                sessionDelegate.getValueFactory());
+                sessionDelegate.getValueFactory()) {
+            @Override
+            protected void refresh() throws RepositoryException {
+                getSession().refresh(true);
+            }
+        };
     }
 
     @Override