[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