You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by di...@apache.org on 2003/08/25 18:17:45 UTC
cvs commit: jakarta-commons/dbcp/src/java/org/apache/commons/dbcp PoolableConnectionFactory.java BasicDataSourceFactory.java BasicDataSource.java
dirkv 2003/08/25 09:17:45
Modified: dbcp/src/java/org/apache/commons/dbcp
PoolableConnectionFactory.java
BasicDataSourceFactory.java BasicDataSource.java
Log:
Bugzilla Bug 18550: Add defaultTransactionIsolation to BasicDataSource
- requested feature implemented
Revision Changes Path
1.11 +76 -3 jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/PoolableConnectionFactory.java
Index: PoolableConnectionFactory.java
===================================================================
RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/PoolableConnectionFactory.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- PoolableConnectionFactory.java 22 Aug 2003 16:59:11 -0000 1.10
+++ PoolableConnectionFactory.java 25 Aug 2003 16:17:45 -0000 1.11
@@ -74,6 +74,7 @@
* @author Rodney Waldhoff
* @author Glenn L. Nielsen
* @author James House (<a href="mailto:james@interobjective.com">james@interobjective.com</a>)
+ * @author Dirk Verbeeck
* @version $Id$
*/
public class PoolableConnectionFactory implements PoolableObjectFactory {
@@ -104,6 +105,27 @@
* @param validationQuery a query to use to {@link #validateObject validate} {@link Connection}s. Should return at least one row. May be <tt>null</tt>
* @param defaultReadOnly the default "read only" setting for borrowed {@link Connection}s
* @param defaultAutoCommit the default "auto commit" setting for returned {@link Connection}s
+ * @param defaultTransactionIsolation the default "Transaction Isolation" setting for returned {@link Connection}s
+ */
+ public PoolableConnectionFactory(ConnectionFactory connFactory, ObjectPool pool, KeyedObjectPoolFactory stmtPoolFactory, String validationQuery, boolean defaultReadOnly, boolean defaultAutoCommit, int defaultTransactionIsolation) {
+ _connFactory = connFactory;
+ _pool = pool;
+ _pool.setFactory(this);
+ _stmtPoolFactory = stmtPoolFactory;
+ _validationQuery = validationQuery;
+ _defaultReadOnly = defaultReadOnly;
+ _defaultAutoCommit = defaultAutoCommit;
+ _defaultTransactionIsolation = defaultTransactionIsolation;
+ }
+
+ /**
+ * Create a new <tt>PoolableConnectionFactory</tt>.
+ * @param connFactory the {@link ConnectionFactory} from which to obtain base {@link Connection}s
+ * @param pool the {@link ObjectPool} in which to pool those {@link Connection}s
+ * @param stmtPoolFactory the {@link KeyedObjectPoolFactory} to use to create {@link KeyedObjectPool}s for pooling {@link java.sql.PreparedStatement}s, or <tt>null</tt> to disable {@link java.sql.PreparedStatement} pooling
+ * @param validationQuery a query to use to {@link #validateObject validate} {@link Connection}s. Should return at least one row. May be <tt>null</tt>
+ * @param defaultReadOnly the default "read only" setting for borrowed {@link Connection}s
+ * @param defaultAutoCommit the default "auto commit" setting for returned {@link Connection}s
* @param config the AbandonedConfig if tracing SQL objects
* @deprecated AbandonedConfig is now deprecated.
*/
@@ -127,6 +149,39 @@
}
/**
+ * Create a new <tt>PoolableConnectionFactory</tt>.
+ * @param connFactory the {@link ConnectionFactory} from which to obtain base {@link Connection}s
+ * @param pool the {@link ObjectPool} in which to pool those {@link Connection}s
+ * @param stmtPoolFactory the {@link KeyedObjectPoolFactory} to use to create {@link KeyedObjectPool}s for pooling {@link java.sql.PreparedStatement}s, or <tt>null</tt> to disable {@link java.sql.PreparedStatement} pooling
+ * @param validationQuery a query to use to {@link #validateObject validate} {@link Connection}s. Should return at least one row. May be <tt>null</tt>
+ * @param defaultReadOnly the default "read only" setting for borrowed {@link Connection}s
+ * @param defaultAutoCommit the default "auto commit" setting for returned {@link Connection}s
+ * @param defaultTransactionIsolation the default "Transaction Isolation" setting for returned {@link Connection}s
+ * @param config the AbandonedConfig if tracing SQL objects
+ * @deprecated AbandonedConfig is now deprecated.
+ */
+ public PoolableConnectionFactory(
+ ConnectionFactory connFactory,
+ ObjectPool pool,
+ KeyedObjectPoolFactory stmtPoolFactory,
+ String validationQuery,
+ boolean defaultReadOnly,
+ boolean defaultAutoCommit,
+ int defaultTransactionIsolation,
+ AbandonedConfig config) {
+
+ _connFactory = connFactory;
+ _pool = pool;
+ _config = config;
+ _pool.setFactory(this);
+ _stmtPoolFactory = stmtPoolFactory;
+ _validationQuery = validationQuery;
+ _defaultReadOnly = defaultReadOnly;
+ _defaultAutoCommit = defaultAutoCommit;
+ _defaultTransactionIsolation = defaultTransactionIsolation;
+ }
+
+ /**
* Sets the {@link ConnectionFactory} from which to obtain base {@link Connection}s.
* @param connFactory the {@link ConnectionFactory} from which to obtain base {@link Connection}s
*/
@@ -189,6 +244,14 @@
_defaultAutoCommit = defaultAutoCommit;
}
+ /**
+ * Sets the default "Transaction Isolation" setting for borrowed {@link Connection}s
+ * @param defaultTransactionIsolation the default "Transaction Isolation" setting for returned {@link Connection}s
+ */
+ public void setDefaultTransactionIsolation(int defaultTransactionIsolation) {
+ _defaultTransactionIsolation = defaultTransactionIsolation;
+ }
+
synchronized public Object makeObject() throws Exception {
Connection conn = _connFactory.createConnection();
if(null != _stmtPoolFactory) {
@@ -271,6 +334,9 @@
Connection conn = (Connection)obj;
conn.setAutoCommit(_defaultAutoCommit);
conn.setReadOnly(_defaultReadOnly);
+ if (_defaultTransactionIsolation != UNKNOWN_TRANSACTIONISOLATION) {
+ conn.setTransactionIsolation(_defaultTransactionIsolation);
+ }
}
}
@@ -280,9 +346,16 @@
protected KeyedObjectPoolFactory _stmtPoolFactory = null;
protected boolean _defaultReadOnly = false;
protected boolean _defaultAutoCommit = true;
+ protected int _defaultTransactionIsolation = UNKNOWN_TRANSACTIONISOLATION;
/**
* @deprecated AbandonedConfig is now deprecated.
*/
protected AbandonedConfig _config = null;
+
+ /**
+ * Internal constant to indicate the level is not set.
+ */
+ static final int UNKNOWN_TRANSACTIONISOLATION = -1;
+
}
1.8 +38 -4 jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/BasicDataSourceFactory.java
Index: BasicDataSourceFactory.java
===================================================================
RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/BasicDataSourceFactory.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- BasicDataSourceFactory.java 22 Aug 2003 16:08:31 -0000 1.7
+++ BasicDataSourceFactory.java 25 Aug 2003 16:17:45 -0000 1.8
@@ -62,6 +62,7 @@
package org.apache.commons.dbcp;
import java.io.ByteArrayInputStream;
+import java.sql.Connection;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
@@ -81,6 +82,7 @@
* <code>BasicDataSource</code> bean properties.</p>
*
* @author Craig R. McClanahan
+ * @author Dirk Verbeeck
* @version $Revision$ $Date$
*/
@@ -134,6 +136,38 @@
if (ra != null) {
dataSource.setDefaultReadOnly
(Boolean.valueOf(ra.getContent().toString()).booleanValue());
+ }
+
+ ra = ref.get("defaultTransactionIsolation");
+ if (ra != null) {
+ String value = ra.getContent().toString();
+ int level = PoolableConnectionFactory.UNKNOWN_TRANSACTIONISOLATION;
+ if ("NONE".equalsIgnoreCase(value)) {
+ level = Connection.TRANSACTION_NONE;
+ }
+ else if ("READ_COMMITTED".equalsIgnoreCase(value)) {
+ level = Connection.TRANSACTION_READ_COMMITTED;
+ }
+ else if ("READ_UNCOMMITTED".equalsIgnoreCase(value)) {
+ level = Connection.TRANSACTION_READ_UNCOMMITTED;
+ }
+ else if ("REPEATABLE_READ".equalsIgnoreCase(value)) {
+ level = Connection.TRANSACTION_REPEATABLE_READ;
+ }
+ else if ("SERIALIZABLE".equalsIgnoreCase(value)) {
+ level = Connection.TRANSACTION_SERIALIZABLE;
+ }
+ else {
+ try {
+ level = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ System.err.println("Could not parse defaultTransactionIsolation: " + value);
+ System.err.println("WARNING: defaultTransactionIsolation not set");
+ System.err.println("using default value of database driver");
+ level = PoolableConnectionFactory.UNKNOWN_TRANSACTIONISOLATION;
+ }
+ }
+ dataSource.setDefaultTransactionIsolation(level);
}
ra = ref.get("driverClassName");
1.21 +18 -4 jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/BasicDataSource.java
Index: BasicDataSource.java
===================================================================
RCS file: /home/cvs/jakarta-commons/dbcp/src/java/org/apache/commons/dbcp/BasicDataSource.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- BasicDataSource.java 22 Aug 2003 16:08:31 -0000 1.20
+++ BasicDataSource.java 25 Aug 2003 16:17:45 -0000 1.21
@@ -82,6 +82,7 @@
*
* @author Glenn L. Nielsen
* @author Craig R. McClanahan
+ * @author Dirk Verbeeck
* @version $Revision$ $Date$
*/
@@ -118,6 +119,18 @@
this.defaultReadOnly = defaultReadOnly;
}
+ /**
+ * The default TransactionIsolation state of connections created by this pool.
+ */
+ protected int defaultTransactionIsolation = PoolableConnectionFactory.UNKNOWN_TRANSACTIONISOLATION;
+
+ public int getDefaultTransactionIsolation() {
+ return this.defaultTransactionIsolation;
+ }
+
+ public void setDefaultTransactionIsolation(int defaultTransactionIsolation) {
+ this.defaultTransactionIsolation = defaultTransactionIsolation;
+ }
/**
* The fully qualified Java class name of the JDBC driver to be used.
@@ -710,6 +723,7 @@
validationQuery,
defaultReadOnly,
defaultAutoCommit,
+ defaultTransactionIsolation,
abandonedConfig);
if (connectionFactory == null) {
throw new SQLException("Cannot create PoolableConnectionFactory");