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 }