Author: hthomann
Date: Wed Sep 2 20:04:18 2015
New Revision: 1700884
URL: http://svn.apache.org/r1700884
Log:
OPENJPA-2517: Option to allow the javax.persistence.query.timeout property to
apply to EntityManager operations.
Modified:
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
openjpa/branches/2.2.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
Modified:
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java?rev=1700884&r1=1700883&r2=1700884&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java
(original)
+++
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/DataSourceFactory.java
Wed Sep 2 20:04:18 2015
@@ -206,8 +206,26 @@ public class DataSourceFactory {
ConfiguringConnectionDecorator ccd =
new ConfiguringConnectionDecorator();
ccd.setTransactionIsolation(conf.getTransactionIsolationConstant());
- ccd.setQueryTimeout(conf.getQueryTimeout() == -1
- ? -1 : conf.getQueryTimeout());
+
+ //OPENJPA-2517: Allow a javax.persistence.query.timeout to apply
to all
+ //EM operations (not just Query operations). Convert from
milliseconds
+ //to seconds. See DBDictionary.setQueryTimeout for similar
conversions.
+ //DBDictionary.setQueryTimeout will log warnings for invalid
values,
+ //therefore there is no need to do so again here. Furthermore,
there is no
+ //need to check for -1 here, ConfigurationConnectionDecorator
checks for it.
+ int timeout = conf.getQueryTimeout();
+ if (dict.allowQueryTimeoutOnFindUpdate){
+ if (timeout > 0 && timeout < 1000) {
+ // round up to 1 sec
+ timeout = 1;
+ }
+ else if (timeout >= 1000){
+ timeout = timeout/1000;
+ }
+ }
+
+ ccd.setQueryTimeout(timeout);
+
Log log = conf.getLog(JDBCConfiguration.LOG_JDBC);
if (factory2 || !conf.isConnectionFactoryModeManaged()) {
if (!dict.supportsMultipleNontransactionalResultSets)
Modified:
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=1700884&r1=1700883&r2=1700884&view=diff
==============================================================================
---
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
(original)
+++
openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
Wed Sep 2 20:04:18 2015
@@ -238,6 +238,7 @@ public class DBDictionary
public boolean supportsLockingWithInnerJoin = true;
public boolean supportsLockingWithSelectRange = true;
public boolean supportsQueryTimeout = true;
+ public boolean allowQueryTimeoutOnFindUpdate = false; //OPENJPA-2517
public boolean simulateLocking = false;
public boolean supportsSubselect = true;
public boolean supportsCorrelatedSubselect = true;
Modified:
openjpa/branches/2.2.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
URL:
http://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml?rev=1700884&r1=1700883&r2=1700884&view=diff
==============================================================================
--- openjpa/branches/2.2.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
(original)
+++ openjpa/branches/2.2.x/openjpa-project/src/doc/manual/ref_guide_dbsetup.xml
Wed Sep 2 20:04:18 2015
@@ -2998,6 +2998,27 @@ action on foreign keys. Defaults to <li
calls to <methodname> java.sql.Statement.setQueryTimeout</methodname>.
</para>
</listitem>
+ <listitem id="DBDictionary.AllowQueryTimeoutOnFindUpdate">
+ <para>
+ <indexterm>
+ <primary>
+ JDBC
+ </primary>
+ <secondary>
+ QueryTimeout
+ </secondary>
+ <tertiary>
+ AllowQueryTimeoutOnFindUpdate
+ </tertiary>
+ </indexterm>
+<literal>AllowQueryTimeoutOnFindUpdate</literal>: The JPA Specification
defines the
+javax.persistence.query.timeout, in milliseconds, as a hint to the provider.
The hint
+is used for Query operations. This property, when set to true, will allow the
query timeout hint
+to apply to EntityManager operations. For example, when a 'find' is executed
and the resultant
+entity updated, the query timeout will apply to the SQL update operation.
This property defaults
+to false.</methodname>.
+ </para>
+ </listitem>
<listitem id="DBDictionary.SupportsRestrictDeleteAction">
<para>
<indexterm>