You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2004/09/30 07:25:00 UTC
svn commit: rev 47555 - in geronimo/trunk/modules: client-builder/src/java/org/apache/geronimo/client/builder j2ee/src/java/org/apache/geronimo/j2ee/deployment
Author: dain
Date: Wed Sep 29 22:25:00 2004
New Revision: 47555
Modified:
geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARContext.java
Log:
Added support for manifest classpath entires in an application client
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 Wed Sep 29 22:25:00 2004
@@ -251,6 +251,7 @@
// get the app client main class
JarFile moduleFile = module.getModuleFile();
String mainClasss = null;
+ String classPath = null;
try {
Manifest manifest = moduleFile.getManifest();
if (manifest == null) {
@@ -260,6 +261,10 @@
if (mainClasss == null) {
throw new DeploymentException("App client module jar does not have Main-Class defined in the manifest: " + moduleFile.getName());
}
+ classPath = manifest.getMainAttributes().getValue(Attributes.Name.CLASS_PATH);
+ if (module.isStandAlone() && classPath != null) {
+ throw new DeploymentException("Manifest class path entry is not allowed in a standalone jar (J2EE 1.4 Section 8.2)");
+ }
} catch (IOException e) {
throw new DeploymentException("Could not get manifest from app client module: " + moduleFile.getName());
}
@@ -341,7 +346,8 @@
// extract the client Jar file into a standalone packed jar file and add the contents to the output
File appClientJarFile = JarUtil.extractToPackedJar(moduleFile);
- appClientDeploymentContext.addInclude(URI.create(module.getTargetPath()), appClientJarFile.toURL());
+ URI moduleBase = new URI(appClientModule.getTargetPath());
+ appClientDeploymentContext.addInclude(moduleBase, appClientJarFile.toURL());
// add the includes
GerDependencyType[] includes = geronimoAppClient.getIncludeArray();
@@ -373,6 +379,9 @@
appClientDeploymentContext.addDependency(getDependencyURI(dependencies[i]));
}
+ appClientDeploymentContext.addManifestClassPath(appClientModule.getEarFile(), appClientModule, moduleFile, moduleBase);
+
+
// get the classloader
ClassLoader appClientClassLoader = appClientDeploymentContext.getClassLoader(repository);
@@ -399,7 +408,7 @@
connectorFile = new JarFile(pathURL.getFile());
} else {
path = resource.getInternalRar();
- connectorFile = new NestedJarFile(appClientModule.getEarFile(), path);
+ connectorFile = new NestedJarFile(appClientModule.getEarFile(), path);
}
XmlObject connectorPlan = resource.getConnector();
Module connectorModule = connectorModuleBuilder.createModule(connectorPlan, connectorFile, path, null);
Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARContext.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARContext.java (original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARContext.java Wed Sep 29 22:25:00 2004
@@ -17,15 +17,23 @@
package org.apache.geronimo.j2ee.deployment;
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import java.util.StringTokenizer;
import java.util.jar.JarOutputStream;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+import java.util.jar.Attributes;
+import java.io.IOException;
+import java.io.File;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import org.apache.geronimo.deployment.DeploymentContext;
import org.apache.geronimo.deployment.DeploymentException;
+import org.apache.geronimo.deployment.util.JarUtil;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.kernel.config.ConfigurationModuleType;
@@ -156,4 +164,48 @@
public String getResourceAdapterModule(String resourceAdapterName) {
return (String) resourceAdapterModules.get(resourceAdapterName);
}
+
+ public void addManifestClassPath(JarFile earFile, Module module, JarFile jarFile, URI baseUri) throws DeploymentException, URISyntaxException, IOException {
+ String classPath = null;
+ try {
+ Manifest manifest = jarFile.getManifest();
+ if (manifest == null) {
+ return;
+ }
+ classPath = manifest.getMainAttributes().getValue(Attributes.Name.CLASS_PATH);
+ if (classPath == null) {
+ return;
+ }
+ } catch (IOException e) {
+ throw new DeploymentException("Could not get manifest from app client module: " + jarFile.getName());
+ }
+
+ for (StringTokenizer tokenizer = new StringTokenizer(classPath, " "); tokenizer.hasMoreTokens();) {
+ URI uri = new URI(tokenizer.nextToken());
+ if (!uri.getPath().endsWith(".jar")) {
+ throw new DeploymentException("Manifest class path entries must end with the .jar extension (J2EE 1.4 Section 8.2)");
+ }
+ if (uri.isAbsolute()) {
+ throw new DeploymentException("Manifest class path entries must be relative (J2EE 1.4 Section 8.2)");
+ }
+
+ URI path = baseUri.resolve(uri);
+ File classPathFile = JarUtil.toFile(earFile, path.getPath());
+
+ // before going to the work of adding this file, let's make sure it really is a jar file
+ JarFile classPathJar;
+ try {
+ classPathJar = new JarFile(classPathFile);
+ } catch (IOException e) {
+ throw new DeploymentException("Manifest class path entries must be a valid jar file (J2EE 1.4 Section 8.2)", e);
+ }
+
+ // add this class path jar to the output context
+ addInclude(path, classPathFile.toURL());
+
+ // add the client jars of this class path jar
+ addManifestClassPath(earFile, module, classPathJar, path);
+ }
+ }
+
}