svn commit: r565069 - in /lenya/trunk/src/java/org/apache/lenya: cms/repository/SessionImpl.java transaction/TransactionLock.java transaction/UnitOfWorkImpl.java

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
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.