Author: dain Date: Tue Sep 21 23:34:25 2004 New Revision: 47031 Modified: geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/JarUtil.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Log: Fixed a lot of deployment problems that leaked back in during my last rewrite
Modified: geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java ============================================================================== --- geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original) +++ geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Tue Sep 21 23:34:25 2004 @@ -200,7 +200,7 @@ } public Module createModule(String name, JarFile moduleFile, XmlObject vendorDD) throws DeploymentException { - return createModule(name, URI.create("/"), moduleFile, "connector", vendorDD, null); + return createModule(name, URI.create("/"), moduleFile, "app-client", vendorDD, null); } public Module createModule(String name, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject vendorDD, URL specDD) throws DeploymentException { @@ -395,7 +395,7 @@ Map resourceEnvRefMap = mapRefs(geronimoAppClient.getResourceEnvRefArray()); return ENCConfigBuilder.buildComponentContext(earContext, - URI.create(appClientModule.getTargetPath()), + appClientModule.getModuleURI(), null, appClient.getEnvEntryArray(), appClient.getEjbRefArray(), ejbRefMap, Modified: geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java ============================================================================== --- geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java (original) +++ geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java Tue Sep 21 23:34:25 2004 @@ -225,14 +225,18 @@ public void installModule(JarFile earFile, EARContext earContext, Module module) throws DeploymentException { try { - URI moduleBase = URI.create(module.getTargetPath()); + String targetPath = module.getTargetPath(); + if (!targetPath.endsWith("/")) { + targetPath += "/"; + } + URI targetURI = URI.create(targetPath); JarFile moduleFile = module.getModuleFile(); Enumeration entries = moduleFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); - URI target = moduleBase.resolve(entry.getName()); + URI target = targetURI.resolve(entry.getName()); InputStream in = moduleFile.getInputStream(entry); try { if (entry.getName().endsWith(".jar")) { Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java Tue Sep 21 23:34:25 2004 @@ -109,7 +109,7 @@ } } try { - File carfile = File.createTempFile("deployer", ".car"); + File carfile = FileUtil.createTempFile(); try { Manifest manifest = new Manifest(); @@ -173,7 +173,7 @@ boolean saveOutput; if (cmd.carfile == null) { saveOutput = false; - cmd.carfile = File.createTempFile("deployer", ".car"); + cmd.carfile = FileUtil.createTempFile(); } else { saveOutput = true; } Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java Tue Sep 21 23:34:25 2004 @@ -201,6 +201,7 @@ URI uri = (URI) i.next(); urls[j++] = (URL) includes.get(uri); } + return new URLClassLoader(urls, parentCL); } Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java Tue Sep 21 23:34:25 2004 @@ -34,6 +34,7 @@ import org.apache.geronimo.kernel.KernelMBean; import org.apache.geronimo.deployment.plugin.TargetModuleIDImpl; +import org.apache.geronimo.deployment.util.FileUtil; /** * @version $Rev$ $Date$ @@ -72,11 +73,11 @@ try { if (spool) { if (moduleStream != null) { - moduleArchive = File.createTempFile("deployer", ".tmp"); + moduleArchive = FileUtil.createTempFile(); copyTo(moduleArchive, moduleStream); } if (deploymentStream != null) { - deploymentPlan = File.createTempFile("deployer", ".tmp"); + deploymentPlan = FileUtil.createTempFile(); copyTo(deploymentPlan, deploymentStream); } } Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/FileUtil.java Tue Sep 21 23:34:25 2004 @@ -32,9 +32,14 @@ * @version $Rev$ $Date$ */ public class FileUtil { - private static int i; + public static File createTempFile() throws IOException { + File tempFile = File.createTempFile("geronimodeployment" + i++, "tmp"); + tempFile.deleteOnExit(); + return tempFile; + } + public static File toTempFile(InputStream is) throws IOException { return toTempFile(is, false); } @@ -42,7 +47,7 @@ public static File toTempFile(InputStream in, boolean close) throws IOException { OutputStream out = null; try { - File tempFile = File.createTempFile("geronimodeployment" + i++, "tmp"); + File tempFile = createTempFile(); out = new FileOutputStream(tempFile); byte[] buffer = new byte[4096]; Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/JarUtil.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/JarUtil.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/JarUtil.java Tue Sep 21 23:34:25 2004 @@ -22,10 +22,10 @@ import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; +import java.util.Enumeration; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; import java.util.jar.Manifest; -import java.util.Enumeration; import java.util.zip.ZipEntry; import org.apache.geronimo.deployment.DeploymentException; @@ -37,9 +37,8 @@ public static final File DUMMY_JAR_FILE; static { try { - DUMMY_JAR_FILE = File.createTempFile("fake", null); + DUMMY_JAR_FILE = FileUtil.createTempFile(); new JarOutputStream(new FileOutputStream(DUMMY_JAR_FILE), new Manifest()).close(); - DUMMY_JAR_FILE.deleteOnExit(); } catch (IOException e) { throw new ExceptionInInitializerError(e); } @@ -72,11 +71,20 @@ // this is a plain old jar... nothign special return new File(inputJar.getName()); } else if (inputJar instanceof NestedJarFile && ((NestedJarFile)inputJar).isPacked()) { - JarFile nestedBaseJar = ((NestedJarFile)inputJar).getBaseJar(); - return new File(nestedBaseJar.getName()); + NestedJarFile nestedJarFile = (NestedJarFile)inputJar; + JarFile baseJar = nestedJarFile.getBaseJar(); + String basePath = nestedJarFile.getBasePath(); + if (baseJar instanceof UnpackedJarFile) { + // our target jar is just a file in upacked jar (a plain old directory)... now + // we just need to find where it is + return ((UnpackedJarFile)baseJar).getFile(basePath); + } else { + // out target is just a plain old jar file directly accessabel from the file system + return new File(baseJar.getName()); + } } else { // copy out the module contents to a standalone jar file (entry by entry) - File jarFile = File.createTempFile("geronimo", null); + File jarFile = FileUtil.createTempFile(); JarOutputStream out = new JarOutputStream(new FileOutputStream(jarFile)); try { @@ -84,7 +92,6 @@ Enumeration entries = inputJar.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); - InputStream in = inputJar.getInputStream(entry); try { out.putNextEntry(new ZipEntry(entry.getName())); @@ -110,6 +117,41 @@ } catch (IOException e) { } } + } + } + + public static final class EmptyInputStream extends InputStream { + public int read() { + return -1; + } + + public int read(byte b[]) { + return -1; + } + + public int read(byte b[], int off, int len) { + return -1; + } + + public long skip(long n) { + return 0; + } + + public int available() { + return 0; + } + + public void close() { + } + + public synchronized void mark(int readlimit) { + } + + public synchronized void reset() { + } + + public boolean markSupported() { + return false; } } } Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java Tue Sep 21 23:34:25 2004 @@ -135,7 +135,7 @@ JarEntry baseEntry = (JarEntry) iterator.next(); String path = baseEntry.getName(); if (path.startsWith(basePath)) { - entries.add(new NestedJarEntry(path.substring(path.length()), baseEntry, getManifestSafe())); + entries.add(new NestedJarEntry(path.substring(basePath.length()), baseEntry, getManifestSafe())); } } return Collections.enumeration(entries); @@ -152,7 +152,7 @@ if (baseEntry == null) { throw new IOException("Entry not found: name=" + baseEntry.getName()); } else if (baseEntry.isDirectory()) { - throw new IOException("Entry is a directory: name=" + baseEntry.getName()); + return new JarUtil.EmptyInputStream(); } return baseJar.getInputStream(baseEntry); } @@ -188,4 +188,5 @@ } return manifest; } + } Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java ============================================================================== --- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java (original) +++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/util/UnpackedJarFile.java Tue Sep 21 23:34:25 2004 @@ -121,7 +121,7 @@ if (file == null) { throw new IOException("Entry not found: name=" + file.getAbsolutePath()); } else if (file.isDirectory()) { - throw new IOException("Entry is a directory: name=" + file.getAbsolutePath()); + return new JarUtil.EmptyInputStream(); } return new FileInputStream(file); } @@ -144,7 +144,7 @@ protected void finalize() throws IOException { } - private File getFile(String name) { + public File getFile(String name) { File file = new File(baseDir, name); if (!file.exists()) { return null; Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java ============================================================================== --- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java (original) +++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java Tue Sep 21 23:34:25 2004 @@ -23,12 +23,12 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; import java.util.Set; -import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.zip.ZipEntry; @@ -195,7 +195,7 @@ } public Module createModule(String name, JarFile moduleFile, XmlObject vendorDD) throws DeploymentException { - return createModule(name, URI.create("/"), moduleFile, "connector", vendorDD, null); + return createModule(name, URI.create(""), moduleFile, "war/", vendorDD, null); } public Module createModule(String name, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject vendorDD, URL specDD) throws DeploymentException { @@ -229,21 +229,24 @@ return module; } - public void installModule(JarFile earFile, EARContext earContext, Module webModule) throws DeploymentException { + public void installModule(JarFile earFile, EARContext earContext, Module module) throws DeploymentException { try { - URI targetURI = URI.create(webModule.getTargetPath()); + String targetPath = module.getTargetPath(); + if (!targetPath.endsWith("/")) { + targetPath += "/"; + } + URI targetURI = URI.create(targetPath); // add the warfile's content to the configuration - JarFile warFile = webModule.getModuleFile(); + JarFile warFile = module.getModuleFile(); Enumeration entries = warFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); URI target = targetURI.resolve(entry.getName()); - - if ( entry.getName().equals("WEB-INF/web.xml")) { + if (entry.getName().equals("WEB-INF/web.xml")) { // TODO gets rid of these tests when Jetty will use the serialized Geronimo DD. WebAppDocument webAppDoc = WebAppDocument.Factory.newInstance(); - webAppDoc.setWebApp((WebAppType) webModule.getSpecDD()); + webAppDoc.setWebApp((WebAppType) module.getSpecDD()); earContext.addFile(target, webAppDoc.newInputStream()); } else { InputStream in = warFile.getInputStream(entry); @@ -259,7 +262,7 @@ } // add the dependencies declared in the geronimo-jetty.xml file - JettyWebAppType jettyWebApp = (JettyWebAppType) webModule.getVendorDD(); + JettyWebAppType jettyWebApp = (JettyWebAppType) module.getVendorDD(); JettyDependencyType[] dependencies = jettyWebApp.getDependencyArray(); for (int i = 0; i < dependencies.length; i++) { earContext.addDependency(getDependencyURI(dependencies[i])); @@ -351,7 +354,7 @@ Map resourceEnvRefMap = mapRefs(jettyWebApp.getResourceEnvRefArray()); return ENCConfigBuilder.buildComponentContext(earContext, - URI.create(webModule.getTargetPath()), + webModule.getModuleURI(), userTransaction, webApp.getEnvEntryArray(), webApp.getEjbRefArray(), ejbRefMap,