001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. 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.plugin.local;
019
020 import org.apache.geronimo.deployment.plugin.TargetModuleIDImpl;
021 import org.apache.geronimo.kernel.Kernel;
022 import org.apache.geronimo.kernel.config.ConfigurationManager;
023 import org.apache.geronimo.kernel.config.ConfigurationUtil;
024 import org.apache.geronimo.kernel.repository.Artifact;
025
026 import java.util.List;
027 import javax.enterprise.deploy.shared.CommandType;
028 import javax.enterprise.deploy.shared.ModuleType;
029 import javax.enterprise.deploy.spi.TargetModuleID;
030
031 /**
032 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
033 */
034 public class StopCommand extends CommandSupport {
035 private final Kernel kernel;
036 private final TargetModuleID[] modules;
037
038 public StopCommand(Kernel kernel, TargetModuleID modules[]) {
039 super(CommandType.STOP);
040 this.kernel = kernel;
041 this.modules = modules;
042 }
043
044 public void run() {
045 try {
046 ConfigurationManager configurationManager = ConfigurationUtil.getConfigurationManager(kernel);
047 int alreadyStopped = 0;
048
049 try {
050 for (int i = 0; i < modules.length; i++) {
051 TargetModuleID module = modules[i];
052 Artifact moduleID = Artifact.create(module.getModuleID());
053 org.apache.geronimo.kernel.config.LifecycleResults lcresult = null;
054
055 if (configurationManager.isRunning(moduleID)) {
056 lcresult = configurationManager.stopConfiguration(moduleID);
057 addModule(module);
058 } else {
059 updateStatus("Module " + moduleID + " is already stopped");
060 alreadyStopped++;
061 }
062
063 if (configurationManager.isLoaded(moduleID)) {
064 configurationManager.unloadConfiguration(moduleID);
065 }
066
067 if (lcresult != null) {
068 java.util.Iterator iterator = lcresult.getStopped().iterator();
069 while (iterator.hasNext()) {
070 Artifact config = (Artifact)iterator.next();
071 if (!config.toString().equals(module.getModuleID())) {
072 //TODO might be a hack
073 List kidsChild = loadChildren(kernel, config.toString());
074 //this.updateStatus("printing kidsChild="+kidsChild);
075 //this.updateStatus("printing config="+config.toString());
076 // Build a response obect containg the started configuration and a list of it's contained modules
077 TargetModuleIDImpl idChild = new TargetModuleIDImpl(null, config.toString(),
078 (String[]) kidsChild.toArray(new String[kidsChild.size()]));
079 if (isWebApp(kernel, config.toString())) {
080 idChild.setType(ModuleType.WAR);
081 }
082 if (idChild.getChildTargetModuleID() != null) {
083 for (int k = 0; k < idChild.getChildTargetModuleID().length; k++) {
084 TargetModuleIDImpl child = (TargetModuleIDImpl) idChild.getChildTargetModuleID()[k];
085 if (isWebApp(kernel, child.getModuleID())) {
086 child.setType(ModuleType.WAR);
087 }
088 }
089 }
090 addModule(idChild);
091 }
092 }
093 }
094 }
095 } finally {
096 ConfigurationUtil.releaseConfigurationManager(kernel, configurationManager);
097 }
098 if ((getModuleCount() + alreadyStopped) < modules.length) {
099 fail("Some modules could not be stopped");
100 } else {
101 complete("Completed");
102 }
103 } catch (Throwable e) {
104 doFail(e);
105 }
106 }
107 }