Author: indika
Date: Fri Oct 24 07:45:29 2008
New Revision: 707647

URL: http://svn.apache.org/viewvc?rev=707647&view=rev
Log:
Fix an issue in DB pool - A mistake
Add JMX monitoring for DB pool

Added:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRegistrar.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRepository.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolView.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolViewMBean.java
Modified:
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DataSourceInformation.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/InMemoryDataSourceRegistry.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceFactory.java
    
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceInformationFactory.java

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java?rev=707647&r1=707646&r2=707647&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/AbstractDBMediatorFactory.java
 Fri Oct 24 07:45:29 2008
@@ -26,6 +26,9 @@
 import org.apache.synapse.mediators.db.Statement;
 import org.apache.synapse.util.xpath.SynapseXPath;
 import org.apache.synapse.util.datasource.DataSourceFinder;
+import org.apache.synapse.util.datasource.InMemoryDataSourceRegistry;
+import org.apache.synapse.util.datasource.DBPoolView;
+import org.apache.synapse.util.MBeanRepository;
 import org.jaxen.JaxenException;
 
 import javax.naming.Context;
@@ -140,6 +143,11 @@
         mediator.addDataSourceProperty(DSNAME_Q, dsName);
         DataSource dataSource = DataSourceFinder.find(dsName);
         if (dataSource != null) {
+            MBeanRepository mBeanRepository = 
InMemoryDataSourceRegistry.getInstance();
+            Object mBean = mBeanRepository.getMBean(dsName);
+            if (mBean instanceof DBPoolView) {
+                mediator.setDbPoolView((DBPoolView) mBean);
+            }
             return dataSource;
         }
         Properties props = new Properties();

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java?rev=707647&r1=707646&r2=707647&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/db/AbstractDBMediator.java
 Fri Oct 24 07:45:29 2008
@@ -24,6 +24,8 @@
 import org.apache.commons.logging.Log;
 import org.apache.synapse.ManagedLifecycle;
 import org.apache.synapse.MessageContext;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.util.datasource.DBPoolView;
 import org.apache.synapse.config.xml.AbstractDBMediatorFactory;
 import org.apache.synapse.core.SynapseEnvironment;
 import org.apache.synapse.mediators.AbstractMediator;
@@ -44,6 +46,10 @@
     protected Map dataSourceProps = new HashMap();
     /** The DataSource to get DB connections */
     private DataSource dataSource = null;
+    /**
+     * MBean for DBPool monitoring
+     */
+    private DBPoolView dbPoolView;
     /** Statements */
     List statementList = new ArrayList();
 
@@ -168,7 +174,38 @@
             traceOrDebug(traceOn, "Getting a connection from DataSource " + 
getDSName() +
                 " and preparing statement : " + stmnt.getRawStatement());
         }
+
         Connection con = getDataSource().getConnection();
+        if (con == null) {
+            String msg = "Connection from DataSource " + getDSName() + " is 
null.";
+            log.error(msg);
+            throw new SynapseException(msg);
+        }
+
+        if (dataSource instanceof BasicDataSource) {
+
+            BasicDataSource basicDataSource = (BasicDataSource) dataSource;
+            int numActive = basicDataSource.getNumActive();
+            int numIdle = basicDataSource.getNumIdle();
+            String connectionId = Integer.toHexString(con.hashCode());
+
+
+            DBPoolView dbPoolView = getDbPoolView();
+            if (dbPoolView != null) {
+                dbPoolView.setNumActive(numActive);
+                dbPoolView.setNumIdle(numIdle);
+                dbPoolView.updateConnectionUsage(connectionId);
+            }
+
+            if (traceOrDebugOn) {
+                traceOrDebug(traceOn, "[ DB Connection : " + con + " ]");
+                traceOrDebug(traceOn, "[ DB Connection instance identifier : " 
+
+                        connectionId + " ]");
+                traceOrDebug(traceOn, "[ Number of Active Connection : " + 
numActive + " ]");
+                traceOrDebug(traceOn, "[ Number of Idle Connection : " + 
numIdle + " ]");
+            }
+        }
+
         PreparedStatement ps = con.prepareStatement(stmnt.getRawStatement());
 
         // set parameters if any
