You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2009/02/18 22:28:50 UTC
svn commit: r745661 -
/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
Author: ppoddar
Date: Wed Feb 18 21:28:50 2009
New Revision: 745661
URL: http://svn.apache.org/viewvc?rev=745661&view=rev
Log:
OPENJPA-703: A tentative change for a reported locking problem. Ready to be rolled back if turns out to be too costly.
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java?rev=745661&r1=745660&r2=745661&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/QueryImpl.java Wed Feb 18 21:28:50 2009
@@ -33,6 +33,7 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
+import java.util.concurrent.locks.ReentrantLock;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
@@ -81,7 +82,7 @@
private Map<String, Object> _named;
private Map<Integer, Object> _positional;
private String _id;
-
+ private transient ReentrantLock _lock = null;
private final HintHandler _hintHandler;
/**
@@ -96,6 +97,7 @@
_em = em;
_query = new DelegatingQuery(query, ret);
_hintHandler = new HintHandler(this);
+ _lock = new ReentrantLock();
}
/**
@@ -256,15 +258,19 @@
if (!isNative() && _query.getOperation() != QueryOperations.OP_SELECT)
throw new InvalidStateException(_loc.get("not-select-query", _query
.getQueryString()), null, null, false);
-
- Map params = _positional != null ? _positional
- : _named != null ? _named : new HashMap();
- boolean registered = preExecute(params);
- Object result = _query.execute(params);
- if (registered) {
- postExecute(result);
- }
- return result;
+ try {
+ lock();
+ Map params = _positional != null ? _positional
+ : _named != null ? _named : new HashMap();
+ boolean registered = preExecute(params);
+ Object result = _query.execute(params);
+ if (registered) {
+ postExecute(result);
+ }
+ return result;
+ } finally {
+ unlock();
+ }
}
public List getResultList() {
@@ -618,7 +624,7 @@
*
* @return true if the prepared query can be initialized.
*/
- boolean postExecute(Object result) {
+ private boolean postExecute(Object result) {
PreparedQueryCache cache = _em.getPreparedQueryCache();
if (cache == null) {
return false;
@@ -662,4 +668,15 @@
_id = id;
return this;
}
+
+ public void lock() {
+ if (_lock != null)
+ _lock.lock();
+ }
+
+ public void unlock() {
+ if (_lock != null)
+ _lock.unlock();
+ }
+
}