[jboss-svn-commits] JBL Code SVN: r13809 - in labs/jbossesb/trunk/product/rosetta/src/org/jboss: soa/esb/couriers and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 27 11:35:40 EDT 2007


Author: kevin.conner at jboss.com
Date: 2007-07-27 11:35:40 -0400 (Fri, 27 Jul 2007)
New Revision: 13809

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/CourierFactory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleIdentity.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/AbstractManagedLifecycle.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/ManagedLifecycleController.java
Log:
Rewrite lifecycle identity association: JBESB-760

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/rosetta/pooling/JmsConnectionPoolContainer.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -161,7 +161,7 @@
      * @return The map being removed.
      */
     private static synchronized Map<Map<String, String>, JmsConnectionPool> removePoolMap() {
-        final String lifecycleIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
+        final String lifecycleIdentity = LifecycleIdentity.getSingleton().getLifecycleIdentity() ;
         return poolMaps.remove(lifecycleIdentity) ;
     }
     
@@ -170,7 +170,7 @@
      * @return The pool map or null if not present.
      */
     private static synchronized Map<Map<String, String>, JmsConnectionPool> getPoolMap() {
-        final String lifecycleIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
+        final String lifecycleIdentity = LifecycleIdentity.getSingleton().getLifecycleIdentity() ;
         return poolMaps.get(lifecycleIdentity) ;
     }
     
