001 /** 002 * 003 * Copyright 2003-2004 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.deployment.cli; 019 020 import org.apache.geronimo.common.DeploymentException; 021 022 import javax.enterprise.deploy.spi.DeploymentManager; 023 import javax.enterprise.deploy.spi.Target; 024 import javax.enterprise.deploy.spi.TargetModuleID; 025 import javax.enterprise.deploy.spi.exceptions.TargetException; 026 import javax.enterprise.deploy.spi.status.ProgressObject; 027 import java.io.PrintWriter; 028 import java.util.ArrayList; 029 import java.util.List; 030 031 /** 032 * The CLI deployer logic to start. 033 * 034 * @version $Rev: 405229 $ $Date: 2006-05-08 16:44:03 -0700 (Mon, 08 May 2006) $ 035 */ 036 public class CommandStart extends AbstractCommand { 037 public CommandStart() { 038 super("start", "1. Common Commands", "[ModuleID|TargetModuleID]+", 039 "Accepts the configId of a module, or the fully-qualified " + 040 "TargetModuleID identifying both the module and the server or cluster it's " + 041 "on, and starts that module. The module should be available to the server " + 042 "but not currently running. If multiple modules are specified, they will " + 043 "all be started.\n" + 044 "If the server is not running, the module will be marked to start " + 045 "next time the server is started."); 046 } 047 048 public CommandStart(String command, String group, String helpArgumentList, String helpText) { 049 super(command, group, helpArgumentList, helpText); 050 } 051 052 public void execute(PrintWriter out, ServerConnection connection, String[] args) throws DeploymentException { 053 if(args.length == 0) { 054 throw new DeploymentSyntaxException("Must specify at least one module name or TargetModuleID"); 055 } 056 DeploymentManager mgr = connection.getDeploymentManager(); 057 Target[] allTargets = mgr.getTargets(); 058 TargetModuleID[] allModules; 059 try { 060 allModules = mgr.getAvailableModules(null, allTargets); 061 } catch(TargetException e) { 062 throw new DeploymentException("Unable to load module list from server", e); 063 } 064 List modules = new ArrayList(); 065 for(int i=0; i<args.length; i++) { 066 modules.addAll(DeployUtils.identifyTargetModuleIDs(allModules, args[i], false)); 067 } 068 TargetModuleID[] ids = (TargetModuleID[]) modules.toArray(new TargetModuleID[modules.size()]); 069 boolean multiple = isMultipleTargets(ids); 070 ProgressObject po = runCommand(out, mgr, ids); 071 TargetModuleID[] done = po.getResultTargetModuleIDs(); 072 out.println(); 073 for(int i = 0; i < done.length; i++) { 074 TargetModuleID id = done[i]; 075 out.print(DeployUtils.reformat(getAction()+" "+id.getModuleID()+(multiple ? " on "+id.getTarget().getName() : "")+(id.getWebURL() == null || !getAction().equals("Started") ? "" : " @ "+id.getWebURL()),4, 72)); 076 if(id.getChildTargetModuleID() != null) { 077 for (int j = 0; j < id.getChildTargetModuleID().length; j++) { 078 TargetModuleID child = id.getChildTargetModuleID()[j]; 079 out.print(DeployUtils.reformat(" `-> "+child.getModuleID()+(child.getWebURL() == null || !getAction().equals("Started") ? "" : " @ "+child.getWebURL()),4, 72)); 080 } 081 } 082 out.println(); 083 } 084 if(po.getDeploymentStatus().isFailed()) { 085 throw new DeploymentException("Operation failed: "+po.getDeploymentStatus().getMessage()); 086 } 087 } 088 089 protected ProgressObject runCommand(PrintWriter out, DeploymentManager mgr, TargetModuleID[] ids) { 090 ProgressObject po = mgr.start(ids); 091 waitForProgress(out, po); 092 return po; 093 } 094 095 protected String getAction() { 096 return "Started"; 097 } 098 099 }