You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2007/08/12 15:25:07 UTC
svn commit: r565069 - in /lenya/trunk/src/java/org/apache/lenya:
cms/repository/SessionImpl.java transaction/TransactionLock.java
transaction/UnitOfWorkImpl.java
Author: andreas
Date: Sun Aug 12 06:25:06 2007
New Revision: 565069
URL: http://svn.apache.org/viewvc?view=rev&rev=565069
Log:
Moved transaction locking from UnitOfWorkImpl to SessionImpl
Modified:
lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java
lenya/trunk/src/java/org/apache/lenya/transaction/TransactionLock.java
lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
Modified: lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java?view=diff&rev=565069&r1=565068&r2=565069
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/repository/SessionImpl.java Sun Aug 12 06:25:06 2007
@@ -38,6 +38,7 @@
import org.apache.lenya.transaction.Lock;
import org.apache.lenya.transaction.Lockable;
import org.apache.lenya.transaction.TransactionException;
+import org.apache.lenya.transaction.TransactionLock;
import org.apache.lenya.transaction.Transactionable;
import org.apache.lenya.transaction.UnitOfWork;
import org.apache.lenya.transaction.UnitOfWorkImpl;
@@ -105,7 +106,7 @@
*/
protected UnitOfWork getUnitOfWork() {
if (this.unitOfWork == null) {
- throw new RuntimeException("This session is not modifiable!");
+ throw new RuntimeException("This session [" + getId() + "] is not modifiable!");
}
return this.unitOfWork;
}
@@ -121,8 +122,10 @@
public void commit() throws RepositoryException, ConcurrentModificationException {
try {
- getUnitOfWork().commit();
- getSharedItemStore().clear();
+ synchronized (TransactionLock.LOCK) {
+ getUnitOfWork().commit();
+ getSharedItemStore().clear();
+ }
} catch (ConcurrentModificationException e) {
throw e;
} catch (TransactionException e) {
@@ -147,7 +150,9 @@
*/
public void rollback() throws RepositoryException {
try {
- getUnitOfWork().rollback();
+ synchronized (TransactionLock.LOCK) {
+ getUnitOfWork().rollback();
+ }
} catch (TransactionException e) {
throw new RepositoryException(e);
}
Modified: lenya/trunk/src/java/org/apache/lenya/transaction/TransactionLock.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/transaction/TransactionLock.java?view=diff&rev=565069&r1=565068&r2=565069
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/TransactionLock.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/TransactionLock.java Sun Aug 12 06:25:06 2007
@@ -22,6 +22,9 @@
*/
public class TransactionLock {
+ /**
+ * The global transaction lock.
+ */
public static final Object LOCK = TransactionLock.class;
}
Modified: lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java?view=diff&rev=565069&r1=565068&r2=565069
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/transaction/UnitOfWorkImpl.java Sun Aug 12 06:25:06 2007
@@ -98,62 +98,59 @@
getLogger().debug("UnitOfWorkImpl::commit() called");
}
- synchronized (TransactionLock.LOCK) {
+ Set lockedObjects = this.locks.keySet();
- Set lockedObjects = this.locks.keySet();
-
- for (Iterator i = lockedObjects.iterator(); i.hasNext();) {
- Transactionable t = (Transactionable) i.next();
- if (t.hasChanged()) {
- throw new ConcurrentModificationException(t);
- }
+ for (Iterator i = lockedObjects.iterator(); i.hasNext();) {
+ Transactionable t = (Transactionable) i.next();
+ if (t.hasChanged()) {
+ throw new ConcurrentModificationException(t);
}
+ }
- Set involvedObjects = new HashSet();
- involvedObjects.addAll(this.newObjects);
- involvedObjects.addAll(this.modifiedObjects);
- involvedObjects.addAll(this.removedObjects);
-
- for (Iterator i = involvedObjects.iterator(); i.hasNext();) {
- Transactionable t = (Transactionable) i.next();
- t.checkout();
- }
+ Set involvedObjects = new HashSet();
+ involvedObjects.addAll(this.newObjects);
+ involvedObjects.addAll(this.modifiedObjects);
+ involvedObjects.addAll(this.removedObjects);
+
+ for (Iterator i = involvedObjects.iterator(); i.hasNext();) {
+ Transactionable t = (Transactionable) i.next();
+ t.checkout();
+ }
- for (Iterator i = this.newObjects.iterator(); i.hasNext();) {
- Transactionable t = (Transactionable) i.next();
- t.createTransactionable();
- t.saveTransactionable();
- }
- for (Iterator i = this.modifiedObjects.iterator(); i.hasNext();) {
- Transactionable t = (Transactionable) i.next();
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("UnitOfWorkImpl::commit() calling save on [" + t + "]");
- }
- t.saveTransactionable();
- }
- for (Iterator i = this.removedObjects.iterator(); i.hasNext();) {
- Transactionable t = (Transactionable) i.next();
- t.deleteTransactionable();
+ for (Iterator i = this.newObjects.iterator(); i.hasNext();) {
+ Transactionable t = (Transactionable) i.next();
+ t.createTransactionable();
+ t.saveTransactionable();
+ }
+ for (Iterator i = this.modifiedObjects.iterator(); i.hasNext();) {
+ Transactionable t = (Transactionable) i.next();
+ if (getLogger().isDebugEnabled()) {
+ getLogger().debug("UnitOfWorkImpl::commit() calling save on [" + t + "]");
}
+ t.saveTransactionable();
+ }
+ for (Iterator i = this.removedObjects.iterator(); i.hasNext();) {
+ Transactionable t = (Transactionable) i.next();
+ t.deleteTransactionable();
+ }
- if (getIdentityMap() != null) {
- Object[] objects = getIdentityMap().getObjects();
- for (int i = 0; i < objects.length; i++) {
- if (objects[i] instanceof Transactionable) {
- Transactionable t = (Transactionable) objects[i];
- if (t.isCheckedOutBySession() && !this.removedObjects.contains(t)) {
- t.checkin();
- }
- if (t.isLocked()) {
- t.unlock();
- }
+ if (getIdentityMap() != null) {
+ Object[] objects = getIdentityMap().getObjects();
+ for (int i = 0; i < objects.length; i++) {
+ if (objects[i] instanceof Transactionable) {
+ Transactionable t = (Transactionable) objects[i];
+ if (t.isCheckedOutBySession() && !this.removedObjects.contains(t)) {
+ t.checkin();
+ }
+ if (t.isLocked()) {
+ t.unlock();
}
}
}
-
- resetTransaction();
}
+ resetTransaction();
+
}
protected void resetTransaction() {
@@ -184,18 +181,16 @@
if (getLogger().isDebugEnabled()) {
getLogger().debug("UnitOfWorkImpl::rollback() called");
}
- synchronized (TransactionLock.LOCK) {
- if (getIdentityMap() != null) {
- Object[] objects = getIdentityMap().getObjects();
- for (int i = 0; i < objects.length; i++) {
- if (objects[i] instanceof Transactionable) {
- Transactionable t = (Transactionable) objects[i];
- if (t.isCheckedOutBySession()) {
- t.checkin();
- }
- if (t.isLocked()) {
- t.unlock();
- }
+ if (getIdentityMap() != null) {
+ Object[] objects = getIdentityMap().getObjects();
+ for (int i = 0; i < objects.length; i++) {
+ if (objects[i] instanceof Transactionable) {
+ Transactionable t = (Transactionable) objects[i];
+ if (t.isCheckedOutBySession()) {
+ t.checkin();
+ }
+ if (t.isLocked()) {
+ t.unlock();
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org