[jboss-cvs] JBossAS SVN: r111772 - in projects/jboss-jca/trunk: deployers/src/main/java/org/jboss/jca/deployers/fungal and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 18 09:29:25 EDT 2011


Author: jesper.pedersen
Date: 2011-07-18 09:29:24 -0400 (Mon, 18 Jul 2011)
New Revision: 111772

Modified:
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPoolStatisticsImpl.java
   projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java
   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/RAActivator.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RADeployer.java
   projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java
   projects/jboss-jca/trunk/doc/userguide/en-US/modules/embedded.xml
   projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/EmbeddedJCA.java
   projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/SecurityActions.java
Log:
[JBJCA-628] [JBJCA-629] EntirePool and AvailableCount problems

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ArrayBlockingQueueManagedConnectionPool.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -1,6 +1,6 @@
 /*
  * JBoss, Home of Professional Open Source.
- * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * Copyright 2011, Red Hat Middleware LLC, and individual contributors
  * as indicated by the @author tags. See the copyright.txt file in the
  * distribution for a full listing of individual contributors.
  *
@@ -38,8 +38,6 @@
 import java.util.Iterator;
 import java.util.Set;
 import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ConcurrentSkipListSet;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -99,22 +97,12 @@
    /** The available connection event listeners */
    private ArrayBlockingQueue<ConnectionListener> cls;
 
-   /** The permits used to control who can checkout a connection */
-   private ConcurrentMap<ConnectionListener, ConnectionListener> permits;
-
    /** The checked out connections */
-   private final ConcurrentSkipListSet<ConnectionListener> checkedOut = 
-      new ConcurrentSkipListSet<ConnectionListener>();
+   private ConcurrentSkipListSet<ConnectionListener> checkedOut;
 
-   /** Whether the pool has been started */
-   private AtomicBoolean started = new AtomicBoolean(false);
-
    /** Whether the pool has been shutdown */
    private AtomicBoolean shutdown = new AtomicBoolean(false);
 
-   /** the max connections ever checked out **/
-   private AtomicInteger maxUsedConnections = new AtomicInteger(0);
-
    /** Statistics */
    private ManagedConnectionPoolStatisticsImpl statistics;
 
@@ -153,16 +141,18 @@
       this.log = pool.getLogger();
       this.trace = log.isTraceEnabled();
       this.cls = new ArrayBlockingQueue<ConnectionListener>(this.maxSize, true);
-      this.permits = new ConcurrentHashMap<ConnectionListener, ConnectionListener>(this.maxSize);
+      this.checkedOut = new ConcurrentSkipListSet<ConnectionListener>();
       this.statistics = new ManagedConnectionPoolStatisticsImpl(maxSize);
   
       // Schedule managed connection pool for prefill
-      if (pc.isPrefill() && p instanceof PrefillPool)
+      if (pc.isPrefill() && p instanceof PrefillPool && pc.getMinSize() > 0)
       {
          PoolFiller.fillPool(this);
       }
 
       reenable();
+
+      statistics.setMaxWaitCount(-1);
    }
 
    /**
@@ -176,7 +166,7 @@
    /**
     * {@inheritDoc}
     */
-   public boolean isEmpty()
+   public synchronized boolean isEmpty()
    {
       return cls.size() == 0 && checkedOut.size() == 0;
    }
@@ -204,13 +194,6 @@
       shutdown.set(false);
    }
 
-   private synchronized long getAvailableConnections()
-   {
-      int result = maxSize - permits.size();
-
-      return (result >= 0) ? result : 0;
-   }
-
    /**
     * {@inheritDoc}
     */
@@ -223,7 +206,7 @@
       boolean verifyConnectionListener = true;
 
       long startWait = System.currentTimeMillis();