@@ -261,4 +298,12 @@
         }
         return ps;
     }
+
+    public DBPoolView getDbPoolView() {
+        return dbPoolView;
+    }
+
+    public void setDbPoolView(DBPoolView dbPoolView) {
+        this.dbPoolView = dbPoolView;
+    }     
 }

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRegistrar.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRegistrar.java?rev=707647&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRegistrar.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRegistrar.java
 Fri Oct 24 07:45:29 2008
@@ -0,0 +1,101 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.SynapseException;
+
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import java.lang.management.ManagementFactory;
+import java.util.Set;
+
+public class MBeanRegistrar {
+
+    private static final MBeanRegistrar ourInstance = new MBeanRegistrar();
+    private static final Log log = LogFactory.getLog(MessageHelper.class);
+
+    public static MBeanRegistrar getInstance() {
+        return ourInstance;
+    }
+
+    private MBeanRegistrar() {
+    }
+
+    public void registerMBean(Object mbeanInstance, String category, String 
id) {
+        assertNull(mbeanInstance, "Mbean instance is null");
+        assertNull(category, "Mbean instance category is null");
+        assertNull(id, "Mbean instance name is null");
+        try {
+            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+            ObjectName name = new ObjectName(getObjectName(category, id));
+            Set set = mbs.queryNames(name, null);
+            if (set != null && set.isEmpty()) {
+                mbs.registerMBean(mbeanInstance, name);
+            } else {
+                mbs.unregisterMBean(name);
+                mbs.registerMBean(mbeanInstance, name);
+            }
+        } catch (Exception e) {
+            log.warn("Error registering a MBean with name ' " + id +
+                    " ' and category name ' " + category + "' for JMX 
management", e);
+        }
+    }
+
+    public void unRegisterMBean(String category, String id) {
+        try {
+            MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+            ObjectName objName = new ObjectName(getObjectName(category, id));
+            if (mbs.isRegistered(objName)) {
+                mbs.unregisterMBean(objName);
+            }
+        } catch (Exception e) {
+            log.warn("Error un-registering a  MBean with name ' " + id +
+                    " ' and category name ' " + category + "' for JMX 
management", e);
+        }
+    }
+
+    private String getObjectName(String category, String id) {
+
+        String jmxAgentName = System.getProperty("jmx.agent.name");
+        if (jmxAgentName == null || "".equals(jmxAgentName)) {
+            jmxAgentName = "org.apache.synapse";
+        }
+        return jmxAgentName + ":Type=" + category + ",Name=" + id;
+    }
+
+    private void assertNull(String name, String msg) {
+        if (name == null || "".equals(name)) {
+            handleException(msg);
+        }
+    }
+
+    private void assertNull(Object object, String msg) {
+        if (object == null) {
+            handleException(msg);
+        }
+    }
+
+    private static void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+}

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRepository.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRepository.java?rev=707647&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRepository.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/MBeanRepository.java
 Fri Oct 24 07:45:29 2008
@@ -0,0 +1,30 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.util;
+
+/**
+ * MBean Repository for hold MBean locally 
+ */
+public interface MBeanRepository {
+
+    public void addMBean(String name, Object mBean);
+
+    public Object getMBean(String name);
+
+}

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolView.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolView.java?rev=707647&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolView.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolView.java
 Fri Oct 24 07:45:29 2008
@@ -0,0 +1,85 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.util.datasource;
+
+
+import java.util.Map;
+import java.util.HashMap;
+
+
+/**
+ * DBPool monitoring 
+ */
+public class DBPoolView implements DBPoolViewMBean {
+
+    private int numActive = 0;
+    private int numIdle = 0;
+    private final Map<String, Long> connectionsUsage = new HashMap<String, 
Long>();
+    private String name;
+
+    public DBPoolView(String name) {
+        this.name = name;
+    }
+
+    public int getNumActive() {
+        return numActive;
+    }
+
+    public void setNumActive(int numActive) {
+        this.numActive = numActive;
+    }
+
+    public int getNumIdle() {
+        return numIdle;
+    }
+
+    public void setNumIdle(int numIdle) {
+        this.numIdle = numIdle;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public void updateConnectionUsage(String connectionID) {
+        if (connectionID != null && !"".equals(connectionID)) {
+            Long currentUsage = connectionsUsage.get(connectionID);
+            if (currentUsage != null) {
+                currentUsage += 1;
+                connectionsUsage.put(connectionID,currentUsage);
+            } else {
+                connectionsUsage.put(connectionID, (long) 1);
+            }
+        }
+    }
+
+    public Map getConnectionUsage() {
+        return connectionsUsage;
+    }
+
+    public void reset() {
+        numActive = 0;
+        numIdle = 0;
+        connectionsUsage.clear();
+    }
+}

Added: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolViewMBean.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolViewMBean.java?rev=707647&view=auto
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolViewMBean.java
 (added)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DBPoolViewMBean.java
 Fri Oct 24 07:45:29 2008
@@ -0,0 +1,33 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.synapse.util.datasource;
+
+import java.util.Map;
+
+/**
+ * 
+ */
+public interface DBPoolViewMBean {
+    
+     public int getNumActive();
+     public int getNumIdle();
+     public String getName();
+     public Map getConnectionUsage();
+     public void reset();
+}

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DataSourceInformation.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DataSourceInformation.java?rev=707647&r1=707646&r2=707647&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DataSourceInformation.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/DataSourceInformation.java
 Fri Oct 24 07:45:29 2008
@@ -43,7 +43,7 @@
     private boolean defaultReadOnly = false;
     private boolean testOnBorrow = true;
     private boolean testOnReturn = false;
-    private int minIdle = GenericObjectPool.DEFAULT_MAX_IDLE;
+    private int minIdle = GenericObjectPool.DEFAULT_MIN_IDLE;
     private int initialSize;
     private int defaultTransactionIsolation = -1;
     private String defaultCatalog;

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/InMemoryDataSourceRegistry.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/InMemoryDataSourceRegistry.java?rev=707647&r1=707646&r2=707647&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/InMemoryDataSourceRegistry.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/InMemoryDataSourceRegistry.java
 Fri Oct 24 07:45:29 2008
@@ -25,6 +25,8 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.util.datasource.factory.DataSourceFactory;
+import org.apache.synapse.util.MBeanRepository;
+import org.apache.synapse.util.MBeanRegistrar;
 
 import javax.sql.DataSource;
 import java.util.HashMap;
@@ -34,12 +36,14 @@
 /**
  * Keeps all DataSources in the memory
  */
-public class InMemoryDataSourceRegistry implements DataSourceRegistry {
+public class InMemoryDataSourceRegistry implements DataSourceRegistry, 
MBeanRepository {
 
     private final static Log log = 
LogFactory.getLog(InMemoryDataSourceRegistry.class);
 
     private static final InMemoryDataSourceRegistry ourInstance = new 
InMemoryDataSourceRegistry();
     private final static Map<String, DataSource> dataSources = new 
HashMap<String, DataSource>();
+    private final static Map<String, DBPoolView> dataSourcesMBeans = new 
HashMap<String, DBPoolView>();
+    private final static String MBEAN_CATEGORY_DATABASE_CONNECTION_POOL = 
"DatabaseConnectionPool";
 
     public static InMemoryDataSourceRegistry getInstance() {
         return ourInstance;
@@ -76,6 +80,7 @@
             log.debug("Registering a DatSource with name : " + name + " in 
Local Pool");
         }
 
+        addMBean(name, new DBPoolView(name));
         dataSources.put(name, dataSource);
     }
 
@@ -86,9 +91,7 @@
      */
     public DataSource lookUp(String name) {
 
-        if (name == null || "".equals(name)) {
-            handleException("DataSorce name cannot be found.");
-        }
+        assertNull(name, "DataSorce name cannot be found.");
         return dataSources.get(name);
     }
 
@@ -105,10 +108,53 @@
             log.info("Clearing all in-memory datasources ");
             dataSources.clear();
         }
+        if (!dataSourcesMBeans.isEmpty()) {
+            log.info("UnRegistering DBPool MBeans");
+            for (DBPoolView dbPoolView : dataSourcesMBeans.values()) {
+                if (dbPoolView != null) {
+                    MBeanRegistrar.getInstance().unRegisterMBean(
+                            MBEAN_CATEGORY_DATABASE_CONNECTION_POOL, 
dbPoolView.getName());
+                }
+            }
+            dataSourcesMBeans.clear();
+        }
     }
 
     private static void handleException(String msg) {
         log.error(msg);
         throw new SynapseException(msg);
     }
+
+    public void addMBean(String name, Object mBean) {
+        assertNull(name, "DataSorce MBean name cannot be found.");
+        assertNull(mBean, "DataSorce MBean  cannot be found.");
+        assertFalse(mBean instanceof DBPoolView, "Given MBean instance is not 
matched " +
+                "with the expected MBean - 'DBPoolView'.");
+        dataSourcesMBeans.put(name, (DBPoolView) mBean);
+        MBeanRegistrar mBeanRegistrar = MBeanRegistrar.getInstance();
+        mBeanRegistrar.registerMBean(mBean, 
MBEAN_CATEGORY_DATABASE_CONNECTION_POOL, name);
+    }
+
+    public Object getMBean(String name) {
+        assertNull(name, "DataSorce MBean name cannot be found.");
+        return dataSourcesMBeans.get(name);
+    }
+
+    private void assertNull(String name, String msg) {
+        if (name == null || "".equals(name)) {
+            handleException(msg);
+        }
+    }
+
+    private void assertNull(Object object, String msg) {
+        if (object == null) {
+            handleException(msg);
+        }
+    }
+
+    private void assertFalse(boolean condition, String msg) {
+        if (!condition) {
+            handleException(msg);
+        }
+    }
 }

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceFactory.java?rev=707647&r1=707646&r2=707647&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceFactory.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceFactory.java
 Fri Oct 24 07:45:29 2008
@@ -84,7 +84,7 @@
             basicDataSource.setMaxActive(information.getMaxActive());
             basicDataSource.setMaxIdle(information.getMaxIdle());
             basicDataSource.setMaxWait(information.getMaxWait());
-            basicDataSource.setMaxIdle(information.getMaxIdle());
+            basicDataSource.setMinIdle(information.getMinIdle());
             
basicDataSource.setDefaultAutoCommit(information.isDefaultAutoCommit());
             
basicDataSource.setDefaultReadOnly(information.isDefaultReadOnly());
             basicDataSource.setTestOnBorrow(information.isTestOnBorrow());

Modified: 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceInformationFactory.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceInformationFactory.java?rev=707647&r1=707646&r2=707647&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceInformationFactory.java
 (original)
+++ 
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/util/datasource/factory/DataSourceInformationFactory.java
 Fri Oct 24 07:45:29 2008
@@ -253,7 +253,7 @@
         information.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
         information.setTestWhileIdle(testWhileIdle);
         information.setValidationQuery(validationQuery);
-        information.setMaxIdle(minIdle);
+        information.setMinIdle(minIdle);
         
information.setDefaultTransactionIsolation(defaultTransactionIsolation);
         
information.setAccessToUnderlyingConnectionAllowed(accessToUnderlyingConnectionAllowed);
         information.setRemoveAbandoned(removeAbandoned);


Reply via email to