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