AbstractDeploymentClassLoaderPolicyModule is missing reset
alesj Nov 28, 2008 3:33 PMDeployers's AbstractDeploymentClassLoaderPolicyModule is not removing alias if one was added at AbstractDeploymentClassLoaderPolicyModule construction.
I've added the following code:
public abstract class AbstractDeploymentClassLoaderPolicyModule extends ClassLoaderPolicyModule
@@ -64,12 +66,14 @@
* Determine the classloading metadata for the deployment unit
*
* @param unit the deployment unit
+ * @param addAlias should we add alias or remove
* @return the classloading metadata
*/
- private static String determineContextName(DeploymentUnit unit)
+ private static String determineContextName(DeploymentUnit unit, boolean addAlias)
{
if (unit == null)
throw new IllegalArgumentException("Null unit");
+
ControllerContext context = unit.getTopLevel().getAttachment(ControllerContext.class);
if (context == null)
throw new IllegalStateException("Deployment has no controller context");
@@ -83,13 +87,21 @@
Set<Object> aliases = context.getAliases();
if (aliases != null && aliases.contains(contextName) == false)
{
- try
+ Controller controller = context.getController();
+ if (addAlias)
{
- context.getController().addAlias(contextName, context.getName());
+ try
+ {
+ controller.addAlias(contextName, context.getName());
+ }
+ catch (Throwable t)
+ {
+ throw new RuntimeException("Error adding deployment alias " + contextName + " to " + context, t);
+ }
}
- catch (Throwable t)
+ else
{
- throw new RuntimeException("Error adding deployment alias " + contextName + " to " + context, t);
+ controller.removeAlias(contextName);
}
}
}
@@ -105,7 +117,7 @@
*/
public AbstractDeploymentClassLoaderPolicyModule(DeploymentUnit unit)
{
- super(determineClassLoadingMetaData(unit), determineContextName(unit));
+ super(determineClassLoadingMetaData(unit), determineContextName(unit, true));
this.unit = unit;
ControllerContext context = unit.getTopLevel().getAttachment(ControllerContext.class);
setControllerContext(context);
@@ -126,4 +138,11 @@
{
return CLASSLOADER_STATE;
}
+
+ @Override
+ public void reset()
+ {
+ super.reset();
+ determineContextName(unit, false);
+ }
}
Should this be part of new release for JBoss5 GA?
I still need to write some tests, checking if it was successfully removed from Controller (in case it was added).