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();
}
}
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.