public Future<Connection> getConnectionAsync() throws SQLException {
PooledConnection pc = this.borrowConnection(0, null, null);
if (pc!=null) {
+
return new ConnectionFuture(pc);
}
//we can only retrieve a future if the underlying queue supports it.
this.pcFuture = pcf;
}
- public ConnectionFuture(PooledConnection pc) {
+ public ConnectionFuture(PooledConnection pc) throws SQLException {
this.pc = pc;
+ result = ConnectionPool.this.setupConnection(pc);
+ configured.set(true);
}
/**
* {@inheritDoc}
--- /dev/null
+package org.apache.tomcat.jdbc.test;
+
+import java.sql.Connection;
+import java.util.concurrent.Future;
+
+public class Bug50805 extends DefaultTestCase {
+ public Bug50805(String name) {
+ super(name);
+ }
+
+ public void test50805() throws Exception {
+ init();
+ this.datasource.setInitialSize(0);
+ this.datasource.setMaxActive(10);
+ this.datasource.setMinIdle(1);
+
+ assertEquals("Current size should be 0.", 0, this.datasource.getSize());
+
+ this.datasource.getConnection().close();
+
+ assertEquals("Current size should be 1.", 1, this.datasource.getSize());
+ assertEquals("Idle size should be 1.", 1, this.datasource.getIdle());
+ assertEquals("Busy size should be 0.", 0, this.datasource.getActive());
+
+ Future<Connection> fc = this.datasource.getConnectionAsync();
+
+ Connection con = fc.get();
+
+ assertEquals("Current size should be 1.", 1, this.datasource.getSize());
+ assertEquals("Idle size should be 0.", 0, this.datasource.getIdle());
+ assertEquals("Busy size should be 1.", 1, this.datasource.getActive());
+
+ con.close();
+ assertEquals("Current size should be 1.", 1, this.datasource.getSize());
+ assertEquals("Idle size should be 1.", 1, this.datasource.getIdle());
+ assertEquals("Busy size should be 0.", 0, this.datasource.getActive());
+ }
+}