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 2012/09/18 10:45:20 UTC

svn commit: r1387053 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/ oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/ oak-jcr/...

Author: jukka
Date: Tue Sep 18 08:45:20 2012
New Revision: 1387053

URL: http://svn.apache.org/viewvc?rev=1387053&view=rev
Log:
OAK-306: Limit session refresh on namespace registry use

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeMigrator.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImplTest.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImpl.java?rev=1387053&r1=1387052&r2=1387053&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImpl.java Tue Sep 18 08:45:20 2012
@@ -26,7 +26,7 @@ import javax.jcr.RepositoryException;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
-import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.plugins.memory.StringValue;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
@@ -34,13 +34,12 @@ import org.apache.jackrabbit.oak.core.De
 /**
  * Implementation of {@link NamespaceRegistry}.
  */
-public class NamespaceRegistryImpl implements NamespaceRegistry, NamespaceConstants {
+public abstract class NamespaceRegistryImpl
+        implements NamespaceRegistry, NamespaceConstants {
 
-    private final ContentSession session;
+    abstract protected Root getReadRoot();
 
-    public NamespaceRegistryImpl(ContentSession session) {
-        this.session = session;
-    }
+    abstract protected Root getWriteRoot();
 
     /**
      * Called by the {@link NamespaceRegistry} implementation methods to
@@ -59,10 +58,9 @@ public class NamespaceRegistryImpl imple
     public void registerNamespace(String prefix, String uri)
             throws RepositoryException {
         try {
-            Root root = session.getLatestRoot();
+            Root root = getWriteRoot();
             Tree namespaces = getOrCreate(root, JcrConstants.JCR_SYSTEM, REP_NAMESPACES);
-            namespaces.setProperty(
-                    prefix, session.getCoreValueFactory().createValue(uri));
+            namespaces.setProperty(prefix, new StringValue(uri));
             root.commit(DefaultConflictHandler.OURS);
             refresh();
         } catch (NamespaceValidatorException e) {
@@ -76,7 +74,7 @@ public class NamespaceRegistryImpl imple
 
     @Override
     public void unregisterNamespace(String prefix) throws RepositoryException {
-        Root root = session.getLatestRoot();
+        Root root = getWriteRoot();
         Tree namespaces = root.getTree(NAMESPACES_PATH);
         if (namespaces == null || !namespaces.hasProperty(prefix)) {
             throw new NamespaceException(
@@ -114,11 +112,10 @@ public class NamespaceRegistryImpl imple
     @Nonnull
     public String[] getPrefixes() throws RepositoryException {
         try {
-            Tree root = session.getLatestRoot().getTree("/");
+            Tree root = getReadRoot().getTree("/");
             Map<String, String> map = Namespaces.getNamespaceMap(root);
             String[] prefixes = map.keySet().toArray(new String[map.size()]);
             Arrays.sort(prefixes);
-            refresh();
             return prefixes;
         } catch (RuntimeException e) {
             throw new RepositoryException(
@@ -130,11 +127,10 @@ public class NamespaceRegistryImpl imple
     @Nonnull
     public String[] getURIs() throws RepositoryException {
         try {
-            Tree root = session.getLatestRoot().getTree("/");
+            Tree root = getReadRoot().getTree("/");
             Map<String, String> map = Namespaces.getNamespaceMap(root);
             String[] uris = map.values().toArray(new String[map.size()]);
             Arrays.sort(uris);
-            refresh();
             return uris;
         } catch (RuntimeException e) {
             throw new RepositoryException(
@@ -146,14 +142,13 @@ public class NamespaceRegistryImpl imple
     @Nonnull
     public String getURI(String prefix) throws RepositoryException {
         try {
-            Tree root = session.getLatestRoot().getTree("/");
+            Tree root = getReadRoot().getTree("/");
             Map<String, String> map = Namespaces.getNamespaceMap(root);
             String uri = map.get(prefix);
             if (uri == null) {
                 throw new NamespaceException(
                         "No namespace registered for prefix " + prefix);
             }
-            refresh();
             return uri;
         } catch (RuntimeException e) {
             throw new RepositoryException(
@@ -166,11 +161,10 @@ public class NamespaceRegistryImpl imple
     @Nonnull
     public String getPrefix(String uri) throws RepositoryException {
         try {
-            Tree root = session.getLatestRoot().getTree("/");
+            Tree root = getReadRoot().getTree("/");
             Map<String, String> map = Namespaces.getNamespaceMap(root);
             for (Map.Entry<String, String> entry : map.entrySet()) {
                 if (entry.getValue().equals(uri)) {
-                    refresh();
                     return entry.getKey();
                 }
             }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeMigrator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeMigrator.java?rev=1387053&r1=1387052&r2=1387053&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeMigrator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeMigrator.java Tue Sep 18 08:45:20 2012
@@ -22,8 +22,8 @@ import javax.jcr.NamespaceRegistry;
 import javax.jcr.RepositoryException;
 
 import org.apache.jackrabbit.oak.api.ContentSession;
-import org.apache.jackrabbit.oak.plugins.name.NamespaceRegistryImpl;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeDefinition;
+import org.apache.jackrabbit.oak.util.TODO;
 
 /**
  * PrivilegeMigrator is a utility to migrate custom privilege definitions from
@@ -50,7 +50,9 @@ public class PrivilegeMigrator {
         // new FileSystemResource(fs, "/privileges/custom_privileges.xml").getInputStream()
         if (stream != null) {
             try {
-                NamespaceRegistry nsRegistry = new NamespaceRegistryImpl(contentSession);
+                // TODO: should get a proper namespace registry from somewhere
+                NamespaceRegistry nsRegistry =
+                        TODO.dummyImplementation().returnValue(null);
                 PrivilegeDefinition[] custom = PrivilegeDefinitionReader.readCustomDefinitons(stream, nsRegistry);
 
                 for (PrivilegeDefinition def : custom) {

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImplTest.java?rev=1387053&r1=1387052&r2=1387053&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/name/NamespaceRegistryImplTest.java Tue Sep 18 08:45:20 2012
@@ -21,6 +21,7 @@ import javax.jcr.NamespaceRegistry;
 import org.apache.jackrabbit.oak.AbstractOakTest;
 import org.apache.jackrabbit.oak.api.ContentRepository;
 import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.Root;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -34,8 +35,17 @@ public class NamespaceRegistryImplTest e
 
     @Test
     public void testMappings() throws Exception {
-        ContentSession session = createAdminSession();
-        NamespaceRegistry r = new NamespaceRegistryImpl(session);
+        final ContentSession session = createAdminSession();
+        NamespaceRegistry r = new NamespaceRegistryImpl() {
+            @Override
+            protected Root getReadRoot() {
+                return session.getLatestRoot();
+            }
+            @Override
+            protected Root getWriteRoot() {
+                return session.getLatestRoot();
+            }
+        };
 
         assertEquals("", r.getURI(""));
         assertEquals("http://www.jcp.org/jcr/1.0", r.getURI("jcr"));

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=1387053&r1=1387052&r2=1387053&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 Tue Sep 18 08:45:20 2012
@@ -32,6 +32,7 @@ import javax.jcr.version.VersionManager;
 
 import org.apache.jackrabbit.api.JackrabbitWorkspace;
 import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
+import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.jcr.lock.LockManagerImpl;
 import org.apache.jackrabbit.oak.jcr.query.QueryManagerImpl;
@@ -145,11 +146,19 @@ public class WorkspaceImpl implements Ja
 
     @Override
     public NamespaceRegistry getNamespaceRegistry() {
-        return new NamespaceRegistryImpl(sessionDelegate.getContentSession()) {
+        return new NamespaceRegistryImpl() {
             @Override
             protected void refresh() throws RepositoryException {
                 getSession().refresh(true);
             }
+            @Override
+            protected Root getReadRoot() {
+                return sessionDelegate.getRoot();
+            }
+            @Override
+            protected Root getWriteRoot() {
+                return sessionDelegate.getContentSession().getLatestRoot();
+            }
         };
     }