[jboss-svn-commits] JBL Code SVN: r38145 - in labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta: tests/src/org/jboss/soa/esb/lifecycle and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 19 10:23:13 EDT 2012


Author: kevin.conner at jboss.com
Date: 2012-07-19 10:23:13 -0400 (Thu, 19 Jul 2012)
New Revision: 38145

Modified:
   labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResource.java
   labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java
   labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/tests/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManagerUnitTest.java
Log:
Allow lifecycle resources to be resused after MC redeploy: JBESB-3833

Modified: labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResource.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResource.java	2012-07-19 03:16:18 UTC (rev 38144)
+++ labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResource.java	2012-07-19 14:23:13 UTC (rev 38145)
@@ -56,6 +56,11 @@
     private ReadWriteLock lifecycleResourceLock = new ReentrantReadWriteLock() ;
     
     /**
+     * The lifecycle resource ClassLoader
+     */
+    private final ClassLoader resourceClassLoader ;
+
+    /**
      * The destroyed flag.
      */
     private boolean destroyed ;
@@ -68,7 +73,8 @@
     public LifecycleResource(final LifecycleResourceFactory<R> factory, final int priority)
     {
         this.factory = factory ;
-        LifecycleResourceManager.getSingleton().registerResource(this, factory.getClass().getClassLoader(), priority) ;
+        resourceClassLoader = factory.getClass().getClassLoader() ;
+        LifecycleResourceManager.getSingleton().registerResource(this, resourceClassLoader, priority) ;
     }
     
     /**
@@ -78,7 +84,8 @@
     public LifecycleResource(final LifecycleResourceFactory<R> factory)
     {
         this.factory = factory ;
-        LifecycleResourceManager.getSingleton().registerResource(this, factory.getClass().getClassLoader()) ;
+        resourceClassLoader = factory.getClass().getClassLoader() ;
+        LifecycleResourceManager.getSingleton().registerResource(this, resourceClassLoader) ;
     }
     
     /**
@@ -88,7 +95,8 @@
     public R getLifecycleResource()
         throws LifecycleResourceException
     {
-        final String identity = LifecycleResourceManager.getSingleton().getIdentity() ;
+        final LifecycleResourceManager lifecycleResourceManager = LifecycleResourceManager.getSingleton() ;
+        final String identity = lifecycleResourceManager.getIdentity() ;
         final Lock readLock = lifecycleResourceLock.readLock() ;
         readLock.lock() ;
         try
@@ -108,9 +116,9 @@
         writeLock.lock() ;
         try
         {
-            if (destroyed)
+            if (destroyed && !lifecycleResourceManager.isActive(resourceClassLoader))
             {
-                throw new LifecycleResourceException("Resource already destroyed") ;
+                throw new LifecycleResourceException("Resource no longer Active") ;
             }
             final R resource = lifecycleResourceMap.get(identity) ;
             if (resource != null)

Modified: labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java	2012-07-19 03:16:18 UTC (rev 38144)
+++ labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java	2012-07-19 14:23:13 UTC (rev 38145)
@@ -180,6 +180,26 @@
     }
 
     /**
+     * Is the lifecycle ClassLoader active?
+     * @param resourceClassLoader The lifecycle resource ClassLoader
+     * @return
+     */
+    public boolean isActive(final ClassLoader resourceClassLoader)
+    {
+        final Lock readLock = deploymentLock.readLock() ;
+        readLock.lock() ;
+        try
+        {
+            final Set<String> currentAssociations = associatedDeployments.get(resourceClassLoader) ;
+            return ((currentAssociations != null) && (currentAssociations.size() > 0)) ;
+        }
+        finally
+        {
+            readLock.unlock() ;
+        }
+    }
+
+    /**
      * Disassociate the current thread with a specified deployment.
      * @param deploymentName The deployment name.
      */

Modified: labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/tests/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManagerUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/tests/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManagerUnitTest.java	2012-07-19 03:16:18 UTC (rev 38144)
+++ labs/jbossesb/branches/JBESB_4_11_CP/product/rosetta/tests/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManagerUnitTest.java	2012-07-19 14:23:13 UTC (rev 38145)
@@ -112,6 +112,53 @@
         assertEquals(resource2, TestLifecycleResource2Factory.getDestroyOrder().get(2)) ;
     }
     
+    @Test
+    public void testReassociation() 
+        throws Exception
+    {
+        final String deploymentName = "deploymentName" ;
+        
+        // create a lifecycle resource
+        final LifecycleResource<TestLifecycleResource1> resource = new LifecycleResource<TestLifecycleResource1>(new TestLifecycleResource1Factory()) ;
+        // get unassociated resource and check id
+        final TestLifecycleResource1 first = resource.getLifecycleResource() ;
+        assertEquals(LifecycleResourceManager.DEFAULT_IDENTITY, first.getId()) ;
+        
+        // associate deployment
+        LifecycleResourceManager.getSingleton().associateDeployment(deploymentName) ;
+        // get associated resource and check id
+        final TestLifecycleResource1 second = resource.getLifecycleResource() ;
+        final String secondId = second.getId() ;
+        assertNull(second.getDestroyId()) ;
+        assertFalse(LifecycleResourceManager.DEFAULT_IDENTITY.equals(secondId)) ;
+        
+        // disassociate deployment
+        LifecycleResourceManager.getSingleton().disassociateDeployment(deploymentName) ;
+        // check id has been cleaned
+        assertEquals(secondId, second.getDestroyId()) ;
+
+        // get unassociated resource and check id
+        final TestLifecycleResource1 third = resource.getLifecycleResource() ;
+        assertEquals(LifecycleResourceManager.DEFAULT_IDENTITY, third.getId()) ;
+
+        // associate deployment
+        LifecycleResourceManager.getSingleton().associateDeployment(deploymentName) ;
+        // get associated resource and check id
+        final TestLifecycleResource1 fourth = resource.getLifecycleResource() ;
+        final String fourthId = fourth.getId() ;
+        assertNull(fourth.getDestroyId()) ;
+        assertFalse(LifecycleResourceManager.DEFAULT_IDENTITY.equals(fourthId)) ;
+        
+        // disassociate deployment
+        LifecycleResourceManager.getSingleton().disassociateDeployment(deploymentName) ;
+        // check id has been cleaned
+        assertEquals(fourthId, fourth.getDestroyId()) ;
+        
+        // check resources are eventually cleaned up.
+        LifecycleResourceManager.getSingleton().cleanupAllResources() ;
+        assertEquals(LifecycleResourceManager.DEFAULT_IDENTITY, first.getDestroyId()) ;
+    }
+    
     private static class TestLifecycleResource1
     {
         private final String id ;



More information about the jboss-svn-commits mailing list