Author: hthomann
Date: Wed Jan 14 21:48:12 2015
New Revision: 1651843

URL: http://svn.apache.org/r1651843
Log:
OPENJPA-2547: When two threads attempt to get a Pessimistic Lock, one thread 
gets a 'false' lock.  Applied fix to 2.1.x.

Added:
    
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/PessimisticLockEntity.java
      - copied unchanged from r1651808, 
openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/PessimisticLockEntity.java
    
openjpa/branches/2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestPessimisticLockException.java
      - copied unchanged from r1651808, 
openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestPessimisticLockException.java
Modified:
    openjpa/branches/2.1.x/   (props changed)
    
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java

Propchange: openjpa/branches/2.1.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jan 14 21:48:12 2015
@@ -1,6 +1,6 @@
 /openjpa/branches/1.0.x:736493
 /openjpa/branches/1.2.x:1140217
 /openjpa/branches/2.0.x:1419659,1484136,1484287,1504611
-/openjpa/branches/2.2.1.x:1531176
+/openjpa/branches/2.2.1.x:1531176,1651808,1651826
 /openjpa/branches/2.2.x:1580898
 
/openjpa/trunk:1071123,1076370,1076388,1095401,1095805,1143520,1221801,1221839,1222185,1416742,1420324,1430117,1431649,1436957,1436960,1448662,1448796,1451369,1456574,1456614,1459091,1461833,1469646,1469649,1469652,1504282,1603251

Modified: 
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java?rev=1651843&r1=1651842&r2=1651843&view=diff
==============================================================================
--- 
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
 (original)
+++ 
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
 Wed Jan 14 21:48:12 2015
@@ -34,6 +34,7 @@ import org.apache.openjpa.jdbc.sql.DBDic
 import org.apache.openjpa.jdbc.sql.SQLBuffer;
 import org.apache.openjpa.jdbc.sql.SQLFactory;
 import org.apache.openjpa.jdbc.sql.Select;
+import org.apache.openjpa.kernel.LockLevels;
 import org.apache.openjpa.kernel.LockScopes;
 import org.apache.openjpa.kernel.MixedLockLevels;
 import org.apache.openjpa.kernel.OpenJPAStateManager;
@@ -127,7 +128,12 @@ public class PessimisticLockManager
         Object id = sm.getObjectId();
         ClassMapping mapping = (ClassMapping) sm.getMetaData();
 
-        List<SQLBuffer> sqls = sm.getLock() == null
+        //Code changed for OPENJPA-2449, code updated for OPENJPA-2547.  
OPENJPA-2547 added
+        //one check to determine if the lock is a value of 
LockLevels.LOCK_NONE.  The first 
+        //time a thread attempts to get a lock the lock will be null.  If the 
thread can't 
+        //get the lock because another thread holds it, the lock will be 
non-null and have 
+        //a value of LockLevels.LOCK_NONE.
+        List<SQLBuffer> sqls = (sm.getLock() == null || 
sm.getLock().equals(LockLevels.LOCK_NONE))
             ?  getLockRows(dict, id, mapping, fetch, _store.getSQLFactory())
             : new ArrayList<SQLBuffer>();
         if (ctx.getFetchConfiguration().getLockScope() == 
LockScopes.LOCKSCOPE_EXTENDED)


Reply via email to