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 2006/11/23 20:12:25 UTC
svn commit: r478645 -
/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
Author: jukka
Date: Thu Nov 23 11:12:24 2006
New Revision: 478645
URL: http://svn.apache.org/viewvc?view=rev&rev=478645
Log:
JCR-546: Guard the entire checkin() method with the write lock
Modified:
jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java?view=diff&rev=478645&r1=478644&r2=478645
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/version/AbstractVersionManager.java Thu Nov 23 11:12:24 2006
@@ -367,9 +367,7 @@
*/
protected InternalVersion checkin(InternalVersionHistoryImpl history, NodeImpl node)
throws RepositoryException {
-
- acquireReadLock();
- String versionName;
+ WriteOperation operation = startWriteOperation();
try {
// 1. search a predecessor, suitable for generating the new name
Value[] values = node.getProperty(QName.JCR_PREDECESSORS).getValues();
@@ -382,7 +380,7 @@
}
// 2. generate version name (assume no namespaces in version names)
- versionName = best.getName().getLocalName();
+ String versionName = best.getName().getLocalName();
int pos = versionName.lastIndexOf('.');
if (pos > 0) {
versionName = versionName.substring(0, pos + 1)
@@ -396,31 +394,13 @@
versionName += ".1";
}
- stateMgr.edit();
- } catch (IllegalStateException e) {
- releaseReadLock();
- throw new RepositoryException("Unable to start edit operation.");
- }
-
- boolean succeeded = false;
-
- try {
- acquireWriteLock();
- releaseReadLock();
-
InternalVersionImpl v = history.checkin(new QName("", versionName), node);
- stateMgr.update();
- succeeded = true;
-
+ operation.save();
return v;
} catch (ItemStateException e) {
throw new RepositoryException(e);
} finally {
- if (!succeeded) {
- // update operation failed, cancel all modifications
- stateMgr.cancel();
- }
- releaseWriteLock();
+ operation.close();
}
}