You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/07/30 18:54:23 UTC
svn commit: r681121 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
./ persistence/bundle/ persistence/bundle/util/ query/lucene/ util/
Author: jukka
Date: Wed Jul 30 09:54:21 2008
New Revision: 681121
URL: http://svn.apache.org/viewvc?rev=681121&view=rev
Log:
JCR-1612: Reintroduce NamespaceStorage and namespace-caching
Make NamespaceRegistryImpl implement StringIndex and simplify the downstream classes accordingly.
To make this happen I modified the StringIndex contract a bit, allowing (and, for indexToString, requiring) implementations to throw exceptions if an unknown index is requested. Modified implementing classes accordingly.
Removed:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NamespaceIndex.java
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NGKDbNameIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NSRegistryBasedNamespaceMappings.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/StringIndex.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java?rev=681121&r1=681120&r2=681121&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java Wed Jul 30 09:54:21 2008
@@ -20,6 +20,7 @@
import org.apache.jackrabbit.core.cluster.NamespaceEventListener;
import org.apache.jackrabbit.core.fs.FileSystem;
import org.apache.jackrabbit.core.fs.FileSystemResource;
+import org.apache.jackrabbit.core.util.StringIndex;
import org.apache.jackrabbit.spi.commons.namespace.NamespaceResolver;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.util.XMLChar;
@@ -42,8 +43,9 @@
/**
* A <code>NamespaceRegistryImpl</code> ...
*/
-public class NamespaceRegistryImpl
- implements NamespaceRegistry, NamespaceResolver, NamespaceEventListener {
+public class NamespaceRegistryImpl implements
+ NamespaceRegistry, NamespaceResolver,
+ NamespaceEventListener, StringIndex {
private static Logger log = LoggerFactory.getLogger(NamespaceRegistryImpl.class);
@@ -286,32 +288,34 @@
eventChannel.setListener(this);
}
+ //-------------------------------------------------------< StringIndex >--
+
/**
- * Returns the index (i.e. stable prefix) for the given uri.
+ * Returns the index (i.e. stable prefix) for the given namespace URI.
*
- * @param uri the uri to retrieve the index for
- * @return the index
- * @throws NamespaceException if the URI is not registered.
+ * @param uri namespace URI
+ * @return namespace index
+ * @throws IllegalArgumentException if the namespace is not registered
*/
- public int getURIIndex(String uri) throws NamespaceException {
+ public int stringToIndex(String uri) {
Integer idx = (Integer) uriToIndex.get(uri);
if (idx == null) {
- throw new NamespaceException("URI " + uri + " is not registered.");
+ throw new IllegalArgumentException("Namespace not registered: " + uri);
}
return idx.intValue();
}
/**
- * Returns the URI for a given index (i.e. stable prefix).
+ * Returns the namespace URI for a given index (i.e. stable prefix).
*
- * @param idx the index to retrieve the uri for.
- * @return the uri
- * @throws NamespaceException if the URI is not registered.
+ * @param idx namespace index
+ * @return namespace URI
+ * @throws IllegalArgumentException if the given index is invalid
*/
- public String getURI(int idx) throws NamespaceException {
+ public String indexToString(int idx) {
String uri = (String) indexToURI.get(new Integer(idx));
if (uri == null) {
- throw new NamespaceException("URI for index " + idx + " not registered.");
+ throw new IllegalArgumentException("Invalid namespace index: " + idx);
}
return uri;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java?rev=681121&r1=681120&r2=681121&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java Wed Jul 30 09:54:21 2008
@@ -37,7 +37,6 @@
import org.apache.jackrabbit.core.persistence.PMContext;
import org.apache.jackrabbit.core.persistence.PersistenceManager;
import org.apache.jackrabbit.core.util.StringIndex;
-import org.apache.jackrabbit.core.persistence.bundle.util.NamespaceIndex;
import org.apache.jackrabbit.core.persistence.bundle.util.NodePropBundle;
import org.apache.jackrabbit.core.persistence.bundle.util.BundleCache;
import org.apache.jackrabbit.core.persistence.bundle.util.LRUNodeIdCache;
@@ -262,7 +261,7 @@
if (nsFile.exists()) {
nsIndex = new HashMapIndex(nsFile);
} else {
- nsIndex = new NamespaceIndex((NamespaceRegistryImpl) context.getNamespaceRegistry());
+ nsIndex = (NamespaceRegistryImpl) context.getNamespaceRegistry();
}
}
return nsIndex;
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java?rev=681121&r1=681120&r2=681121&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/DbNameIndex.java Wed Jul 30 09:54:21 2008
@@ -109,15 +109,12 @@
/**
* {@inheritDoc}
*/
- public String indexToString(int idx) {
+ public String indexToString(int idx) throws IllegalArgumentException {
// check cache
Integer index = new Integer(idx);
String s = (String) index2String.get(index);
if (s == null) {
s = getString(idx);
- if (s == null) {
- throw new IllegalStateException("String empty???");
- }
if (s.equals(" ")) {
s = "";
}
@@ -135,21 +132,29 @@
*/
protected int insertString(String string) {
// assert index does not exist
- ResultSet rs = null;
+ int result = -1;
try {
- Statement stmt = connectionManager.executeStmt(nameInsertSQL, new Object[]{string}, true, 0);
- rs = stmt.getGeneratedKeys();
- if (!rs.next()) {
- return -1;
- } else {
- return rs.getInt(1);
+ Statement stmt = connectionManager.executeStmt(
+ nameInsertSQL, new Object[] { string }, true, 0);
+ ResultSet rs = stmt.getGeneratedKeys();
+ try {
+ if (rs.next()) {
+ result = rs.getInt(1);
+ }
+ } finally {
+ rs.close();
}
} catch (Exception e) {
- IllegalStateException ise = new IllegalStateException("Unable to insert index for string: " + string);
+ IllegalStateException ise = new IllegalStateException(
+ "Unable to insert index for string: " + string);
ise.initCause(e);
throw ise;
- } finally {
- closeResultSet(rs);
+ }
+ if (result != -1) {
+ return result;
+ } else {
+ // Could not get the index with getGeneratedKeys, try with SELECT
+ return getIndex(string);
}
}
@@ -159,59 +164,57 @@
* @return the index or -1 if not found.
*/
protected int getIndex(String string) {
- ResultSet rs = null;
try {
- Statement stmt = connectionManager.executeStmt(indexSelectSQL, new Object[]{string});
- rs = stmt.getResultSet();
- if (!rs.next()) {
- return -1;
- } else {
- return rs.getInt(1);
+ Statement stmt = connectionManager.executeStmt(
+ indexSelectSQL, new Object[] { string });
+ ResultSet rs = stmt.getResultSet();
+ try {
+ if (rs.next()) {
+ return rs.getInt(1);
+ } else {
+ return -1;
+ }
+ } finally {
+ rs.close();
}
} catch (Exception e) {
- IllegalStateException ise = new IllegalStateException("Unable to read index for string: " + string);
+ IllegalStateException ise = new IllegalStateException(
+ "Unable to read index for string: " + string);
ise.initCause(e);
throw ise;
- } finally {
- closeResultSet(rs);
}
}
/**
* Retrieves the string from the database for the given index.
* @param index the index to retrieve the string for.
- * @return the string or <code>null</code> if not found.
+ * @return the string
+ * @throws IllegalArgumentException if the string is not found
*/
- protected String getString(int index) {
- ResultSet rs = null;
+ protected String getString(int index)
+ throws IllegalArgumentException, IllegalStateException {
+ String result = null;
try {
- Statement stmt = connectionManager.executeStmt(nameSelectSQL, new Object[]{new Integer(index)});
- rs = stmt.getResultSet();
- if (!rs.next()) {
- return null;
- } else {
- return rs.getString(1);
+ Statement stmt = connectionManager.executeStmt(
+ nameSelectSQL, new Object[] { new Integer(index) });
+ ResultSet rs = stmt.getResultSet();
+ try {
+ if (rs.next()) {
+ result = rs.getString(1);
+ }
+ } finally {
+ rs.close();
}
} catch (Exception e) {
- IllegalStateException ise = new IllegalStateException("Unable to read name for index: " + index);
+ IllegalStateException ise = new IllegalStateException(
+ "Unable to read name for index: " + index);
ise.initCause(e);
throw ise;
- } finally {
- closeResultSet(rs);
}
- }
-
- /**
- * Closes the result set
- * @param rs the result set.
- */
- protected void closeResultSet(ResultSet rs) {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException se) {
- // ignore
- }
+ if (result == null) {
+ throw new IllegalArgumentException("Index not found: " + index);
}
+ return result;
}
+
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NGKDbNameIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NGKDbNameIndex.java?rev=681121&r1=681120&r2=681121&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NGKDbNameIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/util/NGKDbNameIndex.java Wed Jul 30 09:54:21 2008
@@ -17,7 +17,6 @@
package org.apache.jackrabbit.core.persistence.bundle.util;
import java.sql.SQLException;
-import java.sql.ResultSet;
/**
* Same as {@link DbNameIndex} but does not make use of the
@@ -58,16 +57,15 @@
*/
protected int insertString(String string) {
// assert index does not exist
- ResultSet rs = null;
try {
- connectionManager.executeStmt(nameInsertSQL, new Object[]{string});
- return getIndex(string);
+ connectionManager.executeStmt(nameInsertSQL, new Object[] { string });
} catch (Exception e) {
- IllegalStateException ise = new IllegalStateException("Unable to insert index for string: " + string);
+ IllegalStateException ise = new IllegalStateException(
+ "Unable to insert index for string: " + string);
ise.initCause(e);
throw ise;
- } finally {
- closeResultSet(rs);
}
+
+ return getIndex(string);
}
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NSRegistryBasedNamespaceMappings.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NSRegistryBasedNamespaceMappings.java?rev=681121&r1=681120&r2=681121&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NSRegistryBasedNamespaceMappings.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NSRegistryBasedNamespaceMappings.java Wed Jul 30 09:54:21 2008
@@ -60,9 +60,10 @@
public String getURI(String prefix) throws NamespaceException {
try {
int index = Integer.parseInt(prefix);
- return nsReg.getURI(index);
- } catch (NumberFormatException e) {
- throw new NamespaceException("Unknown prefix: " + prefix);
+ return nsReg.indexToString(index);
+ } catch (IllegalArgumentException e) {
+ throw new NamespaceException(
+ "Unknown namespace prefix: " + prefix, e);
}
}
@@ -70,7 +71,12 @@
* {@inheritDoc}
*/
public String getPrefix(String uri) throws NamespaceException {
- return String.valueOf(nsReg.getURIIndex(uri));
+ try {
+ return String.valueOf(nsReg.stringToIndex(uri));
+ } catch (IllegalArgumentException e) {
+ throw new NamespaceException(
+ "Unknown namespace URI: " + uri, e);
+ }
}
//-------------------------------< NamespaceMappings >----------------------
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/StringIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/StringIndex.java?rev=681121&r1=681120&r2=681121&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/StringIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/StringIndex.java Wed Jul 30 09:54:21 2008
@@ -23,21 +23,24 @@
public interface StringIndex {
/**
- * Returns the index for a given string. if the string does not exist in
- * the underlying index map a new index needs to be created.
+ * Returns the index for a given string. If the given string is not
+ * already indexed, the implementation can either automatically index
+ * it or throw an exception.
*
* @param string the indexed (or to be indexed) string
* @return index of the string
+ * @throws IllegalArgumentException if the string is not
+ * (and can not be) indexed
*/
- int stringToIndex(String string);
+ int stringToIndex(String string) throws IllegalArgumentException;
/**
- * Returns the string for a given index. If the index does not exist
- * in the underlying index map, <code>null</code> is returned.
+ * Returns the string for a given index.
*
* @param idx index of a string
- * @return the indexed string, or <code>null</code>
+ * @return the indexed string
+ * @throws IllegalArgumentException if the indexed string does not exist
*/
- String indexToString(int idx);
+ String indexToString(int idx) throws IllegalArgumentException;
}