Package org.jboss.soa.bpel.deployer.as5

Source Code of org.jboss.soa.bpel.deployer.as5.AS5BPELDeployer

/*
* JBoss, Home of Professional Open Source
* Copyright 2009, Red Hat Middleware LLC, and others contributors as indicated
* by the @authors tag. All rights reserved.
* See the copyright.txt in the distribution for a
* full listing of individual contributors.
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License, v. 2.1.
* This program is distributed in the hope that it will be useful, but WITHOUT A
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public License,
* v.2.1 along with this distribution; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA  02110-1301, USA.
*/
package org.jboss.soa.bpel.deployer.as5;

import org.jboss.deployers.spi.DeploymentException;
import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer;
import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.deployers.vfs.spi.structure.VFSDeploymentUnit;

import org.jboss.logging.Logger;
import org.jboss.soa.bpel.deployer.BPELDeployer;
import org.jboss.soa.bpel.deployer.BPELDeployerFactory;
import org.jboss.soa.bpel.deployer.BPELDeploymentListener;
import org.jboss.soa.bpel.deployer.BPELDeploymentUnit;
import org.jboss.virtual.VFSUtils;
import org.jboss.virtual.VirtualFile;

/**
* This is the deployer for deploying BPEL (and associated artifacts) into
* the runtime.
*
* @author gbrown
*
*/
public class AS5BPELDeployer extends AbstractDeployer implements BPELDeployer {
 
  private final static Logger logger = Logger.getLogger(AS5BPELDeployer.class);

  private BPELDeploymentListener m_listener=null;
  private java.util.Map<String, BPELDeploymentUnit> m_deploymentUnits=
          new java.util.HashMap<String, BPELDeploymentUnit>();
 
  public AS5BPELDeployer() {
    BPELDeployerFactory.setInstance(this);
  }

  public void deploy(DeploymentUnit du) throws DeploymentException {
       
    if (du instanceof VFSDeploymentUnit &&
          (du.getSimpleName().equals(BPELDeploymentUnit.DEPLOY_XML) ||
              du.getSimpleName().equals(BPELDeploymentUnit.BPEL_DEPLOY_XML))) {   
      DeploymentUnit top=du;
     
      if (top.isTopLevel() == false) {
        top = du.getTopLevel();
      }
     
      logger.info("Deploy: "+top.getSimpleName()+" relativePath="+
          du.getRelativePath());
     
      VirtualFile root=((VFSDeploymentUnit)du).getRoot();
     
      logger.debug("Deployment descriptor file="+root);

      try {
        VirtualFile parent=((VFSDeploymentUnit)du).getRoot().getParent();
       
        logger.debug("Deployment unit dir="+parent);
     
        VirtualFile tmp=VFSUtils.explode(parent);
       
        java.net.URL url=VFSUtils.getCompatibleURL(tmp);
       
        logger.debug("Deployment exploded to dir="+tmp+" URL="+url);

        long lastModTime=0;
       
        if (top instanceof VFSDeploymentUnit) {
          lastModTime = ((VFSDeploymentUnit)top).getRoot().getLastModified();
        } else {
          logger.warn("Unable to determine last modified time for: "+top);
        }
       
        // TODO: Need to be a more unique name, as it is possible that more
        // than one deployment descriptor may exist in the same AS archive
        BPELDeploymentUnit unit=new BPELDeploymentUnit(top.getSimpleName(), lastModTime);
       
        java.io.File ddfile=new java.io.File(url.getFile(), du.getSimpleName()); //BPELDeploymentUnit.BPEL_DEPLOY_XML);
       
        if (ddfile.exists() == false) {
          logger.error("Failed to deploy '"+ddfile+
              "', unable to locate deployment descriptor file");
        } else {
          unit.setDeploymentDescriptor(ddfile);
         
          synchronized(m_deploymentUnits) {
            m_deploymentUnits.put(unit.getName(), unit);
           
            if (m_listener != null) {
              m_listener.deploy(unit);
            }
          }
        }

      } catch (Exception e) {
        throw new DeploymentException("Failed to explode deployment unit '"+root+"'", e);
      }     
    }
  }
 
  @Override
  public void undeploy(DeploymentUnit du) {
   
    if (du instanceof VFSDeploymentUnit &&
        (du.getSimpleName().equals(BPELDeploymentUnit.DEPLOY_XML) ||
            du.getSimpleName().equals(BPELDeploymentUnit.BPEL_DEPLOY_XML))) {   
      DeploymentUnit top=du;
     
      if (top.isTopLevel() == false) {
        top = du.getTopLevel();
      }
     
      logger.info("Undeploy: "+top.getSimpleName()+" relativePath="+
          du.getRelativePath());
     
      try {
        BPELDeploymentUnit prev=m_deploymentUnits.get(top.getSimpleName());
       
        // Undeploy if deployment unit no longer exists on the filesystem, OR
        // the last modified time of the cached deployment unit is older than
        // the last modified time of the current deployment unit, signifying
        // it has been updated and therefore must be undeployed first
        if (top instanceof VFSDeploymentUnit &&
            (((VFSDeploymentUnit)top).getRoot().exists() == false ||
                (prev != null && prev.getLastModified() <
                  ((VFSDeploymentUnit)top).getRoot().getLastModified()))) {
     
          // TODO: Unique name - see deploy
          BPELDeploymentUnit unit=new BPELDeploymentUnit(top.getSimpleName(), 0);
         
          // NOTE: File required to provide path for use in ODE
          // process store impl. When this is replaced, this information
          // will not be required.
          java.io.File ddfile=new java.io.File(((VFSDeploymentUnit)du).getRoot().toURL().getFile());
         
          unit.setDeploymentDescriptor(ddfile);

          synchronized(m_deploymentUnits) {
            m_deploymentUnits.remove(unit.getName());
           
            if (m_listener != null) {
              m_listener.undeploy(unit);
            }
          }
        } else {
          logger.info("Not undeploying BPEL: "+top.getSimpleName()+" relativePath="+
              du.getRelativePath());
        }
      } catch(Exception e) {
        logger.error("Failed to undeploy '"+du+"'", e);
      }
    }
  }

  /**
   * This method sets the deployment listener that will be
   * informed when BPEL deployment units are detected.
   *
   * @param l The BPEL deployment listener
   */
  public void setDeploymentListener(BPELDeploymentListener l) {
   
    logger.debug("Set deployment listener: "+l);
   
    synchronized(m_deploymentUnits) {
      m_listener = l;
   
      // Notify listener of the currently deployed units
      java.util.Iterator<BPELDeploymentUnit> iter=m_deploymentUnits.values().iterator();
      while (iter.hasNext()) {
        l.deploy(iter.next());
      }
    }
  }
}
TOP

Related Classes of org.jboss.soa.bpel.deployer.as5.AS5BPELDeployer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.