-      if (getAvailableConnections() > 0)
+      if (cls.size() > 0)
       {
          if (shutdown.get())
             throw new RetryableUnavailableException(bundle.thePoolHasBeenShutdown());
@@ -234,6 +217,7 @@
             try
             {
                cl = cls.poll(poolConfiguration.getBlockingTimeout(), TimeUnit.MILLISECONDS);
+               statistics.deltaTotalBlockingTime(System.currentTimeMillis() - startWait);
             }
             catch (InterruptedException ie)
             {
@@ -248,13 +232,6 @@
                // No, the pool was empty, so we have to make a new one.
                cl = createConnectionEventListener(subject, cri);
 
-               // Started is atomic, so pool filler won't be scheduled twice
-               if (!started.getAndSet(true))
-               {
-                  if (poolConfiguration.getMinSize() > 0)
-                     PoolFiller.fillPool(this);
-               }
-               
                if (trace)
                   log.trace("supplying new ManagedConnection: " + cl);
                
@@ -273,6 +250,7 @@
          try
          {
             cl = cls.poll(poolConfiguration.getBlockingTimeout(), TimeUnit.MILLISECONDS);
+            statistics.deltaTotalBlockingTime(System.currentTimeMillis() - startWait);
 
             if (shutdown.get())
                throw new RetryableUnavailableException(bundle.thePoolHasBeenShutdown());
@@ -294,12 +272,10 @@
                {
                   cl = createConnectionEventListener(subject, cri);
                
-                  // Started is atomic, so pool filler won't be scheduled twice
-                  if (!started.getAndSet(true))
-                  {
-                     if (poolConfiguration.getMinSize() > 0)
-                        PoolFiller.fillPool(this);
-                  }
+                  if (poolConfiguration.isPrefill() &&
+                      pool instanceof PrefillPool &&
+                      poolConfiguration.getMinSize() > 0)
+                     PoolFiller.fillPool(this);
                
                   if (trace)
                      log.trace("supplying new ManagedConnection: " + cl);
@@ -319,16 +295,11 @@
       // Register the connection listener
       checkedOut.add(cl);
 
-      // Update max used connections
-      int size = maxSize - permits.size();
-      if (size > maxUsedConnections.get())
-         maxUsedConnections.set(size);
+      // Update in used statistics
+      statistics.setInUsedCount(checkedOut.size());
       
       if (!verifyConnectionListener)
       {
-         // Register the connection listener with permits
-         permits.put(cl, cl);
-
          // Return connection listener
          return cl;
       }
@@ -344,9 +315,6 @@
                if (trace)
                   log.trace("supplying ManagedConnection from pool: " + cl);
 
-               // Register the connection listener with permits
-               permits.put(cl, cl);
-
                // Return connection listener
                return cl;
             }
@@ -359,6 +327,7 @@
             log.destroyingConnectionNotSuccessfullyMatched(cl, mcf);
             
             checkedOut.remove(cl);
+            statistics.setInUsedCount(checkedOut.size());
             
             doDestroy(cl);
             cl = null;
@@ -368,6 +337,7 @@
             log.throwableWhileTryingMatchManagedConnection(cl, t);
          
             checkedOut.remove(cl);
+            statistics.setInUsedCount(checkedOut.size());
             
             doDestroy(cl);
             cl = null;
@@ -389,12 +359,6 @@
          if (trace)
             log.trace("ManagedConnection is being returned after it was destroyed" + cl);
 
-         if (permits.containsKey(cl))
-         {
-            // release connection listener
-            permits.remove(cl);
-         }
-
          return;
       }
 
@@ -416,6 +380,7 @@
          kill = true;
 
       checkedOut.remove(cl);
+      statistics.setInUsedCount(checkedOut.size());
 
       // This is really an error
       if (!kill && cls.size() >= poolConfiguration.getMaxSize())
@@ -456,12 +421,6 @@
          }
       }
 
-      if (permits.containsKey(cl))
-      {
-         // release connection listener
-         permits.remove(cl);
-      }
-
       if (kill)
       {
          if (trace)
@@ -489,15 +448,23 @@
       if (trace)
          log.trace("Flushing pool checkedOut=" + checkedOut + " inPool=" + cls);
 
-      // Mark checked out connections as requiring destruction
-      for (Iterator<ConnectionListener> i = checkedOut.iterator(); i.hasNext();)
+      if (kill)
       {
-         ConnectionListener cl = i.next();
+         // Mark checked out connections as requiring destruction
+         while (checkedOut.size() > 0)
+         {
+            ConnectionListener cl = checkedOut.pollFirst();
 
-         if (trace)
-            log.trace("Flush marking checked out connection for destruction " + cl);
+            if (trace)
+               log.trace("Flush marking checked out connection for destruction " + cl);
 
-         cl.setState(ConnectionState.DESTROY);
+            cl.setState(ConnectionState.DESTROY);
+
+            if (destroy == null)
+               destroy = new ArrayList<ConnectionListener>(1);
+
+            destroy.add(cl);
+         }
       }
 
       // Destroy connections in the pool
@@ -514,18 +481,22 @@
       // We need to destroy some connections
       if (destroy != null)
       {
-         for (int i = 0; i < destroy.size(); ++i)
+         for (ConnectionListener destroyCl : destroy)
          {
-            ConnectionListener l = destroy.get(i);
             if (trace)
-               log.trace("Destroying flushed connection " + l);
+               log.trace("Destroying flushed connection " + destroyCl);
 
-            doDestroy(l);
+            doDestroy(destroyCl);
          }
 
          // We destroyed something, check the minimum.
-         if (!shutdown.get() && poolConfiguration.getMinSize() > 0)
+         if (!shutdown.get() && 
+             poolConfiguration.getMinSize() > 0 &&
+             poolConfiguration.isPrefill() &&
+             pool instanceof PrefillPool)
+         {
             PoolFiller.fillPool(this);
+         }
       }
    }
 
