You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2015/05/11 06:42:41 UTC
[6/8] cayenne git commit: CAY-2009 Non-blocking connection pool
CAY-2009 Non-blocking connection pool
fixing a problem with manager working on exhausted pool
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/4f8c1142
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/4f8c1142
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/4f8c1142
Branch: refs/heads/master
Commit: 4f8c1142a9134681d589333b714aab206ca2e05f
Parents: 741ad3b
Author: aadamchik <aa...@apache.org>
Authored: Sun May 10 19:20:51 2015 -0400
Committer: aadamchik <aa...@apache.org>
Committed: Sun May 10 19:20:51 2015 -0400
----------------------------------------------------------------------
.../datasource/ManagedPoolingDataSource.java | 8 ++++---
.../cayenne/datasource/PoolingDataSource.java | 4 +++-
.../datasource/PoolingDataSourceTest.java | 22 ++++++++++++++++++++
3 files changed, 30 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4f8c1142/cayenne-server/src/main/java/org/apache/cayenne/datasource/ManagedPoolingDataSource.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/datasource/ManagedPoolingDataSource.java b/cayenne-server/src/main/java/org/apache/cayenne/datasource/ManagedPoolingDataSource.java
index 182ad75..80c3db8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/datasource/ManagedPoolingDataSource.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/datasource/ManagedPoolingDataSource.java
@@ -40,11 +40,13 @@ public class ManagedPoolingDataSource implements DataSource, ScopeEventListener
private DataSource dataSource;
public ManagedPoolingDataSource(PoolingDataSource dataSource) {
+ // wake every 2 minutes...
+ this(dataSource, 120000);
+ }
+ public ManagedPoolingDataSource(PoolingDataSource dataSource, long managerWakeTime) {
this.dataSource = dataSource;
-
- // wake every 2 minutes...
- this.dataSourceManager = new PoolingDataSourceManager(dataSource, 120000);
+ this.dataSourceManager = new PoolingDataSourceManager(dataSource, managerWakeTime);
dataSourceManager.start();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4f8c1142/cayenne-server/src/main/java/org/apache/cayenne/datasource/PoolingDataSource.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/datasource/PoolingDataSource.java b/cayenne-server/src/main/java/org/apache/cayenne/datasource/PoolingDataSource.java
index f760ec1..9d3b5cf 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/datasource/PoolingDataSource.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/datasource/PoolingDataSource.java
@@ -169,7 +169,9 @@ public class PoolingDataSource implements DataSource {
try {
PoolAwareConnection c = createUnchecked();
- reclaim(c);
+ if (c != null) {
+ reclaim(c);
+ }
} catch (SQLException e) {
LOGGER.info("Error creating new connection when managing connection pool, ignoring", e);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/4f8c1142/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceTest.java b/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceTest.java
index 25b7e7e..5cbfa4c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/datasource/PoolingDataSourceTest.java
@@ -126,6 +126,28 @@ public class PoolingDataSourceTest {
}
@Test
+ public void testManagePool_Empty() throws SQLException {
+
+ int max = 5;
+
+ params.setMinConnections(1);
+ params.setMaxConnections(max);
+ PoolingDataSource ds = new PoolingDataSource(nonPooling, params);
+
+ // opening and closing 'max' connections should fill the pool to the
+ // top...
+ Connection[] open = new Connection[max];
+ for (int i = 0; i < max; i++) {
+ open[i] = ds.getConnection();
+ }
+
+ // all connections are in use, so managePool should do nothing
+ assertEquals(max, ds.poolSize());
+ ds.managePool();
+ assertEquals(max, ds.poolSize());
+ }
+
+ @Test
public void testValidateUnchecked() {
final PoolAwareConnection[] connections = validConnections(4);