You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by gd...@apache.org on 2006/04/18 17:02:56 UTC
svn commit: r394960 - in /geronimo/branches/1.1/modules:
deployment/src/java/org/apache/geronimo/deployment/
deployment/src/java/org/apache/geronimo/deployment/util/
j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/
web-builder/src/java/org/ap...
Author: gdamour
Date: Tue Apr 18 08:02:36 2006
New Revision: 394960
URL: http://svn.apache.org/viewcvs?rev=394960&view=rev
Log:
When an EAR is deployed in-place, packed WAR and RAR defined are automatically unpacked. This is a requirement for these modules (Jetty and Tomcat
expect a WAR module unpacked and RAR have nested JAR within them).
I think that in-place deployment is now complete.
Modified:
geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/CopyResourceContext.java
geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/InPlaceResourceContext.java
geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/ResourceContext.java
geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/DeploymentUtil.java
geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java
geronimo/branches/1.1/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
geronimo/branches/1.1/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java
Modified: geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/CopyResourceContext.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/CopyResourceContext.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/CopyResourceContext.java (original)
+++ geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/CopyResourceContext.java Tue Apr 18 08:02:36 2006
@@ -151,6 +151,9 @@
return new File(baseUri.resolve(targetPath));
}
+ public void flush() throws IOException {
+ }
+
private void addFile(File targetFile, ZipFile zipFile, ZipEntry zipEntry) throws IOException {
if (zipEntry.isDirectory()) {
targetFile.mkdirs();
Modified: geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java (original)
+++ geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java Tue Apr 18 08:02:36 2006
@@ -396,6 +396,10 @@
return configuration;
}
+ public void flush() throws IOException{
+ resourceContext.flush();
+ }
+
public void close() throws IOException, DeploymentException {
if (configurationManager != null) {
try {
Modified: geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/InPlaceResourceContext.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/InPlaceResourceContext.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/InPlaceResourceContext.java (original)
+++ geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/InPlaceResourceContext.java Tue Apr 18 08:02:36 2006
@@ -19,17 +19,26 @@
import java.io.File;
import java.io.IOException;
import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.deployment.util.DeploymentUtil;
+import org.apache.geronimo.deployment.util.NestedJarFile;
import org.apache.geronimo.kernel.config.Configuration;
class InPlaceResourceContext implements ResourceContext {
+ private static final String PACKED_MODULED_SAVED_SUFFIX = ".saved";
+
private final Configuration configuration;
private final URI inPlaceBaseConfigurationUri;
+ private final Set zipFilesToExpand = new HashSet();
public InPlaceResourceContext(Configuration configuration, File inPlaceBaseConfigurationDir) throws DeploymentException {
this.configuration = configuration;
@@ -49,6 +58,13 @@
}
public void addInclude(URI targetPath, ZipFile zipFile, ZipEntry zipEntry) throws IOException {
+ if (zipFile instanceof NestedJarFile) {
+ NestedJarFile nestedJarFile = (NestedJarFile) zipFile;
+ if (nestedJarFile.isPacked()) {
+ zipFilesToExpand.add(zipFile);
+ }
+ }
+
configuration.addToClassPath(targetPath.toString());
}
@@ -61,6 +77,12 @@
}
public void addFile(URI targetPath, ZipFile zipFile, ZipEntry zipEntry) throws IOException {
+ if (zipFile instanceof NestedJarFile) {
+ NestedJarFile nestedJarFile = (NestedJarFile) zipFile;
+ if (nestedJarFile.isPacked()) {
+ zipFilesToExpand.add(zipFile);
+ }
+ }
}
public void addFile(URI targetPath, URL source) throws IOException {
@@ -78,4 +100,33 @@
if (targetPath.isOpaque()) throw new IllegalArgumentException("targetPath is opaque");
return new File(inPlaceBaseConfigurationUri.resolve(targetPath));
}
+
+ public void flush() throws IOException {
+ for (Iterator iter = zipFilesToExpand.iterator(); iter.hasNext();) {
+ ZipFile zipFile = (ZipFile) iter.next();
+ String name = zipFile.getName();
+ zipFile.close();
+ File srcFile = new File(name);
+ File targetFile;
+ if (!srcFile.isAbsolute()) {
+ srcFile = new File(inPlaceBaseConfigurationUri.resolve(name));
+ try {
+ targetFile = getTargetFile(new URI(name + PACKED_MODULED_SAVED_SUFFIX));
+ } catch (URISyntaxException e) {
+ throw new AssertionError(e);
+ }
+ } else {
+ targetFile = new File(name + PACKED_MODULED_SAVED_SUFFIX);
+ }
+ boolean success = new File(name).renameTo(targetFile);
+ if (!success) {
+ throw new IOException("Cannot rename file " +
+ name + " to " + targetFile.getAbsolutePath());
+ }
+
+ DeploymentUtil.unzipToDirectory(new ZipFile(targetFile), srcFile);
+ }
+ }
+
+
}
Modified: geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/ResourceContext.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/ResourceContext.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/ResourceContext.java (original)
+++ geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/ResourceContext.java Tue Apr 18 08:02:36 2006
@@ -42,4 +42,6 @@
void addFile(URI targetPath, String source) throws IOException;
File getTargetFile(URI targetPath);
+
+ void flush() throws IOException;
}
Modified: geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/DeploymentUtil.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/DeploymentUtil.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/DeploymentUtil.java (original)
+++ geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/DeploymentUtil.java Tue Apr 18 08:02:36 2006
@@ -16,6 +16,7 @@
*/
package org.apache.geronimo.deployment.util;
+import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -35,6 +36,7 @@
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
/**
* @version $Rev$ $Date$
@@ -241,6 +243,40 @@
}
}
+ public static void unzipToDirectory(ZipFile zipFile, File destDir) throws IOException {
+ Enumeration entries = zipFile.entries();
+ try {
+ while (entries.hasMoreElements()) {
+ ZipEntry entry = (ZipEntry) entries.nextElement();
+ if (entry.isDirectory()) {
+ File dir = new File(destDir, entry.getName());
+ boolean success = dir.mkdirs();
+ if (!success) {
+ throw new IOException("Cannot create directory " + dir.getAbsolutePath());
+ }
+ } else {
+ File file = new File(destDir, entry.getName());
+ OutputStream out = null;
+ InputStream in = null;
+ try {
+ out = new BufferedOutputStream(new FileOutputStream(file));
+ in = zipFile.getInputStream(entry);
+ writeAll(in, out);
+ } finally {
+ if (null != out) {
+ out.close();
+ }
+ if (null != in) {
+ in.close();
+ }
+ }
+ }
+ }
+ } finally {
+ zipFile.close();
+ }
+ }
+
public static boolean recursiveDelete(File root) {
if (root == null) {
return true;
Modified: geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java (original)
+++ geronimo/branches/1.1/modules/deployment/src/java/org/apache/geronimo/deployment/util/NestedJarFile.java Tue Apr 18 08:02:36 2006
@@ -215,12 +215,12 @@
return;
}
- isClosed = true;
try {
if (baseJar != null && isPacked()) {
baseJar.close();
}
} finally {
+ isClosed = true;
baseJar = null;
basePath = null;
manifestLoaded = false;
Modified: geronimo/branches/1.1/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java (original)
+++ geronimo/branches/1.1/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java Tue Apr 18 08:02:36 2006
@@ -397,6 +397,8 @@
getBuilder(module).installModule(earFile, earContext, module, configurationStores, targetConfigurationStore, repositories);
}
+ earContext.flush();
+
// give each module a chance to populate the earContext now that a classloader is available
ClassLoader cl = earContext.getClassLoader();
for (Iterator iterator = modules.iterator(); iterator.hasNext();) {
Modified: geronimo/branches/1.1/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java?rev=394960&r1=394959&r2=394960&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java (original)
+++ geronimo/branches/1.1/modules/web-builder/src/java/org/apache/geronimo/web/deployment/AbstractWebModuleBuilder.java Tue Apr 18 08:02:36 2006
@@ -226,8 +226,15 @@
throw new DeploymentException("Problem deploying war", e);
} catch (URISyntaxException e) {
throw new DeploymentException("Could not construct URI for location of war entry", e);
+ } finally {
+ if (!module.isStandAlone()) {
+ try {
+ moduleContext.flush();
+ } catch (IOException e) {
+ throw new DeploymentException("Problem closing war context", e);
+ }
+ }
}
-
}
protected void addUnmappedJSPPermissions(Set securityRoles, Map rolePermissions) {