You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ht...@apache.org on 2013/11/06 00:19:17 UTC
svn commit: r1539188 - in /openjpa/branches/2.1.x:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
Author: hthomann
Date: Tue Nov 5 23:19:16 2013
New Revision: 1539188
URL: http://svn.apache.org/r1539188
Log:
OPENJPA-2449: refresh(PESSIMISTIC_WRITE) generates seperate SQL for the lock - applied to 2.1.x Albert Lee's patch.
Modified:
openjpa/branches/2.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
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=1539188&r1=1539187&r2=1539188&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 Tue Nov 5 23:19:16 2013
@@ -101,13 +101,12 @@ public class PessimisticLockManager
protected void lockInternal(OpenJPAStateManager sm, int level, int timeout,
Object sdata, boolean postVersionCheck) {
// we can skip any already-locked instance regardless of level because
- // we treat all locks the same (though super doesn't)
- if (getLockLevel(sm) == LOCK_NONE) {
- // only need to lock if not loaded from locking result
- ConnectionInfo info = (ConnectionInfo) sdata;
- if (info == null || info.result == null || !info.result.isLocking())
- lockRow(sm, timeout, level);
- }
+ // we treat all locks the same (though super doesn't).
+
+ // only need to lock if not loaded from locking result
+ ConnectionInfo info = (ConnectionInfo) sdata;
+ if (info == null || info.result == null || !info.result.isLocking())
+ lockRow(sm, timeout, level);
optimisticLockInternal(sm, level, timeout, sdata, postVersionCheck);
}
@@ -128,7 +127,9 @@ public class PessimisticLockManager
Object id = sm.getObjectId();
ClassMapping mapping = (ClassMapping) sm.getMetaData();
- List<SQLBuffer> sqls = getLockRows(dict, id, mapping, fetch, _store.getSQLFactory());
+ List<SQLBuffer> sqls = sm.getLock() == null
+ ? getLockRows(dict, id, mapping, fetch, _store.getSQLFactory())
+ : new ArrayList<SQLBuffer>();
if (ctx.getFetchConfiguration().getLockScope() == LockScopes.LOCKSCOPE_EXTENDED)
lockJoinTables(sqls, dict, id, mapping, fetch, _store.getSQLFactory());
Modified: openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?rev=1539188&r1=1539187&r2=1539188&view=diff
==============================================================================
--- openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ openjpa/branches/2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Tue Nov 5 23:19:16 2013
@@ -1391,9 +1391,9 @@ public class StateManagerImpl
if (fetch == null)
fetch = _broker.getFetchConfiguration();
- if (_readLockLevel == -1)
+ if (_readLockLevel == -1 || _readLockLevel < fetch.getReadLockLevel())
_readLockLevel = fetch.getReadLockLevel();
- if (_writeLockLevel == -1)
+ if (_writeLockLevel == -1 || _writeLockLevel < fetch.getWriteLockLevel())
_writeLockLevel = fetch.getWriteLockLevel();
return (forWrite) ? _writeLockLevel : _readLockLevel;
}