/* * JBoss, Home of Professional Open Source * Copyright 2009, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.as.controller.client.helpers.standalone; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Future; import org.jboss.as.controller.client.ModelControllerClient; /** * A simple helper for server deployments. * * @author thomas.diesler@jboss.com * @since 22-Mar-2012 */ public class ServerDeploymentHelper { private final ServerDeploymentManager deploymentManager; public ServerDeploymentHelper(ModelControllerClient client) { deploymentManager = ServerDeploymentManager.Factory.create(client); } public ServerDeploymentHelper(ServerDeploymentManager deploymentManager) { this.deploymentManager = deploymentManager; } public String deploy(String runtimeName, InputStream input) throws ServerDeploymentException { ServerDeploymentPlanResult planResult; List<DeploymentAction> actions = new ArrayList<DeploymentAction>(); try { DeploymentPlanBuilder builder = deploymentManager.newDeploymentPlan(); AddDeploymentPlanBuilder addBuilder = builder.add(runtimeName, input); actions.add(addBuilder.getLastAction()); builder = addBuilder.andDeploy(); actions.add(builder.getLastAction()); DeploymentPlan plan = builder.build(); Future<ServerDeploymentPlanResult> future = deploymentManager.execute(plan); planResult = future.get(); } catch (Exception ex) { throw new ServerDeploymentException(ex); } for (DeploymentAction action : actions) { ServerDeploymentActionResult actionResult = planResult.getDeploymentActionResult(action.getId()); if (actionResult.getDeploymentException() != null) throw new ServerDeploymentException(actionResult); } return runtimeName; } public String replace(String runtimeName, String replaceName, InputStream input, boolean removeUndeployed) throws ServerDeploymentException { ServerDeploymentPlanResult planResult; List<DeploymentAction> actions = new ArrayList<DeploymentAction>(); try { DeploymentPlanBuilder builder = deploymentManager.newDeploymentPlan(); AddDeploymentPlanBuilder addBuilder = builder.add(runtimeName, input); actions.add(addBuilder.getLastAction()); ReplaceDeploymentPlanBuilder replaceBuilder = addBuilder.andReplace(replaceName); actions.add(replaceBuilder.getLastAction()); if (removeUndeployed) { builder = replaceBuilder.andRemoveUndeployed(); actions.add(builder.getLastAction()); } else { builder = replaceBuilder; } DeploymentPlan plan = builder.build(); Future<ServerDeploymentPlanResult> future = deploymentManager.execute(plan); planResult = future.get(); } catch (Exception ex) { throw new ServerDeploymentException(ex); } for (DeploymentAction action : actions) { ServerDeploymentActionResult actionResult = planResult.getDeploymentActionResult(action.getId()); if (actionResult.getDeploymentException() != null) throw new ServerDeploymentException(actionResult); } return runtimeName; } public void undeploy(String runtimeName) throws ServerDeploymentException { ServerDeploymentPlanResult planResult; List<DeploymentAction> actions = new ArrayList<DeploymentAction>(); try { DeploymentPlanBuilder builder = deploymentManager.newDeploymentPlan(); UndeployDeploymentPlanBuilder undeployBuilder = builder.undeploy(runtimeName); actions.add(undeployBuilder.getLastAction()); builder = undeployBuilder.andRemoveUndeployed(); actions.add(builder.getLastAction()); DeploymentPlan plan = builder.build(); Future<ServerDeploymentPlanResult> future = deploymentManager.execute(plan); planResult = future.get(); } catch (Exception ex) { throw new ServerDeploymentException(ex); } for (DeploymentAction action : actions) { ServerDeploymentActionResult actionResult = planResult.getDeploymentActionResult(action.getId()); if (actionResult.getDeploymentException() != null) throw new ServerDeploymentException(actionResult); } } public static class ServerDeploymentException extends Exception { private static final long serialVersionUID = 1L; private final ServerDeploymentActionResult actionResult; private ServerDeploymentException(ServerDeploymentActionResult actionResult) { super(actionResult.getDeploymentException()); this.actionResult = actionResult; } private ServerDeploymentException(Throwable cause) { super(cause); actionResult = null; } public ServerDeploymentActionResult getActionResult() { return actionResult; } } }