[jboss-dev-forums] [Design the new POJO MicroContainer] - fixing AbstractComponentDeployer

alesj do-not-reply at jboss.com
Fri May 30 07:40:26 EDT 2008


I did a couple of small fixes to AbstractComponentDeployer.
I'll comment my changes on the svn diff

  |     public void internalDeploy(DeploymentUnit unit) throws DeploymentException
  |     {
  |        super.internalDeploy(unit);
  | 
  |        try
  |        {
  |           deployComponents(unit);
  |        }
  |        catch (Throwable t)
  |        {
  | // we need to unwind the super too
  | // the actual component unwinding is done 
  | // at the point of failure
  | -         undeployComponents(unit);
  | +         super.internalUndeploy(unit);
  |           throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t);
  |        }
  |     }
  |     
  |     public void internalUndeploy(DeploymentUnit unit)
  |     {
  | // make it asymetric
  | -      super.internalUndeploy(unit);
  |        undeployComponents(unit);
  | +      super.internalUndeploy(unit);
  |     }
  |  
  |     protected void deployComponents(DeploymentUnit unit) throws DeploymentException
  | @@ -100,9 +101,7 @@
  |        if (compVisitor == null)
  |           return;
  | 
  | // this now uses extracted super method - see below
  | -      Set<? extends C> components = unit.getAllMetaData(getOutput());
  | -      for (C component : components)
  | -         compVisitor.deploy(unit, component);
  | +      deploy(unit, compVisitor);
  |     }
  | 
The extracted deploy method - for both, deployment and components:

  |    protected <U> void deploy(DeploymentUnit unit, DeploymentVisitor<U> visitor) throws DeploymentException
  |    {
  |       List<U> visited = new ArrayList<U>();
  |       try
  |       {
  |          Set<? extends U> deployments = unit.getAllMetaData(visitor.getVisitorType());
  |          for (U deployment : deployments)
  |          {
  |             visitor.deploy(unit, deployment);
  |             visited.add(deployment);
  |          }
  |       }
  |       catch (Throwable t)
  |       {
  |          for (int i = visited.size()-1; i >= 0; --i)
  |          {
  |             try
  |             {
  |                visitor.undeploy(unit, visited.get(i));
  |             }
  |             catch (Throwable ignored)
  |             {
  |                log.warn("Error during undeploy: " + unit.getName(), ignored);
  |             }
  |          }
  |          throw DeploymentException.rethrowAsDeploymentException("Error deploying: " + unit.getName(), t);
  |       }
  |    }
  | 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4154594#4154594

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4154594



More information about the jboss-dev-forums mailing list