@@ -179,7 +179,7 @@
      * @return The pool map.
      */
     private static synchronized Map<Map<String, String>, JmsConnectionPool> getOrCreatePoolMap() {
-        final String lifecycleIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
+        final String lifecycleIdentity = LifecycleIdentity.getSingleton().getLifecycleIdentity() ;
         Map<Map<String, String>, JmsConnectionPool> map = poolMaps.get(lifecycleIdentity) ;
         if (map == null)
         {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/CourierFactory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/CourierFactory.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/couriers/CourierFactory.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -179,7 +179,7 @@
          */
         private static synchronized Map<TwoWayCourier, Exception> getMap()
         {
-            final String lifecycleIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
+            final String lifecycleIdentity = LifecycleIdentity.getSingleton().getLifecycleIdentity() ;
             Map<TwoWayCourier, Exception> map = lifecycleCouriers.get(lifecycleIdentity) ;
             if (map == null)
             {
@@ -194,7 +194,7 @@
          */
         private static synchronized Map<TwoWayCourier, Exception> getAndClearMap()
         {
-            final String lifecycleIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
+            final String lifecycleIdentity = LifecycleIdentity.getSingleton().getLifecycleIdentity() ;
             Map<TwoWayCourier, Exception> map = lifecycleCouriers.get(lifecycleIdentity) ;
             final String key ;
             if (map != null)
@@ -231,7 +231,7 @@
             if (couriers.size() > 0)
             {
                 LOGGER.warn("Calling cleanup on existing couriers for identity " +
-                        LifecycleIdentity.getSingleton().getThreadLifecycleIdentity()) ;
+                        LifecycleIdentity.getSingleton().getLifecycleIdentity()) ;
                 final Iterator<Entry<TwoWayCourier, Exception>> entryIter = couriers.entrySet().iterator() ;
                 while(entryIter.hasNext())
                 {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleIdentity.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleIdentity.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleIdentity.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -21,6 +21,10 @@
  */
 package org.jboss.soa.esb.lifecycle;
 
+import java.util.Collections;
+import java.util.Map;
+import java.util.WeakHashMap;
+
 /**
  * Utility to handle lifecycle identities.
  * @author kevin
@@ -33,44 +37,47 @@
     private static final LifecycleIdentity SINGLETON = new LifecycleIdentity() ;
     
     /**
-     * The lifecycle identity associated with the current thread.
+     * The map of classloaders to lifecycle identities.
      */
-    private static final InheritableThreadLocal<String> threadLifecycleIdentiy = new InheritableThreadLocal<String>() ;
+    private static final Map<ClassLoader, String> classLoaderLifecycleIdentity = Collections.synchronizedMap(new WeakHashMap<ClassLoader, String>()) ;
     
     /**
      * The identity counter.
      */
     private long identifyCounter ;
     
-    public String getNextLifecycleIdentity()
+    public String associateLifecycleIdentity()
     {
         final long lifecycleIdentity ;
         synchronized(this)
         {
             lifecycleIdentity = identifyCounter++ ;
         }
-        return "LifecycleIdentity:" + Long.valueOf(lifecycleIdentity) ;
+        final String lifecycleIdentityVal = "LifecycleIdentity:" + Long.valueOf(lifecycleIdentity) ;
+        setLifecycleIdentity(lifecycleIdentityVal) ;
+        return lifecycleIdentityVal ;
     }
     
     /**
-     * Set the lifecycle identity associated with the current thread.
+     * Set the lifecycle identity associated with the current context classloader.
      * @param lifecycleIdentity The lifecycle identity or null to clear.
      */
-    public void setThreadLifecycleIdentity(final String lifecycleIdentity)
+    public void setLifecycleIdentity(final String lifecycleIdentity)
     {
-        threadLifecycleIdentiy.set(lifecycleIdentity) ;
+        final ClassLoader classLoader = Thread.currentThread().getContextClassLoader() ;
+        classLoaderLifecycleIdentity.put(classLoader, lifecycleIdentity) ;
     }
     
     /**
-     * Get the lifecycle identity associated with the current thread.
+     * Get the lifecycle identity associated with the current context classloader.
      * @return The lifecycle identity or null if not set.
      */
-    public String getThreadLifecycleIdentity()
+    public String getLifecycleIdentity()
     {
-        return threadLifecycleIdentiy.get() ;
+        final ClassLoader classLoader = Thread.currentThread().getContextClassLoader() ;
+        return classLoaderLifecycleIdentity.get(classLoader) ;
     }
     
-    
     /**
      * Get the lifecycle identify singleton.
      * @return the lifecycle identity singleton.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/HibernateInterceptor.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -42,7 +42,6 @@
 import org.jboss.soa.esb.couriers.CourierFactory;
 import org.jboss.soa.esb.couriers.CourierUtil;
 import org.jboss.soa.esb.helpers.ConfigTree;
-import org.jboss.soa.esb.lifecycle.LifecycleIdentity;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.ListenerUtil;
 import org.jboss.soa.esb.listeners.RegistryUtil;
@@ -77,8 +76,6 @@
 	protected Collection<EPR> m_targetEprs;
 	protected String m_targetServiceCategory, m_targetServiceName;
         
-        private final String m_activeIdentity ;
-
 	// Event Strings
 	private static final String DELETE_EVENT = "onDelete";
 	private static final String SAVE_EVENT = "onSave";
@@ -98,7 +95,6 @@
 	public HibernateInterceptor(ConfigTree f_config, ArrayList<HibernateEventBean> f_list) throws ManagedLifecycleException {
 		m_config = f_config;
 		m_events = f_list;
-                m_activeIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
 		
         try {
         	m_targetServiceCategory = ListenerUtil.obtainAtt(m_config,
@@ -130,10 +126,7 @@
 	 */
 	private Message createMessage(Object messageObject) {
 		Object obj = null;
-                final LifecycleIdentity lifecycleIdentity = LifecycleIdentity.getSingleton() ;
-                final String currentIdentity = lifecycleIdentity.getThreadLifecycleIdentity() ;
 		try {
-                        lifecycleIdentity.setThreadLifecycleIdentity(m_activeIdentity) ;
 			obj = m_processMethod.invoke(m_composer, new Object[] { messageObject });
 			if (null == obj) {
 				m_logger.error("Action class method <" + m_processMethod
@@ -145,8 +138,6 @@
 			m_logger.error("Error creating message", e);
 		} catch (InvocationTargetException e) {
 			m_logger.error("Error creating message", e);
-		} finally {
-		        lifecycleIdentity.setThreadLifecycleIdentity(currentIdentity) ;
                 }
 		Message message = (Message) obj;
 		return message;
@@ -159,11 +150,8 @@
 	private void deliverMessage(Message message) {
 		Throwable thrown = null;
 		String text = null;
-                final LifecycleIdentity lifecycleIdentity = LifecycleIdentity.getSingleton() ;
-                final String currentIdentity = lifecycleIdentity.getThreadLifecycleIdentity() ;
 
 		try {
-		        lifecycleIdentity.setThreadLifecycleIdentity(m_activeIdentity) ;
 			boolean bSent = false;
 			for (EPR current : m_targetEprs) {
 				m_courier = CourierFactory.getCourier(current);
@@ -194,8 +182,6 @@
 		} catch (IllegalArgumentException e) {
 			thrown = e;
 			text = "Courier <" + m_courier.getClass().getName() + ".deliverAsync(Message) FAILED with IllegalArgumentException.";
-                } finally {
-                        lifecycleIdentity.setThreadLifecycleIdentity(currentIdentity) ;
 		}
 		if (null != thrown) {
 			m_logger.error(text);

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/JBossRemotingGatewayListener.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -42,7 +42,6 @@
 import org.jboss.soa.esb.addressing.EPR;
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.helpers.KeyValuePair;
-import org.jboss.soa.esb.lifecycle.LifecycleIdentity;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.lifecycle.AbstractManagedLifecycle;
 import org.jboss.soa.esb.listeners.lifecycle.ManagedLifecycleException;
@@ -299,10 +298,7 @@
      * @throws Throwable Message processing failure.
      */
     public Object invoke(InvocationRequest invocationRequest) throws Throwable {
-        final LifecycleIdentity lifecycleIdentity = LifecycleIdentity.getSingleton() ;
-        final String currentIdentity = lifecycleIdentity.getThreadLifecycleIdentity() ;
         try {
-            lifecycleIdentity.setThreadLifecycleIdentity(getLifecycleIdentity()) ;
             if (synchronous) {
                 Object response = messageDeliveryAdapter.deliverSync(invocationRequest, 20000); // TODO Fix magic number
                 if(logger.isDebugEnabled()) {
@@ -318,8 +314,6 @@
                     messageDeliveryAdapter.getDeliveryAdapter().getServiceName() + "].", t);
 
             throw t;
-        } finally {
-            lifecycleIdentity.setThreadLifecycleIdentity(currentIdentity) ;
         }
 
         return "<ack/>";

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/jca/JcaInflowGateway.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -29,7 +29,6 @@
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.services.registry.RegistryException;
 import org.jboss.soa.esb.helpers.ConfigTree;
-import org.jboss.soa.esb.lifecycle.LifecycleIdentity;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.ListenerUtil;
 import org.jboss.soa.esb.listeners.ServiceInvoker;
@@ -193,11 +192,8 @@
 
          public Object invoke(Method method, Object[] args) throws Throwable
          {
-            final LifecycleIdentity lifecycleIdentity = LifecycleIdentity.getSingleton() ;
-            final String currentIdentity = lifecycleIdentity.getThreadLifecycleIdentity() ;
             try
             {
-               lifecycleIdentity.setThreadLifecycleIdentity(getLifecycleIdentity()) ;
                return method.invoke(theBean, args);
             }
             catch (IllegalAccessException e)
@@ -208,10 +204,6 @@
             {
                throw e.getTargetException();
             }
-            finally
-            {
-               lifecycleIdentity.setThreadLifecycleIdentity(currentIdentity) ;
-            }
          }
 
          public boolean isDeliveryTransacted(Method method) throws NoSuchMethodException

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/AbstractManagedLifecycle.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/AbstractManagedLifecycle.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/AbstractManagedLifecycle.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -34,7 +34,6 @@
 import org.apache.log4j.Logger;
 import org.jboss.soa.esb.ConfigurationException;
 import org.jboss.soa.esb.helpers.ConfigTree;
-import org.jboss.soa.esb.lifecycle.LifecycleIdentity;
 
 /**
  * This class represents the lifecycle for a managed instance.
@@ -78,10 +77,6 @@
      * Instance configuration.  Supplied through constructor.
      */
     private final ConfigTree config;
-    /**
-     * The identity of the lifecycle we are attached to.
-     */
-    private final String lifecycleIdentity ;
 
     /**
      * Lifecycle controller for this lifecycle.
@@ -117,8 +112,6 @@
 
         this.config = config;
        
-        lifecycleIdentity = LifecycleIdentity.getSingleton().getThreadLifecycleIdentity() ;
-        
         lifecycleController = new LifecycleController(this, config);
         lifecycleController.registerMBean();
     }
@@ -484,13 +477,4 @@
     {
         return config;
     }
-    
-    /**
-     * Get the lifecycle identity we are attached to.
-     * @return The lifecycle identity.
-     */
-    protected String getLifecycleIdentity()
-    {
-        return lifecycleIdentity ;
-    }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/ManagedLifecycleController.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/ManagedLifecycleController.java	2007-07-27 15:16:11 UTC (rev 13808)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/lifecycle/ManagedLifecycleController.java	2007-07-27 15:35:40 UTC (rev 13809)
@@ -64,7 +64,8 @@
       } else {
           instances = lifecycles.toArray(new ManagedLifecycle[lifecycles.size()]);
       }
-      lifecycleIdentity = LifecycleIdentity.getSingleton().getNextLifecycleIdentity() ;
+      lifecycleIdentity = LifecycleIdentity.getSingleton().associateLifecycleIdentity() ;
+      
       CourierFactory.initialiseLifecycleIdentityMap(lifecycleIdentity) ;
    }
 
@@ -78,23 +79,15 @@
    public void start()
            throws ManagedLifecycleException
    {
-      final LifecycleIdentity lifecycleIdentitySingleton = LifecycleIdentity.getSingleton() ;
-      final String currentIdentity = lifecycleIdentitySingleton.getThreadLifecycleIdentity() ;
-
-      try
-      {
-         lifecycleIdentitySingleton.setThreadLifecycleIdentity(lifecycleIdentity) ;
-         initialiseInstances();
-         startInstances();
+      initialiseInstances();
+      startInstances();
+      try {
          if(scheduleProvider != null) {
              scheduleProvider.start();
          }
       } catch (SchedulingException e) {
-          stopInstances();
+          stopAndDestroy(false);
           throw new ManagedLifecycleException("Failed to start schedule provider.", e);
-      } finally
-      {
-         lifecycleIdentitySingleton.setThreadLifecycleIdentity(currentIdentity) ;
       }
    }
 
@@ -107,24 +100,24 @@
     */
    public void restart() throws ManagedLifecycleException
    {
-      final LifecycleIdentity lifecycleIdentitySingleton = LifecycleIdentity.getSingleton() ;
-      final String currentIdentity = lifecycleIdentitySingleton.getThreadLifecycleIdentity() ;
       try
       {
           if(scheduleProvider != null) {
               scheduleProvider.standby();
           }
-         lifecycleIdentitySingleton.setThreadLifecycleIdentity(lifecycleIdentity) ;
-         stopInstances();
-         startInstances();
+      } catch (SchedulingException e) {
+          stopAndDestroy(false);
+          throw new ManagedLifecycleException("Failed to put schedule provider into standby.", e);
+      }
+      stopInstances();
+      startInstances();
+      try {
           if(scheduleProvider != null) {
               scheduleProvider.start();
-          }
+         }
       } catch (SchedulingException e) {
-          stopInstances();
+          stopAndDestroy(false);
           throw new ManagedLifecycleException("Failed to restart schedule provider.", e);
-      } finally {
-         lifecycleIdentitySingleton.setThreadLifecycleIdentity(currentIdentity) ;
       }
    }
 
@@ -137,10 +130,12 @@
     */
    public void stop() throws ManagedLifecycleException
    {
-      final LifecycleIdentity lifecycleIdentitySingleton = LifecycleIdentity.getSingleton() ;
-      final String currentIdentity = lifecycleIdentitySingleton.getThreadLifecycleIdentity() ;
       try
       {
+          stopAndDestroy(true) ;
+      }
+      finally
+      {
           if(scheduleProvider != null) {
               try {
                   scheduleProvider.stop();
@@ -148,27 +143,7 @@
                   logger.error("Failed to stop scheduling.", e);
               }
           }
-         lifecycleIdentitySingleton.setThreadLifecycleIdentity(lifecycleIdentity) ;
-         stopInstances();
-         destroyInstances();
-
-         // Cleanup resources.
-         CourierFactory.releaseCouriers() ;
-         CourierFactory.destroyLifecycleIdentityMap(lifecycleIdentity) ;
-         try
-         {
-            JmsConnectionPoolContainer.removeAllPools() ;
-         }
-         catch (final JMSException jmse)
-         {
-            throw new ManagedLifecycleException("Unexpected exception clearing JMS pools", jmse) ;
-         }
-         NamingContext.closeAllContexts();
       }
-      finally
-      {
-         lifecycleIdentitySingleton.setThreadLifecycleIdentity(currentIdentity) ;
-      }
    }
 
    /**
@@ -193,6 +168,7 @@
             {
                destroyInstances(count - 1);
             }
+            cleanupResources() ;
             throw mle;
          }
       }
@@ -221,6 +197,7 @@
                stopInstances(count - 1);
                destroyInstances(numInstances - 1);
             }
+            cleanupResources() ;
             throw mle;
          }
       }
@@ -249,6 +226,7 @@
                stopInstances(count - 1);
                destroyInstances(numInstances - 1);
             }
+            cleanupResources() ;
             throw mle;
          }
       }
@@ -263,22 +241,29 @@
            throws ManagedLifecycleException
    {
       final int numInstances = instances.length;
-      for (int count = numInstances - 1; count >= 0; count--)
+      try
       {
-         final ManagedLifecycle instance = instances[count];
-         try
-         {
-            instance.destroy();
-         }
-         catch (final ManagedLifecycleException mle)
-         {
-            if (count > 0)
-            {
-               destroyInstances(count - 1);
-            }
-            throw mle;
-         }
+          for (int count = numInstances - 1; count >= 0; count--)
+          {
+             final ManagedLifecycle instance = instances[count];
+             try
+             {
+                instance.destroy();
+             }
+             catch (final ManagedLifecycleException mle)
+             {
+                if (count > 0)
+                {
+                   destroyInstances(count - 1);
+                }
+                throw mle;
+             }
+          }
       }
+      finally
+      {
+          cleanupResources() ;
+      }
    }
 
    /**
@@ -287,7 +272,6 @@
     * @param firstInstance The index of the first instance to stop
     */
    private void stopInstances(final int firstInstance)
-           throws ManagedLifecycleException
    {
       for (int count = firstInstance; count >= 0; count--)
       {
@@ -308,7 +292,6 @@
     * @param firstInstance The index of the first instance to stop
     */
    private void destroyInstances(final int firstInstance)
-           throws ManagedLifecycleException
    {
       for (int count = firstInstance; count >= 0; count--)
       {
@@ -321,7 +304,49 @@
          {
          } // Ignore exception
       }
+      cleanupResources() ;
    }
+   
+   /**
+    * Stop and destroy all lifecycles, cleaning up resources.
+    * @param throwExceptions true if exceptions can be throw, false otherwise.
+    */
+   private void stopAndDestroy(final boolean throwExceptions)
+       throws ManagedLifecycleException
+   {
+       if (throwExceptions)
+       {
+           stopInstances() ;
+           destroyInstances() ;
+       }
+       else
+       {
+           final int numInstances = instances.length;
+           stopInstances(numInstances-1) ;
+           destroyInstances(numInstances-1) ;
+       }
+   }
+   
+   /**
+    * Cleanup resources associated with this lifecycle controller.
+    */
+   private void cleanupResources()
+   {
+       CourierFactory.releaseCouriers() ;
+       CourierFactory.destroyLifecycleIdentityMap(lifecycleIdentity) ;
+       try
+       {
+          JmsConnectionPoolContainer.removeAllPools() ;
+       }
+       catch (final JMSException jmse)
+       {
+           if (logger.isDebugEnabled())
+           {
+               logger.debug("Unexpected exception clearing JMS pools", jmse) ;
+           }
+       }
+       NamingContext.closeAllContexts();
+   }
 
     public void setScheduleProvider(ScheduleProvider scheduleProvider) {
         this.scheduleProvider = scheduleProvider;




More information about the jboss-svn-commits mailing list