From 69b5f8af243581fd5606e905da1494ee37faa64f Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Mon, 10 May 2010 09:20:07 +0000
Subject: [PATCH] [LMS-1531] enable to configure maxIdle and maxActive
 properties of default DataSourceFactory

SVN: 15862
---
 .../generic/shared/DataSourceProvider.java    |  2 +
 .../DatabaseConfigurationContext.java         | 43 ++++++++++++++++---
 .../cisd/dbmigration/IDataSourceFactory.java  | 15 +++++++
 .../dataaccess/db/SqlUnitMigrationTest.java   | 12 +++++-
 4 files changed, 64 insertions(+), 8 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSourceProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSourceProvider.java
index 9eab465b470..ac339087a62 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSourceProvider.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSourceProvider.java
@@ -47,6 +47,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.utils.PropertyParametersUtil.
  * my-data-source-1.basicDatabaseName = my-database-1
  * my-data-source-1.databaseKind = dev
  * my-data-source-1.scriptFolder = sql
+ * my-data-source-1.maxIdle = 50
+ * my-data-source-1.maxActive = 50
  * 
  * # Configure data source my-data-source-2
  * my-data-source-2.version-holder-class = ch.example.databases.MyDatabase2VersionHolder
diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java
index 4487019d438..4a4c9097cd4 100644
--- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java
+++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/DatabaseConfigurationContext.java
@@ -40,10 +40,14 @@ public class DatabaseConfigurationContext implements DisposableBean
     {
 
         /** @see GenericObjectPool#DEFAULT_MAX_ACTIVE */
-        private final int MAX_ACTIVE = 20;
+        private final int DEFAULT_MAX_ACTIVE = 20;
 
         /** @see GenericObjectPool#DEFAULT_MAX_IDLE */
-        private final int MAX_IDLE = MAX_ACTIVE;
+        private final int DEFAULT_MAX_IDLE = DEFAULT_MAX_ACTIVE;
+
+        private int maxIdle = DEFAULT_MAX_IDLE;
+
+        private int maxActive = DEFAULT_MAX_ACTIVE;
 
         //
         // IDataSourceFactory
@@ -57,10 +61,20 @@ public class DatabaseConfigurationContext implements DisposableBean
             dataSource.setUrl(url);
             dataSource.setUsername(owner);
             dataSource.setPassword(password);
-            dataSource.setMaxIdle(MAX_IDLE);
-            dataSource.setMaxActive(MAX_ACTIVE);
+            dataSource.setMaxIdle(maxIdle);
+            dataSource.setMaxActive(maxActive);
             return dataSource;
         }
+
+        public void setMaxIdle(int maxIdle)
+        {
+            this.maxIdle = maxIdle;
+        }
+
+        public void setMaxActive(int maxActive)
+        {
+            this.maxActive = maxActive;
+        }
     }
 
     private ISequenceNameMapper sequenceNameMapper;
@@ -110,9 +124,9 @@ public class DatabaseConfigurationContext implements DisposableBean
         setSequenceUpdateNeeded(true);
     }
 
-    public final void setDataSourceFactory(final IDataSourceFactory dataSourceFactory)
+    public final void initDataSourceFactory(final IDataSourceFactory factory)
     {
-        this.dataSourceFactory = dataSourceFactory;
+        this.dataSourceFactory = factory;
     }
 
     private final static void closeConnection(final DataSource dataSource)
@@ -419,6 +433,23 @@ public class DatabaseConfigurationContext implements DisposableBean
         }
     }
 
+    /**
+     * Sets the maximum number of idle connections in the pool (default is 20).
+     */
+    public void setMaxIdle(int maxIdle)
+    {
+        this.dataSourceFactory.setMaxIdle(maxIdle);
+    }
+
+    /**
+     * Sets the maximum number of active connections that can be allocated at the same time (default
+     * is 20).
+     */
+    public void setMaxActive(int maxActive)
+    {
+        this.dataSourceFactory.setMaxActive(maxActive);
+    }
+
     /**
      * Returns the URL of the database server which allows to create a new database.
      * 
diff --git a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IDataSourceFactory.java b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IDataSourceFactory.java
index 70d4c850bd4..39d73c62e4e 100644
--- a/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IDataSourceFactory.java
+++ b/dbmigration/source/java/ch/systemsx/cisd/dbmigration/IDataSourceFactory.java
@@ -18,6 +18,9 @@ package ch.systemsx.cisd.dbmigration;
 
 import javax.sql.DataSource;
 
+import org.apache.commons.dbcp.BasicDataSource;
+import org.apache.commons.pool.impl.GenericObjectPool;
+
 /**
  * Factory for a {@link DataSource}.
  * 
@@ -29,4 +32,16 @@ public interface IDataSourceFactory
      * Creates a data source for the specified database credentials.
      */
     public DataSource createDataSource(String driver, String url, String owner, String password);
+
+    /**
+     * @see BasicDataSource#setMaxIdle(int)
+     * @see GenericObjectPool#DEFAULT_MAX_IDLE
+     */
+    public void setMaxIdle(int maxIdle);
+
+    /**
+     * @see BasicDataSource#setMaxActive(int)
+     * @see GenericObjectPool#DEFAULT_MAX_ACTIVE
+     */
+    public void setMaxActive(int maxActive);
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SqlUnitMigrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SqlUnitMigrationTest.java
index 485fc0d8a9a..3c73475646b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SqlUnitMigrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SqlUnitMigrationTest.java
@@ -166,6 +166,14 @@ public final class SqlUnitMigrationTest
             {
                 return new MyDataSource(driver, url, owner, password);
             }
+
+            public void setMaxActive(int maxActive)
+            {
+            }
+
+            public void setMaxIdle(int maxIdle)
+            {
+            }
         };
 
     @BeforeClass(alwaysRun = true)
@@ -218,7 +226,7 @@ public final class SqlUnitMigrationTest
                 try
                 {
                     configurationContext.setCreateFromScratch(true);
-                    configurationContext.setDataSourceFactory(DATA_SOURCE_FACTORY);
+                    configurationContext.initDataSourceFactory(DATA_SOURCE_FACTORY);
                     configurationContext.setScriptFolder(getTestDataFolder(configurationContext));
                     DBMigrationEngine.createOrMigrateDatabaseAndGetScriptProvider(
                             configurationContext, databaseVersion);
@@ -316,7 +324,7 @@ public final class SqlUnitMigrationTest
         final DatabaseConfigurationContext configurationContext =
                 DatabaseCreationUtil.createDatabaseConfigurationContext(databaseKind);
         configurationContext.setCreateFromScratch(true);
-        configurationContext.setDataSourceFactory(DATA_SOURCE_FACTORY);
+        configurationContext.initDataSourceFactory(DATA_SOURCE_FACTORY);
         return configurationContext;
     }
 
-- 
GitLab