@@ -544,6 +515,8 @@
          ConnectionListener cl = cls.peek();
          if (cl != null && cl.isTimedOut(timeout) && shouldRemove())
          {
+            statistics.deltaTimedOut();
+
             // We need to destroy this one
             if (destroy == null)
                destroy = new ArrayList<ConnectionListener>(1);
@@ -582,8 +555,13 @@
          }
 
          // We destroyed something, check the minimum.
-         if (!shutdown.get() && poolConfiguration.getMinSize() > 0)
+         if (!shutdown.get() && 
+             poolConfiguration.getMinSize() > 0 &&
+             poolConfiguration.isPrefill() &&
+             pool instanceof PrefillPool)
+         {
             PoolFiller.fillPool(this);
+         }
 
          // Empty pool
          if (pool != null)
@@ -618,6 +596,7 @@
          try
          {
             cl = createConnectionEventListener(defaultSubject, defaultCri);
+            statistics.setInUsedCount(checkedOut.size() + 1);
                
             if ((checkedOut.size() + cls.size()) < poolConfiguration.getMinSize())
             {
@@ -676,13 +655,19 @@
    private ConnectionListener createConnectionEventListener(Subject subject, ConnectionRequestInfo cri)
       throws ResourceException
    {
+      long start = System.currentTimeMillis();
+
       ManagedConnection mc = mcf.createManagedConnection(subject, cri);
+
+      statistics.deltaTotalCreationTime(System.currentTimeMillis() - start);
+      statistics.deltaCreatedCount();
       try
       {
          return clf.createConnectionListener(mc, this);
       }
       catch (ResourceException re)
       {
+         statistics.deltaDestroyedCount();
          mc.destroy();
          throw re;
       }
@@ -701,6 +686,7 @@
          return;
       }
 
+      statistics.deltaDestroyedCount();
       cl.setState(ConnectionState.DESTROYED);
       try
       {
@@ -793,7 +779,11 @@
       }
       finally
       {
-         if (anyDestroyed && !shutdown.get() && poolConfiguration.getMinSize() > 0)
+         if (anyDestroyed &&
+             !shutdown.get() &&
+             poolConfiguration.getMinSize() > 0 &&
+             poolConfiguration.isPrefill() &&
+             pool instanceof PrefillPool)
          {
             PoolFiller.fillPool(this);
          }

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPoolStatisticsImpl.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPoolStatisticsImpl.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/ManagedConnectionPoolStatisticsImpl.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -71,6 +71,7 @@
    private AtomicInteger timedOut;
    private AtomicLong totalBlockingTime;
    private AtomicLong totalCreationTime;
+   private AtomicInteger inUseCount;
 
    /**
     * Constructor
@@ -140,6 +141,7 @@
       this.timedOut = new AtomicInteger(0);
       this.totalBlockingTime = new AtomicLong(0);
       this.totalCreationTime = new AtomicLong(0);
+      this.inUseCount = new AtomicInteger(0);
    }
 
    /**
@@ -282,7 +284,7 @@
     */
    public int getAvailableCount()
    {
-      return maxPoolSize - getActiveCount();
+      return maxPoolSize - inUseCount.get();
    }
 
    /**
@@ -343,6 +345,16 @@
    }
 
    /**
+    * Set in used count
+    * @param v The value
+    */
+   public void setInUsedCount(int v)
+   {
+      inUseCount.set(v);
+      setMaxUsedCount(v);
+   }
+
+   /**
     * Set max used count
     * @param v The value
     */

Modified: projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java
===================================================================
--- projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/core/src/main/java/org/jboss/jca/core/connectionmanager/pool/mcp/SemaphoreArrayListManagedConnectionPool.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -249,7 +249,7 @@
                   {
                      cl = cls.remove(clsSize - 1);
                      checkedOut.add(cl);
-                     statistics.setMaxUsedCount(maxSize - permits.availablePermits());
+                     statistics.setInUsedCount(checkedOut.size());
                   }
                }
                if (cl != null)
@@ -280,6 +280,7 @@
                      synchronized (cls)
                      {
                         checkedOut.remove(cl);
+                        statistics.setInUsedCount(checkedOut.size());
                      }
 
                      doDestroy(cl);
@@ -292,6 +293,7 @@
                      synchronized (cls)
                      {
                         checkedOut.remove(cl);
+                        statistics.setInUsedCount(checkedOut.size());
                      }
 
                      doDestroy(cl);
@@ -321,7 +323,7 @@
                synchronized (cls)
                {
                   checkedOut.add(cl);
-                  statistics.setMaxUsedCount(maxSize - permits.availablePermits());
+                  statistics.setInUsedCount(checkedOut.size());
                }
 
                if (trace)
@@ -339,6 +341,7 @@
                synchronized (cls)
                {
                   checkedOut.remove(cl);
+                  statistics.setInUsedCount(checkedOut.size());
                }
 
                permits.release();
@@ -404,6 +407,7 @@
             kill = true;
 
          checkedOut.remove(cl);
+         statistics.setInUsedCount(checkedOut.size());
 
          // This is really an error
          if (!kill && isSize(poolConfiguration.getMaxSize() + 1))
@@ -488,7 +492,15 @@
                   destroy = new ArrayList<ConnectionListener>(1);
 
                destroy.add(cl);
+
+               if (clPermits.containsKey(cl))
+               {
+                  clPermits.remove(cl);
+                  permits.release();
+               }
             }
+
+            statistics.setInUsedCount(checkedOut.size());
          }
 
          // Destroy connections in the pool
