toUndeploy.add(deploymentControllerContext);
}
}
// Go through the states in reverse order
ControllerStateModel states = controller.getStates();
ListIterator<ControllerState> iter = states.listIteraror();
while (iter.hasPrevious())
{
ControllerState state = iter.previous();
for (DeploymentControllerContext deploymentControllerContext : toUndeploy)
{
ControllerState current = deploymentControllerContext.getState();
if (ControllerState.ERROR.equals(current) == false && states.isAfterState(current, state))
{
DeploymentContext context = deploymentControllerContext.getDeploymentContext();
try
{
controller.change(deploymentControllerContext, state);
}
catch (Throwable t)
{
log.warn("Error during undeploy", t);
context.setState(DeploymentState.ERROR);
context.setProblem(t);
}
}
else
{
if (trace)
log.trace("Not moving " + deploymentControllerContext + " to state " + state + " it is at " + current);
}
}
}
// Uninstall the contexts
for (DeploymentControllerContext deploymentControllerContext : toUndeploy)
{
DeploymentContext context = deploymentControllerContext.getDeploymentContext();
context.getTransientAttachments().removeAttachment(ControllerContext.class);
try
{
controller.uninstall(deploymentControllerContext.getName());
setState(context, DeploymentState.UNDEPLOYED, null);
// This is now in the abstract classloader deployer.undeploy,
// but left here in case somebody isn't using that.
unregisterMBean(context);
removeClassLoader(context);
cleanup(context);
log.debug("Fully Undeployed " + context.getName());
}
catch (Throwable t)
{
log.warn("Error during uninstall", t);
context.setState(DeploymentState.ERROR);
context.setProblem(t);
}
}
}
// There is something to deploy
if (deploy != null && deploy.isEmpty() == false)
{
// Create the controller contexts
for (DeploymentContext context : deploy)
{
checkShutdown();
DeploymentControllerContext deploymentControllerContext = new DeploymentControllerContext(context, this);
context.getTransientAttachments().addAttachment(ControllerContext.class, deploymentControllerContext);
try
{
controller.install(deploymentControllerContext);
context.setState(DeploymentState.DEPLOYING);
log.debug("Deploying " + context.getName());
if (scopeBuilder != null)
context.getTransientAttachments().addAttachment(ScopeBuilder.class, scopeBuilder);
if (repository != null)
context.getTransientAttachments().addAttachment(MutableMetaDataRepository.class, repository);
registerMBean(context);
}
catch (Throwable t)
{
// Set the error on the parent
context.setState(DeploymentState.ERROR);
context.setProblem(t);
// Set the children to not deployed
setState(context, DeploymentState.UNDEPLOYED, DeploymentState.DEPLOYING);
unregisterMBean(context);
}
}
// Go through the states in order
ControllerStateModel states = controller.getStates();
for (ControllerState state : states)
{
for (DeploymentContext context : deploy)
{
DeploymentControllerContext deploymentControllerContext = context.getTransientAttachments().getAttachment(ControllerContext.class.getName(), DeploymentControllerContext.class);
ControllerState current = deploymentControllerContext.getState();
if (ControllerState.ERROR.equals(current) == false && states.isBeforeState(current, state) && current.getStateString().equals(context.getRequiredStage().getName()) == false)
{
checkShutdown();
try
{
controller.change(deploymentControllerContext, state);