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 mr...@apache.org on 2012/09/19 09:41:37 UTC
svn commit: r1387472 -
/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
Author: mreutegg
Date: Wed Sep 19 07:41:37 2012
New Revision: 1387472
URL: http://svn.apache.org/viewvc?rev=1387472&view=rev
Log:
OAK-201: NamespaceRegistry is very slow
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java?rev=1387472&r1=1387471&r2=1387472&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java Wed Sep 19 07:41:37 2012
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.oak.jcr;
import java.security.AccessControlException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
@@ -433,11 +434,11 @@ public class SessionImpl extends Abstrac
//--------------------------------------------------< Namespaces >---
- // The code below is copied from JCR Commons AbstractSession, but provides information
- // the "hasRemappings" information
+ // The code below was initially copied from JCR Commons AbstractSession, but
+ // provides information the "hasRemappings" information
/**
- * Local namespace mappings. Prefixes as keys and namespace URIs as values.
+ * Local namespace remappings. Prefixes as keys and namespace URIs as values.
* <p>
* This map is only accessed from synchronized methods (see
* <a href="https://issues.apache.org/jira/browse/JCR-1793">JCR-1793</a>).
@@ -485,13 +486,17 @@ public class SessionImpl extends Abstrac
@Override
public String[] getNamespacePrefixes() throws RepositoryException {
- for (String uri : getWorkspace().getNamespaceRegistry().getURIs()) {
- getNamespacePrefix(uri);
- }
-
+ Set<String> uris = new HashSet<String>();
+ uris.addAll(Arrays.asList(getWorkspace().getNamespaceRegistry().getURIs()));
synchronized (namespaces) {
- return namespaces.keySet().toArray(new String[namespaces.size()]);
+ // Add namespace uris only visible to session
+ uris.addAll(namespaces.values());
}
+ Set<String> prefixes = new HashSet<String>();
+ for (String uri : uris) {
+ prefixes.add(getNamespacePrefix(uri));
+ }
+ return prefixes.toArray(new String[prefixes.size()]);
}
@Override
@@ -507,9 +512,6 @@ public class SessionImpl extends Abstrac
// so there are no mappings for this prefix
throw new NamespaceException("Namespace not found: " + prefix);
}
- // Add the mapping to the local set, we already know that
- // the prefix is not taken
- namespaces.put(prefix, uri);
}
return uri;
@@ -534,7 +536,9 @@ public class SessionImpl extends Abstrac
prefix = base + i;
}
- namespaces.put(prefix, uri);
+ if (!base.equals(prefix)) {
+ namespaces.put(prefix, uri);
+ }
return prefix;
}
}