You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by aw...@apache.org on 2007/04/06 17:08:40 UTC
svn commit: r526192 - in /incubator/openjpa/trunk:
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/
openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/
openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/
openjpa-jdbc/src/main/...
Author: awhite
Date: Fri Apr 6 08:08:39 2007
New Revision: 526192
URL: http://svn.apache.org/viewvc?view=rev&rev=526192
Log:
Move LockManager API back to using int timeouts, since that's the way they're
handled elsewhere (FetchConfiguration, Broker, etc). Only use the lock timeout
on a forUpdate query if it is greater than the configured query timeout.
Selects that are made *only* to lock a row (rather than to query data, with
locking as a side effect) still use the lock timeout exclusively, ignoring the
query timeout.
Modified:
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties
incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionLockManager.java
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java?view=diff&rev=526192&r1=526191&r2=526192
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/PessimisticLockManager.java Fri Apr 6 08:08:39 2007
@@ -86,7 +86,7 @@
setLockLevel(sm, LOCK_DATASTORE_ONLY);
}
- protected void lockInternal(OpenJPAStateManager sm, int level, long timeout,
+ protected void lockInternal(OpenJPAStateManager sm, int level, int timeout,
Object sdata) {
// we can skip any already-locked instance regardless of level because
// we treat all locks the same (though super doesn't)
@@ -103,7 +103,7 @@
* Lock the specified instance row by issuing a "SELECT ... FOR UPDATE"
* statement.
*/
- private void lockRow(OpenJPAStateManager sm, long timeout) {
+ private void lockRow(OpenJPAStateManager sm, int timeout) {
// assert that the dictionary supports the "SELECT ... FOR UPDATE"
// construct; if not, and we the assertion does not throw an
// exception, then just return without locking
@@ -136,7 +136,7 @@
if (log.isWarnEnabled())
log.warn(_loc.get("millis-query-timeout"));
}
- stmnt.setQueryTimeout((int) (timeout / 1000));
+ stmnt.setQueryTimeout(timeout / 1000);
}
rs = stmnt.executeQuery();
if (!rs.next())
@@ -145,19 +145,10 @@
throw SQLExceptions.getStore(se, dict);
} finally {
if (stmnt != null)
- try {
- stmnt.close();
- } catch (SQLException se) {
- }
+ try { stmnt.close(); } catch (SQLException se) {}
if (rs != null)
- try {
- rs.close();
- } catch (SQLException se) {
- }
- try {
- conn.close();
- } catch (SQLException se) {
- }
+ try { rs.close(); } catch (SQLException se) {}
+ try { conn.close(); } catch (SQLException se) {}
}
}
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java?view=diff&rev=526192&r1=526191&r2=526192
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/SelectImpl.java Fri Apr 6 08:08:39 2007
@@ -340,8 +340,19 @@
else
stmnt = sql.prepareStatement(conn, rsType, -1);
- if (forUpdate)
+ // if this is a locking select and the lock timeout is greater than
+ // the configured query timeout, use the lock timeout
+ if (forUpdate && _dict.supportsQueryTimeout && fetch != null
+ && fetch.getLockTimeout() > stmnt.getQueryTimeout() * 1000) {
+ int timeout = fetch.getLockTimeout();
+ if (timeout < 1000) {
+ timeout = 1000;
+ Log log = _conf.getLog(JDBCConfiguration.LOG_JDBC);
+ if (log.isWarnEnabled())
+ log.warn(_loc.get("millis-query-timeout"));
+ }
stmnt.setQueryTimeout(fetch.getLockTimeout() / 1000);
+ }
rs = stmnt.executeQuery();
} catch (SQLException se) {
// clean up statement
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties?view=diff&rev=526192&r1=526191&r2=526192
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/kernel/localizer.properties Fri Apr 6 08:08:39 2007
@@ -48,11 +48,8 @@
start-trans-for-lock: Though you are using optimistic transactions, OpenJPA is \
now beginning a datastore transaction because you have requested a lock \
on some data.
-millis-timeout: JDBC lock manager does not support millisecond-granularity \
- timeouts. Use timeouts that are multiples of 1000 for even second values.
-millis-query-timeout: JDBC lock manager does not support \
- millisecond-granularity timeouts. Use timeouts that are multiples \
- of 1000 for even second values.
+millis-query-timeout: JDBC locking does not support millisecond-granularity \
+ timeouts. Use timeouts that are multiples of 1000 for even second values.
batch-not-supported: The update count for the statement was an invalid \
value ({0}). This indicates that your database or JDBC driver does not \
have complete support for executing batch statements. Batch \
@@ -101,4 +98,4 @@
Connection.TRANSACTION_NONE, Connection.TRANSACTION_READ_UNCOMMITTED, \
Connection.TRANSACTION_READ_COMMITTED, \
Connection.TRANSACTION_REPEATABLE_READ, or \
- Connection.TRANSACTION_SERIALIZABLE. Specified value: {0}.
\ No newline at end of file
+ Connection.TRANSACTION_SERIALIZABLE. Specified value: {0}.
Modified: incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties?view=diff&rev=526192&r1=526191&r2=526192
==============================================================================
--- incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties (original)
+++ incubator/openjpa/trunk/openjpa-jdbc/src/main/resources/org/apache/openjpa/jdbc/sql/localizer.properties Fri Apr 6 08:08:39 2007
@@ -161,4 +161,6 @@
worked around by setting the "SupportsTimestampNanos" DBDictionary \
property to "true".
isolation-level-config-not-supported: This DBDictionary does not support \
- customization of isolation levels on a per-query basis. DBDictionary: {0}.
\ No newline at end of file
+ customization of isolation levels on a per-query basis. DBDictionary: {0}.
+millis-query-timeout: JDBC locking does not support millisecond-granularity \
+ timeouts. Use timeouts that are multiples of 1000 for even second values.
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionLockManager.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionLockManager.java?view=diff&rev=526192&r1=526191&r2=526192
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionLockManager.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/VersionLockManager.java Fri Apr 6 08:08:39 2007
@@ -90,7 +90,7 @@
*
* @see StoreContext#transactional
*/
- protected void lockInternal(OpenJPAStateManager sm, int level, long timeout,
+ protected void lockInternal(OpenJPAStateManager sm, int level, int timeout,
Object sdata) {
// Set lock level first to prevent infinite recursion with
// transactional(..) call