@@ -646,7 +658,7 @@
                            log.trace("Filling pool cl=" + cl);
 
                         cls.add(cl);
-                        statistics.setMaxUsedCount(maxSize - permits.availablePermits());
+                        statistics.setInUsedCount(checkedOut.size() + 1);
                      }
                   }
                   catch (ResourceException re)

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/AbstractFungalRADeployer.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -396,11 +396,12 @@
     * Register management view of a connector in JMX
     * @param mgtConnector The management view of the connector
     * @param server The MBeanServer instance
+    * @param domain The management domain
     * @return The ObjectName's generated for this connector
     * @exception JMException Thrown in case of an error
     */
    protected List<ObjectName> registerManagementView(org.jboss.jca.core.api.management.Connector mgtConnector,
-                                                     MBeanServer server)
+                                                     MBeanServer server, String domain)
       throws JMException
    {
       List<ObjectName> ons = null;
@@ -410,7 +411,7 @@
          if (server != null)
          {
             ons = new ArrayList<ObjectName>();
-            String baseName = server.getDefaultDomain() + ":deployment=" + mgtConnector.getUniqueId();
+            String baseName = domain + ":deployment=" + mgtConnector.getUniqueId();
 
             if (mgtConnector.getResourceAdapter() != null)
             {

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-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -211,7 +211,9 @@
                                                           uniqueJdbcLocalId, uniqueJdbcXAId,
                                                           dataSources, parent);
 
-         List<ObjectName> onames = registerManagementView(c.getDataSources(), kernel.getMBeanServer());
+         List<ObjectName> onames = registerManagementView(c.getDataSources(),
+                                                          kernel.getMBeanServer(),
+                                                          kernel.getName());
 
          return new DsXmlDeployment(c.getURL(), c.getDeploymentName(),
                                     c.getCfs(), c.getCfJndiNames(),
@@ -365,11 +367,12 @@
     * Register management view of datasources in JMX
     * @param mgtDses The management view of the datasources
     * @param server The MBeanServer instance
+    * @param domain The management domain
     * @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)
+                                                   MBeanServer server, String domain)
       throws JMException
    {
       List<ObjectName> ons = null;
@@ -385,7 +388,7 @@
                if (jndiName.indexOf("/") != -1)
                   jndiName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
 
-               String baseName = server.getDefaultDomain() + ":deployment=" + jndiName;
+               String baseName = domain + ":deployment=" + jndiName;
 
                if (mgtDs.getPoolConfiguration() != null)
                {

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RAActivator.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -273,7 +273,9 @@
 
          CommonDeployment c = createObjectsAndInjectValue(url, deploymentName, root, cl, cmd, ijmd);
 
-         List<ObjectName> ons = registerManagementView(c.getConnector(), kernel.getMBeanServer());
+         List<ObjectName> ons = registerManagementView(c.getConnector(),
+                                                       kernel.getMBeanServer(),
+                                                       kernel.getName());
 
          JndiStrategy jndiStrategy = ((RAConfiguration) getConfiguration()).getJndiStrategy();
          ResourceAdapterRepository resourceAdapterRepository =

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RADeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RADeployer.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RADeployer.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -171,7 +171,9 @@
 
          List<ObjectName> ons = null;
          if (c.isActivateDeployment())
-            ons = registerManagementView(c.getConnector(), kernel.getMBeanServer());
+            ons = registerManagementView(c.getConnector(),
+                                         kernel.getMBeanServer(),
+                                         kernel.getName());
 
          JndiStrategy jndiStrategy = ((RAConfiguration) getConfiguration()).getJndiStrategy();
          MetadataRepository metadataRepository = ((RAConfiguration) getConfiguration()).getMetadataRepository();

Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/RaXmlDeployer.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -284,7 +284,9 @@
 
          List<ObjectName> ons = null;
          if (c.isActivateDeployment())
-            ons = registerManagementView(c.getConnector(), kernel.getMBeanServer());
+            ons = registerManagementView(c.getConnector(),
+                                         kernel.getMBeanServer(),
+                                         kernel.getName());
 
          JndiStrategy jndiStrategy = ((RAConfiguration) getConfiguration()).getJndiStrategy();
          MetadataRepository metadataRepository = ((RAConfiguration) getConfiguration()).getMetadataRepository();

Modified: projects/jboss-jca/trunk/doc/userguide/en-US/modules/embedded.xml
===================================================================
--- projects/jboss-jca/trunk/doc/userguide/en-US/modules/embedded.xml	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/doc/userguide/en-US/modules/embedded.xml	2011-07-18 13:29:24 UTC (rev 111772)
@@ -128,6 +128,10 @@
       <para>IronJacamar Embedded supports both a simple and an advanced usage model, using pre-assembled
         resource adapter archives (.rar) or dynamic resource adapter archives based on ShrinkWrap.</para>
 
+      <para>The embedded environment supports registering resource adapters and datasources in the platform
+        <code>MBeanServer</code> by setting the system property
+        <code>ironjacamar.embedded.management</code> to <code>true</code> before starting the environment.</para>
+
       <section id="embedded_usage_simple">
         <title>Simple usage</title>
 

Modified: projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/EmbeddedJCA.java
===================================================================
--- projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/EmbeddedJCA.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/EmbeddedJCA.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -96,11 +96,16 @@
       order.add("-ra.xml");
       order.add("-ds.xml");
 
+      boolean management = 
+         Boolean.valueOf(SecurityActions.getSystemProperty("ironjacamar.embedded.management", "false"));
+
       KernelConfiguration kernelConfiguration = new KernelConfiguration();
       kernelConfiguration = kernelConfiguration.name("iron.jacamar");
       kernelConfiguration = kernelConfiguration.home(null);
       kernelConfiguration = kernelConfiguration.classLoader(ClassLoaderFactory.TYPE_PARENT_FIRST);
-      kernelConfiguration = kernelConfiguration.management(false);
+      kernelConfiguration = kernelConfiguration.management(management);
+      if (management)
+         kernelConfiguration = kernelConfiguration.usePlatformMBeanServer(true);
       kernelConfiguration = kernelConfiguration.parallelDeploy(false);
       kernelConfiguration = kernelConfiguration.remoteAccess(false);
       kernelConfiguration = kernelConfiguration.hotDeployment(false);

Modified: projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/SecurityActions.java
===================================================================
--- projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/SecurityActions.java	2011-07-18 13:28:15 UTC (rev 111771)
+++ projects/jboss-jca/trunk/embedded/src/main/java/org/jboss/jca/embedded/SecurityActions.java	2011-07-18 13:29:24 UTC (rev 111772)
@@ -55,6 +55,23 @@
    }
 
    /**
+    * Get a system property
+    * @param name The property name
+    * @param value The default property value
+    * @return The property value
+    */
+   static String getSystemProperty(final String name, final String value)
+   {
+      return (String)AccessController.doPrivileged(new PrivilegedAction<Object>() 
+      {
+         public Object run()
+         {
+            return System.getProperty(name, value);
+         }
+      });
+   }
+
+   /**
     * Set a system property
     * @param name The property name
     * @param value The property value



More information about the jboss-cvs-commits mailing list