jboynes 2004/01/21 14:19:41
Added: modules/deployment/src/java/org/apache/geronimo/deployment/tools/loader AbstractDeployable.java ApplicationDeployable.java ClientDeployable.java DeployableFactory.java WebDeployable.java Log: Oops - missed these Revision Changes Path 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/tools/loader/AbstractDeployable.java Index: AbstractDeployable.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.tools.loader; import java.io.BufferedInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import javax.enterprise.deploy.model.DDBean; import javax.enterprise.deploy.model.DDBeanRoot; import javax.enterprise.deploy.model.DeployableObject; import javax.enterprise.deploy.model.exceptions.DDBeanCreateException; import javax.enterprise.deploy.shared.ModuleType; import org.apache.geronimo.deployment.tools.DDBeanRootImpl; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/21 22:19:41 $ */ public abstract class AbstractDeployable implements DeployableObject { private final URL moduleURL; private final ModuleType type; private final DDBeanRoot root; private final ClassLoader rootCL; private final List entries; protected AbstractDeployable(ModuleType type, URL moduleURL, String rootDD) throws DDBeanCreateException { this.type = type; this.moduleURL = moduleURL; rootCL = new URLClassLoader(new URL[] {moduleURL}, Thread.currentThread().getContextClassLoader()); root = new DDBeanRootImpl(this, rootCL.getResource(rootDD)); // @todo make this work with unpacked entries = new ArrayList(); InputStream is = null; try { is = moduleURL.openStream(); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(is)); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { entries.add(entry.getName()); } } catch (IOException e) { throw (DDBeanCreateException) new DDBeanCreateException("Unable to create list of entries").initCause(e); } finally { if (is != null) { try { is.close(); } catch (IOException e1) { // ignore } } } } public ModuleType getType() { return type; } public DDBeanRoot getDDBeanRoot() { return root; } public DDBeanRoot getDDBeanRoot(String filename) throws FileNotFoundException, DDBeanCreateException { try { return new DDBeanRootImpl(null, new URL(moduleURL, filename)); } catch (MalformedURLException e) { throw (DDBeanCreateException) new DDBeanCreateException("Unable to construct URL for "+filename).initCause(e); } } public DDBean[] getChildBean(String xpath) { return root.getChildBean(xpath); } public String[] getText(String xpath) { return root.getText(xpath); } public Enumeration entries() { return Collections.enumeration(entries); } public InputStream getEntry(String name) { return rootCL.getResourceAsStream(name); } protected ClassLoader getModuleLoader() { return rootCL; } public Class getClassFromScope(String className) { try { return getModuleLoader().loadClass(className); } catch (ClassNotFoundException e) { // spec does not allow an Exception return null; } } public String getModuleDTDVersion() { throw new UnsupportedOperationException(); } } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/tools/loader/ApplicationDeployable.java Index: ApplicationDeployable.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.tools.loader; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.enterprise.deploy.model.DDBean; import javax.enterprise.deploy.model.J2eeApplicationObject; import javax.enterprise.deploy.model.XpathListener; import javax.enterprise.deploy.model.exceptions.DDBeanCreateException; import javax.enterprise.deploy.shared.ModuleType; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/21 22:19:41 $ */ public abstract class ApplicationDeployable extends AbstractDeployable implements J2eeApplicationObject { private final Map uriMap; public ApplicationDeployable(URL moduleURL) throws DDBeanCreateException { super(ModuleType.EAR, moduleURL, "META-INF/application.xml"); DDBean[] moduleBeans = getChildBean("/application/module"); uriMap = new HashMap(moduleBeans.length); for (int i = 0; i < moduleBeans.length; i++) { DDBean moduleBean = moduleBeans[i]; String uri; } } public void addXpathListener(ModuleType type, String xpath, XpathListener xpl) { } public void removeXpathListener(ModuleType type, String xpath, XpathListener xpl) { } } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/tools/loader/ClientDeployable.java Index: ClientDeployable.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.tools.loader; import java.net.URL; import javax.enterprise.deploy.model.exceptions.DDBeanCreateException; import javax.enterprise.deploy.shared.ModuleType; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/21 22:19:41 $ */ public class ClientDeployable extends AbstractDeployable { public ClientDeployable(URL moduleURL) throws DDBeanCreateException { super(ModuleType.CAR, moduleURL, "META-INF/application-client.xml"); } } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/tools/loader/DeployableFactory.java Index: DeployableFactory.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.tools.loader; import java.net.URL; import java.net.URLClassLoader; import javax.enterprise.deploy.model.DeployableObject; import javax.enterprise.deploy.model.exceptions.DDBeanCreateException; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/21 22:19:41 $ */ public class DeployableFactory { public static DeployableObject createDeployable(URL moduleURL) throws DDBeanCreateException { ClassLoader cl = new URLClassLoader(new URL[] {moduleURL}, ClassLoader.getSystemClassLoader()); if (cl.getResource("META-INF/application.xml") != null) { // EAR file // return new ApplicationDeployable(moduleFile.toURL()); throw new UnsupportedOperationException(); } else if (cl.getResource("META-INF/application-client.xml") != null) { // Application Client return new ClientDeployable(moduleURL); } else if (cl.getResource("WEB-INF/web.xml") != null) { // WAR throw new UnsupportedOperationException(); } else if (cl.getResource("META-INF/ejb-jar.xml") != null) { // EJB Jar throw new UnsupportedOperationException(); } else if (cl.getResource("META-INF/ra.xml") != null) { // Connector throw new UnsupportedOperationException(); } else { throw new DDBeanCreateException("Unrecognized archive: " + moduleURL); } } } 1.1 incubator-geronimo/modules/deployment/src/java/org/apache/geronimo/deployment/tools/loader/WebDeployable.java Index: WebDeployable.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.tools.loader; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import javax.enterprise.deploy.model.exceptions.DDBeanCreateException; import javax.enterprise.deploy.shared.ModuleType; /** * * * @version $Revision: 1.1 $ $Date: 2004/01/21 22:19:41 $ */ public class WebDeployable extends AbstractDeployable { private final ClassLoader webLoader; public WebDeployable(URL moduleURL) throws DDBeanCreateException { super(ModuleType.WAR, moduleURL, "WEB-INF/web.xml"); ClassLoader parent = super.getModuleLoader(); List path = new ArrayList(); path.add(parent.getResource("WEB-INF/classes/")); Enumeration e = entries(); while (e.hasMoreElements()) { String entry = (String) e.nextElement(); if (entry.startsWith("WEB-INF/lib/")) { String jarName = entry.substring(12); if (jarName.indexOf('/') == -1 && (jarName.endsWith(".jar") || jarName.endsWith(".zip"))) { path.add(parent.getResource(entry)); } } } webLoader = new URLClassLoader((URL[]) path.toArray(new URL[path.size()]), parent); } protected ClassLoader getModuleLoader() { return webLoader; } }