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/03/02 12:14:37 UTC
svn commit: r632738 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core:
RepositoryImpl.java state/SharedItemStateManager.java
Author: jukka
Date: Sun Mar 2 03:14:28 2008
New Revision: 632738
URL: http://svn.apache.org/viewvc?rev=632738&view=rev
Log:
JCR-954: Allow to disable referential integrity checking for workspace
- Added protected RepositoryImpl.setReferentialIntegrityChecking method
and supporting functionality in SharedItemStateManager
- Based on patches by Przemo Pakulski
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java?rev=632738&r1=632737&r2=632738&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java Sun Mar 2 03:14:28 2008
@@ -787,6 +787,24 @@
return getWorkspaceInfo(workspaceName).getItemStateProvider();
}
+ /**
+ * Enables or disables referential integrity checking for given workspace.
+ * Disabling referential integrity checks can result in a corrupted
+ * workspace, and thus this feature is only available to customized
+ * implementations that subclass RepositoryImpl.
+ *
+ * @see https://issues.apache.org/jira/browse/JCR-954
+ * @param workspace name of the workspace
+ * @param enabled <code>true</code> to enable integrity checking (default),
+ * <code>false</code> to disable it
+ * @throws RepositoryException if an error occurs
+ */
+ protected void setReferentialIntegrityChecking(
+ String workspace, boolean enabled) throws RepositoryException {
+ SharedItemStateManager manager = getWorkspaceStateManager(workspace);
+ manager.setCheckReferences(enabled);
+ }
+
ObservationDispatcher getObservationDispatcher(String workspaceName)
throws NoSuchWorkspaceException {
// check sanity of this instance
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java?rev=632738&r1=632737&r2=632738&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java Sun Mar 2 03:14:28 2008
@@ -142,6 +142,16 @@
private final boolean usesReferences;
/**
+ * Flag indicating whether this item state manager is checking referential
+ * integrity when storing modifications. The default is to to check
+ * for referential integrity.
+ * Should be changed very carefully by experienced developers only.
+ *
+ * @see https://issues.apache.org/jira/browse/JCR-954
+ */
+ private boolean checkReferences = true;
+
+ /**
* id of root node
*/
private final NodeId rootNodeId;
@@ -194,6 +204,17 @@
}
/**
+ * Enables or disables the referential integrity checking, this
+ * should be used very carefully by experienced developers only.
+ *
+ * @see https://issues.apache.org/jira/browse/JCR-954
+ * @param checkReferences whether to do referential integrity checks
+ */
+ public void setCheckReferences(boolean checkReferences) {
+ this.checkReferences = checkReferences;
+ }
+
+ /**
* enables or disables the write-lock hack. this should only be called by
* the {@link XAVersionManager}.
*
@@ -549,10 +570,11 @@
updateReferences(local, virtualProvider);
}
- /**
- * Check whether reference targets exist/were not removed
- */
- checkReferentialIntegrity(local);
+ // If enabled, check whether reference targets
+ // exist/were not removed
+ if (checkReferences) {
+ checkReferentialIntegrity(local);
+ }
/**
* prepare the events. this needs to be after the referential