ProfileService DeploymentManager in 5.x

    Overview

    The DeploymentManager is a client-side plugin for distributing and controlling deployments in a profile.

     

    Compared to the DeploymentManager in 5.0.x there are some differences:

    • The DeploymentPhase has been removed.

    • The usage is now symmetric independent of the boolean isCopyContent flag.

    • loadProfile(ProfileKey key) is not required to be able use the DeploymentManager.

      Not loading a profile will copy the deployment to the default location specified in deploy/profileservice-jboss-beans.xml

    In general loadProfile specifies the target profile. A set of profiles which support deployment actions can be obtained using deployMgr.getProfiles(). Not loading a profile or deployMgr.loadProfile(new ProfileKey(ProfileKey.DEFAULT)); is recommended.

    Example Usage
    import java.net.URL;
    
    import javax.naming.InitialContext;
    
    import org.jboss.deployers.spi.management.deploy.DeploymentManager;
    import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
    import org.jboss.deployers.spi.management.deploy.DeploymentStatus;
    import org.jboss.profileservice.spi.ProfileService;
    
    public class DeploymentTest
    {
        
        public void deployAndUndeploy(String deploymentName, URL deploymentURL) throws Exception
        {
            DeploymentManager deployMgr = getDeploymentManager();
            if(deployMgr == null)
                throw new IllegalStateException("Null deployment manager.");
    
            String[] repositoryNames = null;
            // Distribute a zipped file
            DeploymentProgress distribute = deployMgr.distribute(deploymentName, deploymentURL, true);
            // Run
            distribute.run();
            // Check if the deploy failed
            checkFailed(distribute);
            
            // Get the deployed names
            repositoryNames = distribute.getDeploymentID().getRepositoryNames();
            
            // Start the deployment
            DeploymentProgress start = deployMgr.start(repositoryNames);
            // Run
            start.run();
            //
            checkFailed(start);
            
            // Stop the deployment
            DeploymentProgress stop = deployMgr.stop(repositoryNames);
            // Run
            stop.run();
            // 
            checkFailed(stop);            
            
            // Remove the deployment
            DeploymentProgress remove = deployMgr.remove(repositoryNames);
            // Run
            remove.run();
            // 
            checkFailed(remove);
        }
        
        void checkFailed(DeploymentProgress progress) throws Exception
        {
            DeploymentStatus status = progress.getDeploymentStatus();
            if(status.isFailed())
                throw new RuntimeException("Failed to deploy", status.getFailure());
        }
        
        DeploymentManager getDeploymentManager() throws Exception
        {
            ProfileService ps = getProfileService();
            return ps.getDeploymentManager();
        }
        
        ProfileService getProfileService() throws Exception
        {
            InitialContext ctx = getInitialContext();
            return (ProfileService) ctx.lookup("ProfileService");
        }
        
        InitialContext getInitialContext() throws Exception
        {
            return new InitialContext();
        }
    }
    

     

    The main operations basically are:

    • distribute - distribute a deployment.
      The boolean flag isCopyContent indicates if the content should be copied in the applications directory.
      Furthermore this will 'lock' the deployment, so it won't get deployed by the hot-deployment scanner.
      Note: if isCopyContent is true, a zipped file is expected. Copying a directory is currently not supported.

    • start
      starts the application on the server and enables hot-deployment checking for this deployment.

    • redeploy
      stops and starts the application without modifying any of the deployment contents.
    • stop
      only stops the application on the server, without deleting the file.

    • remove
      removes the deployment from the file system.

     

    Note that DeploymentProgress.run() does not throw server side Exceptions. Errors during the deployment progress are passed to the DeploymentStatus and should be checked after each operation.