You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jm...@apache.org on 2002/04/03 07:10:47 UTC
cvs commit: jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/adapter PooledConnectionImpl.java
jmcnally 02/04/02 21:10:47
Modified: jdbc2pool/src/java/org/apache/commons/jdbc2pool
CPDSConnectionFactory.java Jdbc2PoolDataSource.java
jdbc2pool/src/java/org/apache/commons/jdbc2pool/adapter
PooledConnectionImpl.java
Log:
o handle the exceptions thrown by ObjectPool
o make sure that one and only one of setDataSourceName or setConnectionPoolDataSource
is called before getConnection is called.
Revision Changes Path
1.2 +37 -11 jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/CPDSConnectionFactory.java
Index: CPDSConnectionFactory.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/CPDSConnectionFactory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- CPDSConnectionFactory.java 4 Mar 2002 07:52:37 -0000 1.1
+++ CPDSConnectionFactory.java 3 Apr 2002 05:10:46 -0000 1.2
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/CPDSConnectionFactory.java,v 1.1 2002/03/04 07:52:37 jmcnally Exp $
- * $Revision: 1.1 $
- * $Date: 2002/03/04 07:52:37 $
+ * $Header: /home/cvs/jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/CPDSConnectionFactory.java,v 1.2 2002/04/03 05:10:46 jmcnally Exp $
+ * $Revision: 1.2 $
+ * $Date: 2002/04/03 05:10:46 $
*
* ====================================================================
*
@@ -77,7 +77,7 @@
* {*link PoolableConnection}s.
*
* @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @version $Id: CPDSConnectionFactory.java,v 1.1 2002/03/04 07:52:37 jmcnally Exp $
+ * @version $Id: CPDSConnectionFactory.java,v 1.2 2002/04/03 05:10:46 jmcnally Exp $
*/
public class CPDSConnectionFactory
implements PoolableObjectFactory, ConnectionEventListener {
@@ -125,9 +125,25 @@
* Sets the {*link ObjectPool} in which to pool {*link Connection}s.
* @param pool the {*link ObjectPool} in which to pool those {*link Connection}s
*/
- synchronized public void setPool(ObjectPool pool) {
+ synchronized public void setPool(ObjectPool pool)
+ throws SQLException
+ {
if(null != _pool && pool != _pool) {
- _pool.close();
+ try
+ {
+ _pool.close();
+ }
+ catch (Exception e)
+ {
+ if (e instanceof RuntimeException)
+ {
+ throw (RuntimeException)e;
+ }
+ else
+ {
+ throw new SQLException(e.getMessage());
+ }
+ }
}
_pool = pool;
}
@@ -172,10 +188,7 @@
}
}
- // FIXME! Connection from the PooledConnection must be closed before
- // another one can be requested and closing it will send an event
- // to the pool
- synchronized public boolean validateObject(Object obj) {
+ public boolean validateObject(Object obj) {
boolean valid = false;
if(obj instanceof PooledConnection) {
PooledConnection pconn = (PooledConnection)obj;
@@ -184,6 +197,10 @@
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
+ // logical Connection from the PooledConnection must be closed
+ // before another one can be requested and closing it will
+ // generate an event. Keep track so we know not to return
+ // the PooledConnection
validatingMap.put(pconn, null);
try {
conn = pconn.getConnection();
@@ -248,7 +265,16 @@
// otherwise return the connection to the pool.
if (!validatingMap.containsKey(pc))
{
- _pool.returnObject(pc);
+ try
+ {
+ _pool.returnObject(pc);
+ }
+ catch (Exception e)
+ {
+ destroyObject(pc);
+ System.err.println("CLOSING DOWN CONNECTION AS IT COULD " +
+ "NOT BE RETURNED TO THE POOL");
+ }
}
}
1.5 +44 -5 jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/Jdbc2PoolDataSource.java
Index: Jdbc2PoolDataSource.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/Jdbc2PoolDataSource.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Jdbc2PoolDataSource.java 18 Mar 2002 06:49:32 -0000 1.4
+++ Jdbc2PoolDataSource.java 3 Apr 2002 05:10:46 -0000 1.5
@@ -91,7 +91,7 @@
* ConnectionPoolDataSource.
*
* @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @version $Id: Jdbc2PoolDataSource.java,v 1.4 2002/03/18 06:49:32 jmcnally Exp $
+ * @version $Id: Jdbc2PoolDataSource.java,v 1.5 2002/04/03 05:10:46 jmcnally Exp $
*/
public class Jdbc2PoolDataSource
implements DataSource, Referenceable, Serializable, ObjectFactory
@@ -179,7 +179,17 @@
*/
public void setConnectionPoolDataSource(ConnectionPoolDataSource v)
{
+ assertInitializationAllowed();
+ if (dataSourceName != null)
+ {
+ throw new IllegalStateException(
+ "Cannot set the DataSource, if JNDI is used.");
+ }
this.cpds = v;
+ if (isNew)
+ {
+ registerInstance();
+ }
}
/**
@@ -203,7 +213,18 @@
*/
public void setDataSourceName(String v)
{
+ assertInitializationAllowed();
+ if (cpds != null)
+ {
+ throw new IllegalStateException(
+ "Cannot set the JNDI name for the DataSource, if already " +
+ "set using setConnectionPoolDataSource.");
+ }
this.dataSourceName = v;
+ if (isNew)
+ {
+ registerInstance();
+ }
}
@@ -789,11 +810,13 @@
public Connection getConnection(String username, String password)
throws SQLException
{
- getConnectionCalled = true;
if (isNew)
{
- registerInstance();
+ throw new SQLException("Must set the ConnectionPoolDataSource " +
+ "through setDataSourceName or setConnectionPoolDataSource " +
+ "before calling getConnection.");
}
+ getConnectionCalled = true;
Map pools = (Map)dsInstanceMap.get(instanceKey);
String key = getKey(username);
ObjectPool pool = (ObjectPool)pools.get(key);
@@ -810,8 +833,23 @@
}
}
- Connection con =
- ((PooledConnection)pool.borrowObject()).getConnection();
+ PooledConnection pc = null;
+ try
+ {
+ pc = (PooledConnection)pool.borrowObject();
+ }
+ catch (Exception e)
+ {
+ if (e instanceof RuntimeException)
+ {
+ throw (RuntimeException)e;
+ }
+ else
+ {
+ throw new SQLException(e.getMessage());
+ }
+ }
+ Connection con = pc.getConnection();
boolean defaultAutoCommit = isDefaultAutoCommit();
if ( username != null )
@@ -849,6 +887,7 @@
}
return key;
}
+
synchronized private void registerInstance()
{
1.4 +26 -5 jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/adapter/PooledConnectionImpl.java
Index: PooledConnectionImpl.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/jdbc2pool/src/java/org/apache/commons/jdbc2pool/adapter/PooledConnectionImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PooledConnectionImpl.java 4 Mar 2002 07:50:15 -0000 1.3
+++ PooledConnectionImpl.java 3 Apr 2002 05:10:47 -0000 1.4
@@ -78,7 +78,7 @@
* PooledConnectionDataSource.
*
* @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @version $Id: PooledConnectionImpl.java,v 1.3 2002/03/04 07:50:15 jmcnally Exp $
+ * @version $Id: PooledConnectionImpl.java,v 1.4 2002/04/03 05:10:47 jmcnally Exp $
*/
public class PooledConnectionImpl
implements PooledConnection, KeyedPoolableObjectFactory
@@ -144,11 +144,32 @@
throws SQLException
{
isClosed = true;
- if(null != _pstmtPool) {
- _pstmtPool.close();
- _pstmtPool = null;
+ if(null != _pstmtPool)
+ {
+ try
+ {
+ try
+ {
+ _pstmtPool.close();
+ }
+ finally
+ {
+ _pstmtPool = null;
+ connection.close();
+ }
+ }
+ catch (Exception e)
+ {
+ if (e instanceof RuntimeException)
+ {
+ throw (RuntimeException)e;
+ }
+ else
+ {
+ throw new SQLException(e.getMessage());
+ }
+ }
}
- connection.close();
}
/**
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>