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 java.util.List;
021 import javax.enterprise.deploy.shared.CommandType;
022 import javax.enterprise.deploy.shared.ModuleType;
023 import javax.enterprise.deploy.spi.TargetModuleID;
024
025 import org.apache.geronimo.deployment.plugin.TargetModuleIDImpl;
026 import org.apache.geronimo.kernel.Kernel;
027 import org.apache.geronimo.kernel.config.Configuration;
028 import org.apache.geronimo.kernel.config.ConfigurationManager;
029 import org.apache.geronimo.kernel.config.ConfigurationUtil;
030 import org.apache.geronimo.kernel.repository.Artifact;
031 import org.apache.geronimo.gbean.AbstractName;
032
033 /**
034 * @version $Rev:392614 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
035 */
036 public class StartCommand extends CommandSupport {
037 private final Kernel kernel;
038 private final TargetModuleID[] modules;
039
040 public StartCommand(Kernel kernel, TargetModuleID modules[]) {
041 super(CommandType.START);
042 this.kernel = kernel;
043 this.modules = modules;
044 }
045
046 public void run() {
047 try {
048 ConfigurationManager configurationManager = ConfigurationUtil.getConfigurationManager(kernel);
049 try {
050 for (int i = 0; i < modules.length; i++) {
051 TargetModuleID module = modules[i];
052
053 // Check to see whether the module is already started
054 Artifact moduleID = Artifact.create(module.getModuleID());
055 if (configurationManager.isRunning(moduleID)) {
056 updateStatus("Module " + moduleID + " is already running");
057 Thread.sleep(100);
058 continue;
059 }
060
061 // Load
062 if(!configurationManager.isLoaded(moduleID)) {
063 configurationManager.loadConfiguration(moduleID);
064 }
065
066 // Start
067 org.apache.geronimo.kernel.config.LifecycleResults lcresult = configurationManager.startConfiguration(moduleID);
068
069 // Determine the child modules of the configuration
070 //TODO might be a hack
071 List kids = loadChildren(kernel, moduleID.toString());
072
073 // Build a response obect containg the started configuration and a list of it's contained modules
074 TargetModuleIDImpl id = new TargetModuleIDImpl(modules[i].getTarget(), module.getModuleID(),
075 (String[]) kids.toArray(new String[kids.size()]));
076 if (isWebApp(kernel, moduleID.toString())) {
077 id.setType(ModuleType.WAR);
078 }
079 if (id.getChildTargetModuleID() != null) {
080 for (int k = 0; k < id.getChildTargetModuleID().length; k++) {
081 TargetModuleIDImpl child = (TargetModuleIDImpl) id.getChildTargetModuleID()[k];
082 if (isWebApp(kernel, child.getModuleID())) {
083 child.setType(ModuleType.WAR);
084 }
085 }
086 }
087 addModule(id);
088 java.util.Iterator iterator = lcresult.getStarted().iterator();
089 while (iterator.hasNext()) {
090 Artifact config = (Artifact)iterator.next();
091 if (!config.toString().equals(id.getModuleID())) {
092 //TODO might be a hack
093 List kidsChild = loadChildren(kernel, config.toString());
094
095 // Build a response obect containg the started configuration and a list of it's contained modules
096 TargetModuleIDImpl idChild = new TargetModuleIDImpl(null, config.toString(),
097 (String[]) kidsChild.toArray(new String[kidsChild.size()]));
098 if (isWebApp(kernel, config.toString())) {
099 idChild.setType(ModuleType.WAR);
100 }
101 if (idChild.getChildTargetModuleID() != null) {
102 for (int k = 0; k < idChild.getChildTargetModuleID().length; k++) {
103 TargetModuleIDImpl child = (TargetModuleIDImpl) idChild.getChildTargetModuleID()[k];
104 if (isWebApp(kernel, child.getModuleID())) {
105 child.setType(ModuleType.WAR);
106 }
107 }
108 }
109 addModule(idChild);
110 }
111 }
112 }
113 } finally {
114 ConfigurationUtil.releaseConfigurationManager(kernel, configurationManager);
115 }
116 addWebURLs(kernel);
117 complete("Completed");
118 } catch (Throwable e) {
119 doFail(e);
120 }
121 }
122 }