Index: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitWorkspace.java
===================================================================
--- jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitWorkspace.java (revision 542914)
+++ jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitWorkspace.java (working copy)
@@ -16,12 +16,12 @@
*/
package org.apache.jackrabbit.api;
-import org.xml.sax.InputSource;
-
import javax.jcr.AccessDeniedException;
import javax.jcr.RepositoryException;
import javax.jcr.Workspace;
+import org.xml.sax.InputSource;
+
/**
* The Jackrabbit workspace interface. This interface contains the
* Jackrabbit-specific extensions to the JCR {@link Workspace} interface.
@@ -55,4 +55,16 @@
*/
void createWorkspace(String workspaceName, InputSource workspaceTemplate)
throws AccessDeniedException, RepositoryException;
+
+ /**
+ * Disables/enables referential integrity checking for given worskspace.
+ *
+ * @param workspaceName name of the workspace
+ * @param checkingEnabled false to disable, true to enable integrity checking.
+ *
+ * @throws RepositoryException if a workspace with the given name
+ * does not exists or if another error occurs
+ */
+ void setReferentialIntegrityChecking(String workspaceName, boolean checkingEnabled)
+ throws RepositoryException;
}
Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (revision 542914)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (working copy)
@@ -16,10 +16,35 @@
*/
package org.apache.jackrabbit.core;
-import EDU.oswego.cs.dl.util.concurrent.Mutex;
-import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
-import EDU.oswego.cs.dl.util.concurrent.ReentrantWriterPreferenceReadWriteLock;
-import EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.security.AccessControlContext;
+import java.security.AccessController;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+import javax.jcr.observation.ObservationManager;
+import javax.security.auth.Subject;
+
import org.apache.commons.collections.map.ReferenceMap;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.core.cluster.ClusterContext;
@@ -64,35 +89,11 @@
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.security.AccessControlContext;
-import java.security.AccessController;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
+import EDU.oswego.cs.dl.util.concurrent.Mutex;
+import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
+import EDU.oswego.cs.dl.util.concurrent.ReentrantWriterPreferenceReadWriteLock;
+import EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock;
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Credentials;
-import javax.jcr.LoginException;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.observation.Event;
-import javax.jcr.observation.EventIterator;
-import javax.jcr.observation.EventListener;
-import javax.jcr.observation.ObservationManager;
-import javax.security.auth.Subject;
-
/**
* A RepositoryImpl ...
*/
@@ -2018,4 +2019,17 @@
getWorkspaceInfo(workspace).getLockManager();
}
}
+
+ /**
+ * Disables/enables referential integrity checking for given worskspace.
+ *
+ * @param workspaceName name of the workspace
+ * @param checkingEnabled false to disable, true to enable integrity checking.
+ *
+ * @throws RepositoryException if an error occurs
+ */
+ public void setReferentialIntegrityChecking(String workspaceName, boolean checkingEnabled) throws RepositoryException {
+ SharedItemStateManager sism = getWorkspaceStateManager(workspaceName);
+ sism.setReferentialIntegrityChecking(checkingEnabled);
+ }
}
Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (revision 542914)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (working copy)
@@ -16,14 +16,24 @@
*/
package org.apache.jackrabbit.core.state;
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+
import org.apache.jackrabbit.core.ItemId;
import org.apache.jackrabbit.core.NodeId;
import org.apache.jackrabbit.core.PropertyId;
import org.apache.jackrabbit.core.RepositoryImpl;
import org.apache.jackrabbit.core.cluster.UpdateEventChannel;
-import org.apache.jackrabbit.core.persistence.PersistenceManager;
-import org.apache.jackrabbit.core.persistence.bundle.CachingPersistenceManager;
-import org.apache.jackrabbit.core.version.XAVersionManager;
import org.apache.jackrabbit.core.nodetype.EffectiveNodeType;
import org.apache.jackrabbit.core.nodetype.NodeDefId;
import org.apache.jackrabbit.core.nodetype.NodeTypeConflictException;
@@ -31,26 +41,17 @@
import org.apache.jackrabbit.core.nodetype.PropDef;
import org.apache.jackrabbit.core.observation.EventStateCollection;
import org.apache.jackrabbit.core.observation.EventStateCollectionFactory;
+import org.apache.jackrabbit.core.persistence.PersistenceManager;
+import org.apache.jackrabbit.core.persistence.bundle.CachingPersistenceManager;
import org.apache.jackrabbit.core.util.Dumpable;
import org.apache.jackrabbit.core.value.InternalValue;
+import org.apache.jackrabbit.core.version.XAVersionManager;
import org.apache.jackrabbit.core.virtual.VirtualItemStateProvider;
import org.apache.jackrabbit.name.QName;
import org.apache.jackrabbit.uuid.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.jcr.PropertyType;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import java.io.PrintStream;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.HashMap;
-
/**
* Shared ItemStateManager (SISM). Caches objects returned from a
* PersistenceManager. Objects returned by this item state
@@ -167,6 +168,12 @@
* Update event channel.
*/
private UpdateEventChannel eventChannel;
+
+ /**
+ * Flag indicating whether this item state manager checks uses node references to
+ * verify integrity of its reference properties.
+ */
+ private boolean referentialIntegrityCheckingEnabled = true;
/**
* Creates a new SharedItemStateManager instance.
@@ -549,10 +556,12 @@
updateReferences(local, virtualProvider);
}
- /**
- * Check whether reference targets exist/were not removed
- */
- checkReferentialIntegrity(local);
+ if (referentialIntegrityCheckingEnabled) {
+ /**
+ * Check whether reference targets exist/were not removed
+ */
+ checkReferentialIntegrity(local);
+ }
/**
* prepare the events. this needs to be after the referential
@@ -1454,4 +1463,13 @@
throw new ItemStateException("Interrupted while acquiring write lock");
}
}
+
+ /**
+ * Sets referential integrity checking flag.
+ *
+ * @param checkingEnabled true to enable, false to disable integrity checking.
+ */
+ public void setReferentialIntegrityChecking(boolean checkingEnabled) {
+ this.referentialIntegrityCheckingEnabled = checkingEnabled;
+ }
}
Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (revision 542914)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/WorkspaceImpl.java (working copy)
@@ -16,28 +16,10 @@
*/
package org.apache.jackrabbit.core;
-import org.apache.jackrabbit.api.JackrabbitWorkspace;
-import org.apache.jackrabbit.core.config.WorkspaceConfig;
-import org.apache.jackrabbit.core.lock.LockManager;
-import org.apache.jackrabbit.core.observation.EventStateCollection;
-import org.apache.jackrabbit.core.observation.EventStateCollectionFactory;
-import org.apache.jackrabbit.core.observation.ObservationManagerImpl;
-import org.apache.jackrabbit.core.query.QueryManagerImpl;
-import org.apache.jackrabbit.core.state.LocalItemStateManager;
-import org.apache.jackrabbit.core.state.SharedItemStateManager;
-import org.apache.jackrabbit.core.version.DateVersionSelector;
-import org.apache.jackrabbit.core.version.VersionImpl;
-import org.apache.jackrabbit.core.version.VersionSelector;
-import org.apache.jackrabbit.core.xml.ImportHandler;
-import org.apache.jackrabbit.core.xml.Importer;
-import org.apache.jackrabbit.core.xml.WorkspaceImporter;
-import org.apache.jackrabbit.name.NameException;
-import org.apache.jackrabbit.name.Path;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Iterator;
import javax.jcr.AccessDeniedException;
import javax.jcr.InvalidItemStateException;
@@ -62,10 +44,28 @@
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Iterator;
+import org.apache.jackrabbit.api.JackrabbitWorkspace;
+import org.apache.jackrabbit.core.config.WorkspaceConfig;
+import org.apache.jackrabbit.core.lock.LockManager;
+import org.apache.jackrabbit.core.observation.EventStateCollection;
+import org.apache.jackrabbit.core.observation.EventStateCollectionFactory;
+import org.apache.jackrabbit.core.observation.ObservationManagerImpl;
+import org.apache.jackrabbit.core.query.QueryManagerImpl;
+import org.apache.jackrabbit.core.state.LocalItemStateManager;
+import org.apache.jackrabbit.core.state.SharedItemStateManager;
+import org.apache.jackrabbit.core.version.DateVersionSelector;
+import org.apache.jackrabbit.core.version.VersionImpl;
+import org.apache.jackrabbit.core.version.VersionSelector;
+import org.apache.jackrabbit.core.xml.ImportHandler;
+import org.apache.jackrabbit.core.xml.Importer;
+import org.apache.jackrabbit.core.xml.WorkspaceImporter;
+import org.apache.jackrabbit.name.NameException;
+import org.apache.jackrabbit.name.Path;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
/**
* A WorkspaceImpl ...
@@ -770,6 +770,13 @@
return ((ObservationManagerImpl) getObservationManager()).createEventStateCollection();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ void setReferentialIntegrityChecking(String workspaceName, boolean enabled) throws RepositoryException {
+ rep.setReferentialIntegrityChecking(workspaceName, enabled);
+ }
}