jboynes 2004/01/24 13:07:45
Modified: modules/connector/src/java/org/apache/geronimo/connector/deployment ConnectorModule.java modules/deployment/src/java/org/apache/geronimo/deployment DeploymentModule.java modules/deployment/src/java/org/apache/geronimo/deployment/plugin DeploymentManagerImpl.java modules/deployment/src/java/org/apache/geronimo/deployment/plugin/application EARConfigurationFactory.java modules/deployment/src/java/org/apache/geronimo/deployment/plugin/client ClientConfigurationFactory.java modules/deployment/src/java/org/apache/geronimo/deployment/plugin/factories DeploymentConfigurationFactory.java modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local CommandSupport.java DistributeCommand.java LocalServer.java modules/deployment/src/java/org/apache/geronimo/deployment/service ServiceModule.java modules/jetty/src/java/org/apache/geronimo/jetty/deployment JettyModule.java WARConfigurationFactory.java modules/jetty/src/test-resources/services local.xml modules/jetty/src/test/org/apache/geronimo/jetty/deployment DeploymentTest.java modules/kernel/src/java/org/apache/geronimo/kernel Kernel.java Added: modules/deployment/src/java/org/apache/geronimo/deployment/plugin FailedProgressObject.java modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local StartCommand.java StopCommand.java modules/jetty/src/java/org/apache/geronimo/jetty/deployment AbstractModule.java UnpackedModule.java modules/jetty/src/test-resources/deployables/war1/WEB-INF geronimo-web.xml Log: Support for unpacked WAR deployment on embedded local server Revision Changes Path 1.3 +1 -6 incubator-geronimo/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModule.java Index: ConnectorModule.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModule.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ConnectorModule.java 23 Jan 2004 19:58:16 -0000 1.2 +++ ConnectorModule.java 24 Jan 2004 21:07:44 -0000 1.3 @@ -65,7 +65,6 @@ import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; -import javax.enterprise.deploy.spi.TargetModuleID; import org.apache.geronimo.common.propertyeditor.PropertyEditors; import org.apache.geronimo.connector.ResourceAdapterWrapper; @@ -107,10 +106,6 @@ this.moduleID = moduleID; this.geronimoConnectorDocument = geronimoConnectorDocument; this.connectorDeployer = connectorDeployer; - } - - public TargetModuleID getModuleID() { - throw new UnsupportedOperationException(); } public void init() throws DeploymentException { 1.4 +20 -11 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentModule.java Index: DeploymentModule.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentModule.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- DeploymentModule.java 23 Jan 2004 19:58:16 -0000 1.3 +++ DeploymentModule.java 24 Jan 2004 21:07:44 -0000 1.4 @@ -66,10 +66,25 @@ /** * A module representing a resource being deployed. The deployer will call each * method once in the sequence: - * <li>init</li> - * <li>generateClassPath</li> - * <li>defineGBeans</li> - * <li>complete</li> + * <code> + * try { + * foreach module { + * module.init(); + * } + * foreach module { + * module.generateClassPath(this); + * } + * ClassLoader parent = ... ; // get classloader from parent config + * ClassLoader cl = new ClassLoader(classPathURLs, parent); + * foreach module { + * module.defineGBeans(this, cl); + * } + * } finally { + * foreach module { + * module.complete(); + * } + * } + * </code> * * Once deployment starts, complete() method must always be called even if * problems in the deployment process prevent the other methods being called. @@ -78,12 +93,6 @@ * @version $Revision$ $Date$ */ public interface DeploymentModule { - /** - * Get the JSR88 TargetModuleID for this module - * @return the moduleID - */ - TargetModuleID getModuleID(); - /** * Indication to this module that the deployment process is starting. */ 1.5 +24 -11 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/DeploymentManagerImpl.java Index: DeploymentManagerImpl.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/DeploymentManagerImpl.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- DeploymentManagerImpl.java 23 Jan 2004 19:58:16 -0000 1.4 +++ DeploymentManagerImpl.java 24 Jan 2004 21:07:44 -0000 1.5 @@ -65,6 +65,7 @@ import java.util.Locale; import java.util.Map; import javax.enterprise.deploy.model.DeployableObject; +import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.shared.DConfigBeanVersionType; import javax.enterprise.deploy.shared.ModuleType; import javax.enterprise.deploy.spi.DeploymentConfiguration; @@ -81,6 +82,7 @@ import org.apache.geronimo.deployment.DeploymentException; import org.apache.geronimo.deployment.DeploymentModule; import org.apache.geronimo.deployment.plugin.factories.DeploymentConfigurationFactory; +import org.apache.geronimo.deployment.plugin.local.CommandSupport; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoFactory; import org.apache.geronimo.gbean.GConstructorInfo; @@ -179,12 +181,26 @@ } public ProgressObject distribute(Target[] targetList, File moduleArchive, File deploymentPlan) throws IllegalStateException { + Document doc; try { - return distribute(targetList, new FileInputStream(moduleArchive), new FileInputStream(deploymentPlan)); - } catch (FileNotFoundException e) { - // @todo should this return a "failed" progress object? - throw new IllegalStateException(); + DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + doc = parser.parse(deploymentPlan); + } catch (Exception e) { + return new FailedProgressObject(CommandType.DISTRIBUTE, e.getMessage()); + } + DeploymentModule module = null; + for (Iterator i = configurationFactories.values().iterator(); i.hasNext();) { + DeploymentConfigurationFactory factory = (DeploymentConfigurationFactory) i.next(); + try { + module = factory.createModule(moduleArchive, doc); + } catch (DeploymentException e) { + return new FailedProgressObject(CommandType.DISTRIBUTE, e.getMessage()); + } + } + if (module == null) { + return new FailedProgressObject(CommandType.DISTRIBUTE, "No deployer found for supplied plan"); } + return server.distribute(targetList, module); } public ProgressObject distribute(Target[] targetList, InputStream moduleArchive, InputStream deploymentPlan) throws IllegalStateException { @@ -193,8 +209,7 @@ DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder(); doc = parser.parse(deploymentPlan); } catch (Exception e) { - // @todo failed ProgressObject? - throw new IllegalStateException(); + return new FailedProgressObject(CommandType.DISTRIBUTE, e.getMessage()); } DeploymentModule module = null; for (Iterator i = configurationFactories.values().iterator(); i.hasNext();) { @@ -202,13 +217,11 @@ try { module = factory.createModule(moduleArchive, doc); } catch (DeploymentException e) { - // @todo failed ProgressObject? - throw new IllegalStateException(); + return new FailedProgressObject(CommandType.DISTRIBUTE, e.getMessage()); } } if (module == null) { - // @todo failed ProgressObject? - throw new IllegalStateException(); + return new FailedProgressObject(CommandType.DISTRIBUTE, "No deployer found for supplied plan"); } return server.distribute(targetList, module); } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/FailedProgressObject.java Index: FailedProgressObject.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.geronimo.deployment.plugin; import javax.enterprise.deploy.shared.CommandType; import org.apache.geronimo.deployment.plugin.local.CommandSupport; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/24 21:07:44 $ */ public class FailedProgressObject extends CommandSupport { public FailedProgressObject(CommandType command, String message) { super(command); fail(message); } public void run() { } } 1.3 +6 -1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/application/EARConfigurationFactory.java Index: EARConfigurationFactory.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/application/EARConfigurationFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- EARConfigurationFactory.java 23 Jan 2004 19:58:16 -0000 1.2 +++ EARConfigurationFactory.java 24 Jan 2004 21:07:44 -0000 1.3 @@ -56,6 +56,7 @@ package org.apache.geronimo.deployment.plugin.application; import java.io.InputStream; +import java.io.File; import javax.enterprise.deploy.model.DeployableObject; import javax.enterprise.deploy.spi.DeploymentConfiguration; import javax.enterprise.deploy.spi.exceptions.InvalidModuleException; @@ -83,6 +84,10 @@ } public DeploymentModule createModule(InputStream moduleArchive, Document deploymentPlan) throws DeploymentException { + throw new UnsupportedOperationException(); + } + + public DeploymentModule createModule(File moduleArchive, Document deploymentPlan) throws DeploymentException { throw new UnsupportedOperationException(); } 1.3 +6 -1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/client/ClientConfigurationFactory.java Index: ClientConfigurationFactory.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/client/ClientConfigurationFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ClientConfigurationFactory.java 23 Jan 2004 19:58:16 -0000 1.2 +++ ClientConfigurationFactory.java 24 Jan 2004 21:07:44 -0000 1.3 @@ -56,6 +56,7 @@ package org.apache.geronimo.deployment.plugin.client; import java.io.InputStream; +import java.io.File; import javax.enterprise.deploy.spi.DeploymentConfiguration; import javax.enterprise.deploy.spi.exceptions.InvalidModuleException; import javax.enterprise.deploy.model.DeployableObject; @@ -76,6 +77,10 @@ } public DeploymentModule createModule(InputStream moduleArchive, Document deploymentPlan) throws DeploymentException { + throw new UnsupportedOperationException(); + } + + public DeploymentModule createModule(File moduleArchive, Document deploymentPlan) throws DeploymentException { throw new UnsupportedOperationException(); } 1.3 +7 -3 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/factories/DeploymentConfigurationFactory.java Index: DeploymentConfigurationFactory.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/factories/DeploymentConfigurationFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- DeploymentConfigurationFactory.java 23 Jan 2004 19:58:16 -0000 1.2 +++ DeploymentConfigurationFactory.java 24 Jan 2004 21:07:44 -0000 1.3 @@ -56,8 +56,10 @@ package org.apache.geronimo.deployment.plugin.factories; import java.io.InputStream; +import java.io.File; import javax.enterprise.deploy.model.DeployableObject; import javax.enterprise.deploy.spi.DeploymentConfiguration; +import javax.enterprise.deploy.spi.Target; import javax.enterprise.deploy.spi.exceptions.InvalidModuleException; import org.apache.geronimo.deployment.DeploymentModule; @@ -65,12 +67,14 @@ import org.w3c.dom.Document; /** - * - * + * + * * @version $Revision$ $Date$ */ public interface DeploymentConfigurationFactory { public DeploymentConfiguration createConfiguration(DeployableObject deployable) throws InvalidModuleException; public DeploymentModule createModule(InputStream moduleArchive, Document deploymentPlan) throws DeploymentException; + + public DeploymentModule createModule(File moduleArchive, Document deploymentPlan) throws DeploymentException; } 1.2 +88 -23 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java Index: CommandSupport.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/CommandSupport.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- CommandSupport.java 23 Jan 2004 19:58:16 -0000 1.1 +++ CommandSupport.java 24 Jan 2004 21:07:44 -0000 1.2 @@ -55,6 +55,11 @@ */ package org.apache.geronimo.deployment.plugin.local; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; import javax.enterprise.deploy.shared.ActionType; import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.shared.StateType; @@ -62,6 +67,7 @@ import javax.enterprise.deploy.spi.exceptions.OperationUnsupportedException; import javax.enterprise.deploy.spi.status.ClientConfiguration; import javax.enterprise.deploy.spi.status.DeploymentStatus; +import javax.enterprise.deploy.spi.status.ProgressEvent; import javax.enterprise.deploy.spi.status.ProgressListener; import javax.enterprise.deploy.spi.status.ProgressObject; @@ -72,19 +78,29 @@ */ public abstract class CommandSupport implements ProgressObject, Runnable { private final CommandType command; - private final Status status; + private ActionType action; + private StateType state; + private String message; + private final Set listeners = new HashSet(); + private final List moduleIDs = new ArrayList(); protected CommandSupport(CommandType command) { this.command = command; - this.status = new Status(); + this.action = ActionType.EXECUTE; + this.state = StateType.RUNNING; + this.message = null; } - public TargetModuleID[] getResultTargetModuleIDs() { - return new TargetModuleID[0]; + protected synchronized void addModule(TargetModuleID moduleID) { + moduleIDs.add(moduleID); + } + + public synchronized TargetModuleID[] getResultTargetModuleIDs() { + return (TargetModuleID[]) moduleIDs.toArray(new TargetModuleID[moduleIDs.size()]); } public DeploymentStatus getDeploymentStatus() { - return status; + return new Status(command, action, state, message); } public ClientConfiguration getClientConfiguration(TargetModuleID id) { @@ -107,33 +123,70 @@ throw new OperationUnsupportedException("stop not supported"); } - public void addProgressListener(ProgressListener pol) { + public synchronized void addProgressListener(ProgressListener pol) { + listeners.add(pol); } - public void removeProgressListener(ProgressListener pol) { + public synchronized void removeProgressListener(ProgressListener pol) { + listeners.remove(pol); } protected void setState(StateType state) { - status.state = state; + Set toNotify; + DeploymentStatus newStatus; + synchronized (this) { + this.state = state; + newStatus = getDeploymentStatus(); + toNotify = listeners; + } + sendEvent(toNotify, newStatus); } protected void fail(String message) { - status.message = message; - status.state = StateType.FAILED; - } - - protected void complete() { - status.state = StateType.COMPLETED; - } - - protected void setMessage(String message) { - status.message = message; + Set toNotify; + DeploymentStatus newStatus; + synchronized (this) { + this.message = message; + this.state = StateType.FAILED; + newStatus = getDeploymentStatus(); + toNotify = listeners; + } + sendEvent(toNotify, newStatus); + } + + protected synchronized void complete(String message) { + Set toNotify; + DeploymentStatus newStatus; + synchronized (this) { + this.message = message; + this.state = StateType.COMPLETED; + newStatus = getDeploymentStatus(); + toNotify = listeners; + } + sendEvent(toNotify, newStatus); + } + + private void sendEvent(Set toNotify, DeploymentStatus newStatus) { + assert !Thread.holdsLock(this) : "Trying to send event whilst holding lock"; + ProgressEvent event = new ProgressEvent(this, null, newStatus); + for (Iterator i = toNotify.iterator(); i.hasNext();) { + ProgressListener listener = (ProgressListener) i.next(); + listener.handleProgressEvent(event); + } } - private class Status implements DeploymentStatus { - private volatile ActionType action = ActionType.EXECUTE; - private volatile StateType state = StateType.RUNNING; - private volatile String message; + private static class Status implements DeploymentStatus { + private final CommandType command; + private final ActionType action; + private final StateType state; + private final String message; + + public Status(CommandType command, ActionType action, StateType state, String message) { + this.command = command; + this.action = action; + this.state = state; + this.message = message; + } public CommandType getCommand() { return command; @@ -161,6 +214,18 @@ public boolean isFailed() { return StateType.FAILED.equals(state); + } + + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("DeploymentStatus[").append(command).append(','); + buf.append(action).append(','); + buf.append(state); + if (message != null) { + buf.append(',').append(message); + } + buf.append(']'); + return buf.toString(); } } } 1.2 +10 -8 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java Index: DistributeCommand.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DistributeCommand.java 23 Jan 2004 19:58:16 -0000 1.1 +++ DistributeCommand.java 24 Jan 2004 21:07:44 -0000 1.2 @@ -62,9 +62,11 @@ import java.util.jar.JarOutputStream; import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.spi.TargetModuleID; +import javax.enterprise.deploy.spi.Target; import org.apache.geronimo.deployment.DeploymentModule; import org.apache.geronimo.deployment.ModuleDeployer; +import org.apache.geronimo.deployment.plugin.TargetModuleIDImpl; import org.apache.geronimo.deployment.util.FileUtil; import org.apache.geronimo.kernel.Kernel; import org.apache.geronimo.kernel.config.ConfigurationParent; @@ -75,12 +77,14 @@ * @version $Revision$ $Date$ */ public class DistributeCommand extends CommandSupport { + private final Target target; private final ConfigurationParent parent; private final Kernel kernel; private final DeploymentModule module; - public DistributeCommand(ConfigurationParent parent, Kernel kernel, DeploymentModule module) { + public DistributeCommand(Target target, ConfigurationParent parent, Kernel kernel, DeploymentModule module) { super(CommandType.DISTRIBUTE); + this.target = target; this.parent = parent; this.kernel = kernel; this.module = module; @@ -98,7 +102,7 @@ workDir.mkdir(); // convert the module to a Configuration - TargetModuleID targetID = module.getModuleID(); + TargetModuleID targetID = new TargetModuleIDImpl(target, "test"); URI moduleID = URI.create(targetID.getModuleID()); ModuleDeployer deployer = new ModuleDeployer(parent, moduleID, workDir); deployer.addModule(module); @@ -109,17 +113,15 @@ try { JarOutputStream jos = new JarOutputStream(new BufferedOutputStream(os)); deployer.saveConfiguration(jos); + jos.flush(); } finally { os.close(); } // install in our local server kernel.install(configFile.toURL()); - - // load configuration - kernel.load(moduleID); - - complete(); + addModule(targetID); + complete("Completed"); } catch (Exception e) { fail(e.getMessage()); } finally { 1.2 +15 -8 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/LocalServer.java Index: LocalServer.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/LocalServer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- LocalServer.java 23 Jan 2004 19:58:16 -0000 1.1 +++ LocalServer.java 24 Jan 2004 21:07:44 -0000 1.2 @@ -58,6 +58,7 @@ import java.io.File; import java.io.InputStream; import java.net.URI; +import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.shared.ModuleType; import javax.enterprise.deploy.spi.Target; import javax.enterprise.deploy.spi.TargetModuleID; @@ -67,6 +68,7 @@ import org.apache.geronimo.deployment.DeploymentModule; import org.apache.geronimo.deployment.plugin.DeploymentServer; +import org.apache.geronimo.deployment.plugin.FailedProgressObject; import org.apache.geronimo.deployment.plugin.TargetImpl; import org.apache.geronimo.gbean.GAttributeInfo; import org.apache.geronimo.gbean.GBean; @@ -81,8 +83,8 @@ import org.apache.geronimo.kernel.jmx.MBeanProxyFactory; /** - * - * + * + * * @version $Revision$ $Date$ */ public class LocalServer implements DeploymentServer,GBean { @@ -129,20 +131,23 @@ public ProgressObject distribute(Target[] targetList, DeploymentModule module) throws IllegalStateException { if (targetList.length != 1 || !target.equals(targetList[0])) { - // @todo progress object ? - throw new IllegalStateException(); + return new FailedProgressObject(CommandType.DISTRIBUTE, "Invalid Target"); } - DistributeCommand command = new DistributeCommand(parent, kernel, module); + DistributeCommand command = new DistributeCommand(target, parent, kernel, module); new Thread(command).start(); return command; } public ProgressObject start(TargetModuleID[] moduleIDList) throws IllegalStateException { - throw new UnsupportedOperationException(); + StartCommand command = new StartCommand(kernel, moduleIDList); + new Thread(command).start(); + return command; } public ProgressObject stop(TargetModuleID[] moduleIDList) throws IllegalStateException { - throw new UnsupportedOperationException(); + StopCommand command = new StopCommand(kernel, moduleIDList); + new Thread(command).start(); + return command; } public boolean isRedeploySupported() { @@ -166,11 +171,13 @@ public void doStart() throws WaitingException, Exception { kernel.boot(); configName = kernel.load(rootConfigID); + kernel.getMBeanServer().invoke(configName, "startRecursive", null, null); parent = (ConfigurationParent) MBeanProxyFactory.getProxy(ConfigurationParent.class, kernel.getMBeanServer(), configName); } public void doStop() throws WaitingException, Exception { parent = null; + kernel.getMBeanServer().invoke(configName, "stop", null, null); kernel.unload(configName); kernel.shutdown(); } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/StartCommand.java Index: StartCommand.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.geronimo.deployment.plugin.local; import java.net.URI; import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.spi.TargetModuleID; import javax.management.ObjectName; import org.apache.geronimo.kernel.Kernel; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/24 21:07:44 $ */ public class StartCommand extends CommandSupport { private final Kernel kernel; private final TargetModuleID[] modules; public StartCommand(Kernel kernel, TargetModuleID modules[]) { super(CommandType.START); this.kernel = kernel; this.modules = modules; } public void run() { try { for (int i = 0; i < modules.length; i++) { TargetModuleID module = modules[i]; URI moduleID = URI.create(module.getModuleID()); ObjectName name = kernel.load(moduleID); kernel.getMBeanServer().invoke(name, "startRecursive", null, null); addModule(module); } complete("Completed"); } catch (Exception e) { fail(e.getMessage()); } } } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/StopCommand.java Index: StopCommand.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.geronimo.deployment.plugin.local; import java.net.URI; import javax.enterprise.deploy.shared.CommandType; import javax.enterprise.deploy.spi.TargetModuleID; import javax.management.ObjectName; import org.apache.geronimo.kernel.Kernel; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/24 21:07:44 $ */ public class StopCommand extends CommandSupport { private final Kernel kernel; private final TargetModuleID[] modules; public StopCommand(Kernel kernel, TargetModuleID modules[]) { super(CommandType.START); this.kernel = kernel; this.modules = modules; } public void run() { try { for (int i = 0; i < modules.length; i++) { TargetModuleID module = modules[i]; URI moduleID = URI.create(module.getModuleID()); ObjectName name = kernel.getConfigObjectName(moduleID); kernel.getMBeanServer().invoke(name, "stop", null, null); addModule(module); } complete("Completed"); } catch (Exception e) { fail(e.getMessage()); } } } 1.6 +4 -9 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceModule.java Index: ServiceModule.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceModule.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- ServiceModule.java 23 Jan 2004 19:58:17 -0000 1.5 +++ ServiceModule.java 24 Jan 2004 21:07:44 -0000 1.6 @@ -69,19 +69,17 @@ import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; - import javax.management.MalformedObjectNameException; import javax.management.ObjectName; -import javax.enterprise.deploy.spi.TargetModuleID; import org.apache.geronimo.deployment.ConfigurationCallback; +import org.apache.geronimo.deployment.DeploymentException; import org.apache.geronimo.deployment.DeploymentModule; +import org.apache.geronimo.deployment.util.URLInfo; +import org.apache.geronimo.deployment.util.URLType; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.InvalidConfigurationException; import org.apache.geronimo.gbean.jmx.GBeanMBean; -import org.apache.geronimo.deployment.DeploymentException; -import org.apache.geronimo.deployment.util.URLInfo; -import org.apache.geronimo.deployment.util.URLType; /** * @@ -101,9 +99,6 @@ this.gbeanDefaults = gbeanDefaults; } - public TargetModuleID getModuleID() { - throw new UnsupportedOperationException(); - } public void init() throws DeploymentException { } 1.4 +6 -50 incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModule.java Index: JettyModule.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModule.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- JettyModule.java 23 Jan 2004 19:58:17 -0000 1.3 +++ JettyModule.java 24 Jan 2004 21:07:44 -0000 1.4 @@ -55,21 +55,12 @@ */ package org.apache.geronimo.jetty.deployment; -import java.net.URI; -import java.util.Collections; -import java.util.Properties; -import java.util.zip.ZipInputStream; -import java.util.zip.ZipEntry; -import java.io.InputStream; import java.io.IOException; - -import javax.management.ObjectName; -import javax.enterprise.deploy.spi.TargetModuleID; +import java.io.InputStream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; import org.apache.geronimo.deployment.ConfigurationCallback; -import org.apache.geronimo.deployment.DeploymentModule; -import org.apache.geronimo.gbean.jmx.GBeanMBean; -import org.apache.geronimo.jetty.JettyWebApplicationContext; import org.apache.geronimo.deployment.DeploymentException; import org.w3c.dom.Document; @@ -78,58 +69,23 @@ * * @version $Revision$ $Date$ */ -public class JettyModule implements DeploymentModule { +public class JettyModule extends AbstractModule { private final InputStream moduleArchive; - private URI uri; - private String contextPath; public JettyModule(InputStream moduleArchive, Document deploymentPlan) { this.moduleArchive = moduleArchive; } - public TargetModuleID getModuleID() { - throw new UnsupportedOperationException(); - } - - public void init() throws DeploymentException { - } - public void generateClassPath(ConfigurationCallback callback) throws DeploymentException { ZipInputStream zis = new ZipInputStream(moduleArchive); try { ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { - + } } catch (IOException e) { throw new DeploymentException("Unable to download WAR content", e); } } - public void defineGBeans(ConfigurationCallback callback, ClassLoader cl) throws DeploymentException { - try { - // @todo tie name to configuration - Properties nameProps = new Properties(); - nameProps.put("J2EEServer", "null"); - nameProps.put("J2EEApplication", "null"); - nameProps.put("J2EEType", "WebModule"); - nameProps.put("Path", contextPath); - ObjectName name = new ObjectName("geronimo.jetty", nameProps); - - GBeanMBean app = new GBeanMBean(JettyWebApplicationContext.GBEAN_INFO); - app.setAttribute("URI", uri); - app.setAttribute("ContextPath", contextPath); - app.setAttribute("ComponentContext", null); - app.setAttribute("PolicyContextID", null); - app.setEndpointPatterns("JettyContainer", Collections.singleton(new ObjectName("geronimo.web:type=WebContainer,container=Jetty"))); // @todo configurable - app.setEndpointPatterns("TransactionManager", Collections.EMPTY_SET); - app.setEndpointPatterns("TrackedConnectionAssociator", Collections.EMPTY_SET); - callback.addGBean(name, app); - } catch (Exception e) { - throw new DeploymentException("Unable to build GBean for web application", e); - } - } - - public void complete() { - } } 1.3 +12 -2 incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/WARConfigurationFactory.java Index: WARConfigurationFactory.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/WARConfigurationFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- WARConfigurationFactory.java 23 Jan 2004 19:58:17 -0000 1.2 +++ WARConfigurationFactory.java 24 Jan 2004 21:07:44 -0000 1.3 @@ -55,15 +55,16 @@ */ package org.apache.geronimo.jetty.deployment; +import java.io.File; import java.io.InputStream; import javax.enterprise.deploy.model.DeployableObject; import javax.enterprise.deploy.shared.ModuleType; import javax.enterprise.deploy.spi.DeploymentConfiguration; +import javax.enterprise.deploy.spi.Target; import javax.enterprise.deploy.spi.exceptions.InvalidModuleException; import org.apache.geronimo.deployment.DeploymentException; import org.apache.geronimo.deployment.DeploymentModule; -import org.apache.geronimo.deployment.util.XMLUtil; import org.apache.geronimo.deployment.plugin.factories.DeploymentConfigurationFactory; import org.apache.geronimo.gbean.GBeanInfo; import org.apache.geronimo.gbean.GBeanInfoFactory; @@ -90,6 +91,15 @@ } return new JettyModule(moduleArchive, deploymentPlan); + } + + public DeploymentModule createModule(File moduleArchive, Document deploymentPlan) throws DeploymentException { + Element root = deploymentPlan.getDocumentElement(); + if (!"web-app".equals(root.getNodeName())) { + return null; + } + + return new UnpackedModule(moduleArchive, deploymentPlan); } public static final GBeanInfo GBEAN_INFO; 1.1 incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/AbstractModule.java Index: AbstractModule.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.geronimo.jetty.deployment; import java.util.Properties; import java.util.Collections; import java.net.URI; import javax.enterprise.deploy.spi.TargetModuleID; import javax.management.ObjectName; import org.apache.geronimo.deployment.DeploymentModule; import org.apache.geronimo.deployment.DeploymentException; import org.apache.geronimo.deployment.ConfigurationCallback; import org.apache.geronimo.gbean.jmx.GBeanMBean; import org.apache.geronimo.jetty.JettyWebApplicationContext; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/24 21:07:44 $ */ public class AbstractModule implements DeploymentModule { protected URI uri; protected String contextPath; public void init() throws DeploymentException { } public void generateClassPath(ConfigurationCallback callback) throws DeploymentException { } public void defineGBeans(ConfigurationCallback callback, ClassLoader cl) throws DeploymentException { try { // @todo tie name to configuration Properties nameProps = new Properties(); nameProps.put("J2EEServer", "null"); nameProps.put("J2EEApplication", "null"); nameProps.put("J2EEType", "WebModule"); nameProps.put("Path", contextPath); ObjectName name = new ObjectName("geronimo.jetty", nameProps); GBeanMBean app = new GBeanMBean(JettyWebApplicationContext.GBEAN_INFO); app.setAttribute("URI", uri); app.setAttribute("ContextPath", contextPath); app.setAttribute("ComponentContext", null); app.setAttribute("PolicyContextID", null); app.setEndpointPatterns("JettyContainer", Collections.singleton(new ObjectName("geronimo.web:type=WebContainer,container=Jetty"))); // @todo configurable app.setEndpointPatterns("TransactionManager", Collections.EMPTY_SET); app.setEndpointPatterns("TrackedConnectionAssociator", Collections.EMPTY_SET); callback.addGBean(name, app); } catch (Exception e) { throw new DeploymentException("Unable to build GBean for web application", e); } } public void complete() { } } 1.1 incubator-geronimo/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/UnpackedModule.java Index: UnpackedModule.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" and * "Apache Geronimo" must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * "Apache Geronimo", nor may "Apache" appear in their name, without * prior written permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */ package org.apache.geronimo.jetty.deployment; import java.io.File; import org.apache.geronimo.deployment.util.XMLUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/24 21:07:44 $ */ public class UnpackedModule extends AbstractModule { public UnpackedModule(File archive, Document doc) { this.uri = archive.toURI(); Element contextElement = XMLUtil.getChild(doc.getDocumentElement(), "context-root"); if (contextElement == null) { contextPath = archive.getName(); if (contextPath.endsWith(".war")) { contextPath = contextPath.substring(0, contextPath.length()-4); } } else { contextPath = (String) XMLUtil.getContent(contextElement); } } } 1.1 incubator-geronimo/modules/jetty/src/test-resources/deployables/war1/WEB-INF/geronimo-web.xml Index: geronimo-web.xml =================================================================== <web-app> <context-root>/test</context-root> </web-app> 1.2 +1 -1 incubator-geronimo/modules/jetty/src/test-resources/services/local.xml Index: local.xml =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/jetty/src/test-resources/services/local.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- local.xml 23 Jan 2004 19:58:17 -0000 1.1 +++ local.xml 24 Jan 2004 21:07:45 -0000 1.2 @@ -3,7 +3,7 @@ </gbean> <gbean class="org.apache.geronimo.jetty.connector.HTTPConnector" objectName="geronimo.web:type=WebConnector,container=Jetty,port=8080"> - <default attribute="Port" type="int">8080</default> + <default attribute="Port" type="int">5678</default> <endpoint name="JettyContainer"> <pattern>geronimo.web:type=WebContainer,container=Jetty</pattern> </endpoint> 1.2 +79 -29 incubator-geronimo/modules/jetty/src/test/org/apache/geronimo/jetty/deployment/DeploymentTest.java Index: DeploymentTest.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/jetty/src/test/org/apache/geronimo/jetty/deployment/DeploymentTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DeploymentTest.java 23 Jan 2004 19:58:17 -0000 1.1 +++ DeploymentTest.java 24 Jan 2004 21:07:45 -0000 1.2 @@ -55,42 +55,91 @@ */ package org.apache.geronimo.jetty.deployment; -import java.net.URL; -import java.net.URI; -import java.io.ByteArrayOutputStream; -import java.io.ByteArrayInputStream; -import java.io.File; import java.io.BufferedOutputStream; +import java.io.File; import java.io.FileOutputStream; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.IOException; +import java.net.URI; +import java.net.URL; +import java.net.HttpURLConnection; import java.util.Collections; import java.util.jar.JarOutputStream; -import javax.enterprise.deploy.spi.DeploymentConfiguration; -import javax.enterprise.deploy.spi.DConfigBeanRoot; import javax.enterprise.deploy.spi.Target; +import javax.enterprise.deploy.spi.TargetModuleID; +import javax.enterprise.deploy.spi.status.ProgressEvent; +import javax.enterprise.deploy.spi.status.ProgressListener; +import javax.enterprise.deploy.spi.status.ProgressObject; +import javax.enterprise.deploy.shared.StateType; -import org.apache.geronimo.deployment.tools.loader.WebDeployable; -import org.apache.geronimo.deployment.plugin.local.LocalServer; -import org.apache.geronimo.deployment.util.FileUtil; -import org.apache.geronimo.deployment.util.URLInfo; import org.apache.geronimo.deployment.URLDeployer; +import org.apache.geronimo.deployment.plugin.local.LocalServer; import org.apache.geronimo.deployment.service.ServiceDeployer; +import org.apache.geronimo.deployment.util.URLInfo; import org.apache.geronimo.gbean.jmx.GBeanMBean; /** - * - * + * + * * @version $Revision$ $Date$ */ public class DeploymentTest extends DeployerTestCase { - private URL war; - private byte[] plan; +// private byte[] plan; private File configFile; + private Target[] targets; - public void testDistribute() throws Exception { -// Target[] targets = manager.getTargets(); -// manager.distribute(targets, war.openStream(), new ByteArrayInputStream(plan)); + public void testUnpacked() throws Exception { + URL url = classLoader.getResource("deployables/war1/"); + File war = new File(URI.create(url.toString())); + + ProgressObject result = manager.distribute(targets, war, new File(war, "WEB-INF/geronimo-web.xml")); + waitFor(result); + TargetModuleID[] ids = result.getResultTargetModuleIDs(); + assertEquals(1, ids.length); + + result = manager.start(ids); + waitFor(result); + + HttpURLConnection connection = (HttpURLConnection) new URL("http://localhost:5678/test/hello.txt").openConnection(); + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + assertEquals(HttpURLConnection.HTTP_OK, connection.getResponseCode()); + assertEquals("Hello World", reader.readLine()); + connection.disconnect(); + + result = manager.stop(ids); + waitFor(result); + + connection = (HttpURLConnection) new URL("http://localhost:5678/test/hello.txt").openConnection(); + try { + reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + fail(); + } catch (IOException e) { + assertEquals(HttpURLConnection.HTTP_NOT_FOUND, connection.getResponseCode()); + } + connection.disconnect(); + } + + private void waitFor(ProgressObject result) throws InterruptedException { + result.addProgressListener(new ProgressListener() { + public void handleProgressEvent(ProgressEvent event) { + synchronized (DeploymentTest.this) { + DeploymentTest.this.notify(); + } + } + }); + synchronized (this) { + while (result.getDeploymentStatus().isRunning()) { + wait(); + } + } + assertEquals(StateType.COMPLETED, result.getDeploymentStatus().getState()); } +// public void testPacked() throws Exception { +// manager.distribute(targets, war.openStream(), new ByteArrayInputStream(plan)); +// } + protected void setUp() throws Exception { super.setUp(); @@ -112,16 +161,17 @@ kernel.loadGBean(serverName, serverGBean); kernel.startGBean(serverName); - war = classLoader.getResource("deployables/war2.war"); - WebDeployable deployable = new WebDeployable(war); - DeploymentConfiguration config = manager.createConfiguration(deployable); - DConfigBeanRoot configRoot = config.getDConfigBeanRoot(deployable.getDDBeanRoot()); - WebAppDConfigBean contextBean = (WebAppDConfigBean) configRoot.getDConfigBean(deployable.getChildBean("/web-app")[0]); - contextBean.setContextRoot("/war2"); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - config.save(baos); - plan = baos.toByteArray(); +// WebDeployable deployable = new WebDeployable(war); +// DeploymentConfiguration config = manager.createConfiguration(deployable); +// DConfigBeanRoot configRoot = config.getDConfigBeanRoot(deployable.getDDBeanRoot()); +// WebAppDConfigBean contextBean = (WebAppDConfigBean) configRoot.getDConfigBean(deployable.getChildBean("/web-app")[0]); +// contextBean.setContextRoot("/war2"); +// +// ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// config.save(baos); +// plan = baos.toByteArray(); + + targets = manager.getTargets(); } protected void tearDown() throws Exception { 1.10 +6 -2 incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java Index: Kernel.java =================================================================== RCS file: /home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- Kernel.java 23 Jan 2004 16:45:48 -0000 1.9 +++ Kernel.java 24 Jan 2004 21:07:45 -0000 1.10 @@ -216,12 +216,16 @@ } ObjectName configName; try { - configName = new ObjectName("geronimo.config:name=" + ObjectName.quote(configID.toString())); + configName = getConfigObjectName(configID); } catch (MalformedObjectNameException e) { throw new InvalidConfigException("Cannot convert ID to ObjectName: ", e); } load(config, rootURL, configName); return configName; + } + + public ObjectName getConfigObjectName(URI configID) throws MalformedObjectNameException { + return new ObjectName("geronimo.config:name=" + ObjectName.quote(configID.toString())); } /**