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.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: 2006-05-08 16:44:03 -0700 (Mon, 08 May 2006) $
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                        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                    }
089                } finally {
090                    ConfigurationUtil.releaseConfigurationManager(kernel, configurationManager);
091                }
092                addWebURLs(kernel);
093                complete("Completed");
094            } catch (Exception e) {
095                e.printStackTrace();
096                doFail(e);
097            }
098        }
099    }