[jboss-cvs] JBossAS SVN: r111045 - projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 28 09:43:10 EDT 2011


Author: jesper.pedersen
Date: 2011-03-28 09:43:10 -0400 (Mon, 28 Mar 2011)
New Revision: 111045

Modified:
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployment.java
Log:
[JBJCA-536] Create a JMX view of a datasource

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java	2011-03-28 13:11:04 UTC (rev 111044)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java	2011-03-28 13:43:10 UTC (rev 111045)
@@ -35,14 +35,21 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
+import javax.management.DynamicMBean;
+import javax.management.JMException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
 import org.jboss.logging.Logger;
 import org.jboss.security.SubjectFactory;
 
 import com.github.fungal.api.Kernel;
 import com.github.fungal.api.util.Injection;
+import com.github.fungal.api.util.JMX;
 import com.github.fungal.spi.deployers.DeployException;
 import com.github.fungal.spi.deployers.Deployer;
 import com.github.fungal.spi.deployers.Deployment;
@@ -181,10 +188,13 @@
                                                           uniqueJdbcLocalId, uniqueJdbcXAId,
                                                           dataSources, parent);
 
+         List<ObjectName> onames = registerManagementView(c.getDataSources(), kernel.getMBeanServer());
+
          return new DsXmlDeployment(c.getURL(), c.getDeploymentName(),
                                     c.getCfs(), c.getCfJndiNames(),
                                     c.getRecovery(), getXAResourceRecoveryRegistry(),
                                     c.getDataSources(), getManagementRepository(),
+                                    onames, kernel.getMBeanServer(),
                                     c.getCl());
       }
       catch (DeployException de)
@@ -324,4 +334,59 @@
                                                                   securityDomain, t);
       }
    }
+
+   /**
+    * Register management view of datasources in JMX
+    * @param mgtDses The management view of the datasources
+    * @param server The MBeanServer instance
+    * @return The ObjectName's generated for these datasources
+    * @exception JMException Thrown in case of an error
+    */
+   private List<ObjectName> registerManagementView(org.jboss.jca.core.api.management.DataSource[] mgtDses,
+                                                   MBeanServer server)
+      throws JMException
+   {
+      if (server == null)
+         throw new IllegalArgumentException("MBeanServer is null");
+
+      List<ObjectName> ons = new ArrayList<ObjectName>();
+
+      if (mgtDses != null)
+      {
+         for (org.jboss.jca.core.api.management.DataSource mgtDs : mgtDses)
+         {
+            String jndiName = mgtDs.getJndiName();
+            if (jndiName.indexOf("/") != -1)
+               jndiName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
+
+            String baseName = server.getDefaultDomain() + ":deployment=" + jndiName;
+
+            if (mgtDs.getPoolConfiguration() != null)
+            {
+               String dsPCName = baseName + ",type=PoolConfigutation";
+                  
+               DynamicMBean dsPCDMB = JMX.createMBean(mgtDs.getPoolConfiguration(), "Pool configuration");
+               ObjectName dsPCON = new ObjectName(dsPCName);
+               
+               server.registerMBean(dsPCDMB, dsPCON);
+               
+               ons.add(dsPCON);
+            }
+
+            if (mgtDs.getPool() != null)
+            {
+               String dsPName = baseName + ",type=Pool";
+                  
+               DynamicMBean dsPDMB = JMX.createMBean(mgtDs.getPool(), "Pool");
+               ObjectName dsPON = new ObjectName(dsPName);
+
+               server.registerMBean(dsPDMB, dsPON);
+               
+               ons.add(dsPON);
+            }
+         }
+      }
+
+      return ons;
+   }
 }

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployment.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployment.java	2011-03-28 13:11:04 UTC (rev 111044)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployment.java	2011-03-28 13:43:10 UTC (rev 111045)
@@ -32,7 +32,11 @@
 import java.io.Closeable;
 import java.io.IOException;
 import java.net.URL;
+import java.util.List;
 
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
 import org.jboss.logging.Logger;
 
 import com.github.fungal.spi.deployers.Deployment;
@@ -70,6 +74,12 @@
    /** The management repository */
    private ManagementRepository managementRepository;
 
+   /** JMX MBean's */
+   private List<ObjectName> objectNames;
+
+   /** The MBean server */
+   private MBeanServer mbeanServer;
+
    /** The classloader */
    private ClassLoader cl;
 
@@ -83,6 +93,8 @@
     * @param recoveryRegistry The recovery registry
     * @param dataSources The management view of the datasources
     * @param managementRepository The management repository
+    * @param onames The object names for the JMX MBeans
+    * @param mbeanServer The MBeanServer
     * @param cl The classloader
     */
    public DsXmlDeployment(URL deployment, 
@@ -90,6 +102,7 @@
                           Object[] cfs, String[] jndis,
                           XAResourceRecovery[] recoveryModules, XAResourceRecoveryRegistry recoveryRegistry,
                           DataSource[] dataSources, ManagementRepository managementRepository,
+                          List<ObjectName> onames, MBeanServer mbeanServer,
                           ClassLoader cl)
    {
       this.deployment = deployment;
@@ -100,6 +113,8 @@
       this.recoveryRegistry = recoveryRegistry;
       this.dataSources = dataSources;
       this.managementRepository = managementRepository;
+      this.objectNames = onames;
+      this.mbeanServer = mbeanServer;
       this.cl = cl;
    }
 
@@ -130,6 +145,21 @@
    {
       log.debug("Undeploying: " + deployment.toExternalForm());
 
+      if (objectNames != null && mbeanServer != null)
+      {
+         for (ObjectName on : objectNames)
+         {
+            try
+            {
+               mbeanServer.unregisterMBean(on);
+            }
+            catch (Throwable t)
+            {
+               log.warn("Exception during JMX unregistering", t);
+            }
+         }
+      }
+
       if (dataSources != null && managementRepository != null)
       {
          for (DataSource mgtDs : dataSources)



More information about the jboss-cvs-commits mailing list