# HG changeset patch
# User Asier Lostalé <asier.lostale@openbravo.com>
# Date 1488459724 -3600
#      Thu Mar 02 14:02:04 2017 +0100
# Node ID 998c349fbc20deac5cb6b30e619b464cdc45e05a
# Parent  fd990d9ed28b27a70da8ba4d0e9870c40143dcc8
fixed issue 35409: add support to expose pool info as jmx bean

  Jdbc pool can be exposed as jxm by enabling it through the property
  db.pool.jmxEnabled

diff -r fd990d9ed28b -r 998c349fbc20 modules/org.openbravo.apachejdbcconnectionpool/src/org/openbravo/apachejdbcconnectionpool/JdbcExternalConnectionPool.java
--- a/modules/org.openbravo.apachejdbcconnectionpool/src/org/openbravo/apachejdbcconnectionpool/JdbcExternalConnectionPool.java	Tue Feb 28 13:36:13 2017 +0100
+++ b/modules/org.openbravo.apachejdbcconnectionpool/src/org/openbravo/apachejdbcconnectionpool/JdbcExternalConnectionPool.java	Thu Mar 02 14:02:04 2017 +0100
@@ -18,12 +18,17 @@
  */
 package org.openbravo.apachejdbcconnectionpool;
 
+import java.lang.management.ManagementFactory;
 import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 
@@ -142,7 +147,6 @@
     DataSource defaultDS = new DataSource();
     defaultDS.setPoolProperties(getPoolProperties(""));
     availableDataSources.put(DEFAULT_POOL, defaultDS);
-
     if (isReadOnlyPoolDefined()) {
       PoolProperties p = getPoolProperties("readonly");
       p.setDefaultReadOnly(true);
@@ -153,6 +157,27 @@
       ro.setPoolProperties(p);
       availableDataSources.put(READONLY_POOL, ro);
     }
+
+    for (Entry<String, DataSource> dse : availableDataSources.entrySet()) {
+      DataSource ds = dse.getValue();
+      try {
+        // pool needs to be created before it's registered
+        ds.createPool();
+
+        if (ds.isJmxEnabled()) {
+          MBeanServer mbs = null;
+          mbs = ManagementFactory.getPlatformMBeanServer();
+          try {
+            ObjectName name = new ObjectName("Openbravo:name=Pool-" + dse.getKey());
+            mbs.registerMBean(ds.getPool().getJmxPool(), name);
+          } catch (Exception ignored) {
+            log.error("Could not register {} pool as jmx bean", dse.getKey(), ignored);
+          }
+        }
+      } catch (SQLException e) {
+        log.error("Error creating pool {}", dse.getKey(), e);
+      }
+    }
   }
 
   private PoolProperties getPoolProperties(String poolName) {
@@ -285,6 +310,9 @@
     if (getStringProperty(props, "db.pool.name", poolName) != null) {
       poolProperties.setName(getStringProperty(props, "db.pool.name", poolName));
     }
+    if (getStringProperty(props, "db.pool.jmxEnabled", poolName) != null) {
+      poolProperties.setJmxEnabled(getBooleanProperty(props, "db.pool.jmxEnabled", poolName));
+    }
 
     return poolProperties;
   }
