### Eclipse Workspace Patch 1.0
#P OpenbravoCore
Index: src/org/openbravo/database/ConnectionProviderImpl.java
===================================================================
--- src/org/openbravo/database/ConnectionProviderImpl.java	(revision 15133)
+++ src/org/openbravo/database/ConnectionProviderImpl.java	(working copy)
@@ -27,6 +27,8 @@
 import org.apache.commons.dbcp.PoolingDriver;
 import org.apache.commons.pool.KeyedObjectPoolFactory;
 import org.apache.commons.pool.ObjectPool;
+import org.apache.commons.pool.impl.GenericKeyedObjectPool;
+import org.apache.commons.pool.impl.GenericKeyedObjectPoolFactory;
 import org.apache.commons.pool.impl.GenericObjectPool;
 import org.apache.commons.pool.impl.StackKeyedObjectPoolFactory;
 import org.apache.log4j.Logger;
@@ -70,6 +72,7 @@
     double maxConnTime = 0.5;
     String dbSessionConfig = null;
     String rdbms = null;
+    Integer stmtPoolSize = null;
 
     Properties properties = new Properties();
     try {
@@ -82,6 +85,8 @@
       minConns = new Integer(properties.getProperty("bbdd.minConns", "1"));
       maxConns = new Integer(properties.getProperty("bbdd.maxConns", "10"));
       maxConnTime = new Double(properties.getProperty("maxConnTime", "0.5"));
+      // bbdd.maxStmts = -1: infinite, 0:no pool, n: pool size n
+      stmtPoolSize = new Integer(properties.getProperty("bbdd.maxStmts", "-1")); 
       dbSessionConfig = properties.getProperty("bbdd.sessionConfig");
       rdbms = properties.getProperty("bbdd.rdbms");
       if (rdbms.equalsIgnoreCase("POSTGRE"))
@@ -99,13 +104,14 @@
       log4j.debug("minConns: " + minConns);
       log4j.debug("maxConns: " + maxConns);
       log4j.debug("maxConnTime: " + Double.toString(maxConnTime));
+      log4j.debug("maxStmts: " + stmtPoolSize);
       log4j.debug("dbSessionConfig: " + dbSessionConfig);
       log4j.debug("rdbms: " + rdbms);
     }
 
     try {
       addNewPool(dbDriver, dbServer, dbLogin, dbPassword, minConns, maxConns, maxConnTime,
-          dbSessionConfig, rdbms, poolName);
+          dbSessionConfig, rdbms, poolName, stmtPoolSize);
     } catch (Exception e) {
       log4j.error(e);
       throw new PoolNotFoundException("Failed when creating database connections pool", e);
@@ -128,7 +134,7 @@
 
   public void addNewPool(String dbDriver, String dbServer, String dbLogin, String dbPassword,
       int minConns, int maxConns, double maxConnTime, String dbSessionConfig, String rdbms,
-      String name) throws Exception {
+      String name, Integer stmtPoolSize) throws Exception {
     if (log4j.isDebugEnabled())
       log4j.debug("Loading underlying JDBC driver.");
     try {
@@ -147,6 +153,19 @@
     connectionPool.setTestWhileIdle(false);
 
     KeyedObjectPoolFactory keyedObject = new StackKeyedObjectPoolFactory();
+    
+    if (stmtPoolSize>0) {
+      keyedObject = new GenericKeyedObjectPoolFactory(
+          null, 
+          GenericKeyedObjectPool.DEFAULT_MAX_ACTIVE, 
+          GenericKeyedObjectPool.WHEN_EXHAUSTED_GROW, 
+          GenericKeyedObjectPool.DEFAULT_MAX_WAIT,
+          GenericKeyedObjectPool.DEFAULT_MAX_IDLE,
+          stmtPoolSize);
+    } else if (stmtPoolSize==0) {
+      keyedObject = null;
+    }
+    
     ConnectionFactory connectionFactory = new OpenbravoDriverManagerConnectionFactory(dbServer,
         dbLogin, dbPassword, dbSessionConfig);
     @SuppressWarnings("unused")

