You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ge...@apache.org on 2011/05/30 15:50:58 UTC
svn commit: r1129174 - in /geronimo/server/trunk:
framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/
plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/
plugins/openejb/geronimo-open...
Author: genspring
Date: Mon May 30 13:50:57 2011
New Revision: 1129174
URL: http://svn.apache.org/viewvc?rev=1129174&view=rev
Log:
EJB31 spec EE.8.2.1 :
A JAR format file (such as a .jar file, .war file, or .rar file) may reference a
.jar file or directory by naming the referenced .jar file or directory in a
Class-Path header in the referencing JAR file’s Manifest file
Modified:
geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
Modified: geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java?rev=1129174&r1=1129173&r2=1129174&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java Mon May 30 13:50:57 2011
@@ -136,11 +136,13 @@ public class ClassPathUtils {
if (!targetUri.getPath().endsWith("/")) {
targetUri = URI.create(targetUri.getPath() + "/");
}
+
+ //1, add the directory to classpath
+ classPath.add(targetUri.getPath());
+
+ //2, add *.jar under the directory to classpath
for (File file : factory.listFiles(targetUri)) {
- if (file.isDirectory()) {
- log.debug("Sub directory [" + file.getAbsolutePath() + "] in the manifest entry directory is ignored");
- continue;
- }
+
if (!file.getName().endsWith(".jar")) {
log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
continue;
@@ -149,15 +151,6 @@ public class ClassPathUtils {
}
} else {
if (!pathUri.getPath().endsWith(".jar")) {
- if (manifestClassLoaderMode == MFCP_STRICT) {
- problems.add(new DeploymentException(
- "Manifest class path entries must end with the .jar extension (J2EE 1.4 Section 8.2): path= "
- + path + ", module= " + moduleBaseUri));
- } else {
- log.info("The " + manifestClassLoaderMessage + " processing mode is in effect.\n"
- + "Therefore, a manifest classpath entry which does not end with .jar, "
- + pathUri + " is being permitted and ignored.");
- }
continue;
}
classPath.add(targetUri.getPath());
@@ -234,6 +227,32 @@ public class ClassPathUtils {
}
URI targetUri = moduleBaseUri.resolve(pathUri);
+
+ try {
+ if (factory.isDirectory(targetUri)) {
+ if (!targetUri.getPath().endsWith("/")) {
+ targetUri = URI.create(targetUri.getPath() + "/");
+ }
+
+ //1, add the directory to classpath
+ addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
+
+ //2, add *.jar under the directory to classpath
+ for (File file : factory.listFiles(targetUri)) {
+
+ if (!file.getName().endsWith(".jar")) {
+ log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
+ continue;
+ }
+ addToClassPath(moduleBaseUri, resolutionUri, targetUri.resolve(file.getName()), classpath, exclusions, factory, problems);
+ }
+ } else {
+ if (!pathUri.getPath().endsWith(".jar")) {
+ continue;
+ }
+ addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
+ }
+ } catch (IOException e) {}
try {
if (factory.isDirectory(targetUri)) {
@@ -281,7 +300,7 @@ public class ClassPathUtils {
private static void addToClassPath(URI moduleBaseUri, URI resolutionUri, URI targetUri, Collection<String> classpath, Collection<String> exclusions, JarFileFactory factory, List<DeploymentException> problems) throws DeploymentException {
String targetEntry = targetUri.toString();
- if (exclusions.contains(targetEntry)) {
+ if (exclusions!=null && exclusions.contains(targetEntry)) {
return;
}
URI resolvedUri = resolutionUri.resolve(targetUri);
@@ -291,6 +310,11 @@ public class ClassPathUtils {
return;
}
classpath.add(classpathEntry);
+
+ if (!classpathEntry.endsWith(".jar")){
+ return;
+ }
+
JarFile classPathJarFile;
try {
classPathJarFile = factory.newJarFile(targetUri);
Modified: geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Mon May 30 13:50:57 2011
@@ -25,12 +25,15 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.StringTokenizer;
import java.util.jar.Attributes;
+import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
import java.util.zip.ZipEntry;
@@ -563,12 +566,9 @@ public class AppClientModuleBuilder impl
appClientModule.setEarContext(appClientDeploymentContext);
appClientModule.setRootEarContext(appClientDeploymentContext);
- try {
- appClientDeploymentContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
- } catch (IOException e) {
- throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
- }
- if (module.getParentModule() != null) {
+
+ if (module.getParentModule() != null) {
+
Collection<String> libClasspath = module.getParentModule().getClassPath();
for (String libEntryPath : libClasspath) {
try {
@@ -579,12 +579,65 @@ public class AppClientModuleBuilder impl
}
}
module.getClassPath().addAll(libClasspath);
+
+
+ Enumeration<JarEntry> ear_entries = earFile.entries();
+
+ //Copy non archive files from ear file to appclient configuration. These
+ // files are needed when caculating dir classpath in manifest.
+ while (ear_entries.hasMoreElements()) {
+
+ ZipEntry ear_entry = ear_entries.nextElement();
+ URI targetPath = module.getParentModule().resolve(ear_entry.getName());
+
+ if (!ear_entry.getName().endsWith(".jar") && !ear_entry.getName().endsWith(".war")
+ && !ear_entry.getName().endsWith(".rar") && !ear_entry.getName().startsWith("META-INF"))
+ {
+ appClientDeploymentContext.addFile(targetPath, earFile, ear_entry);
+ }
}
+
+ Collection<String> appClientModuleClasspaths = module.getClassPath();
+
+ try {
+ // extract the client Jar file into a standalone packed jar file and add the contents to the output
+ URI moduleBase = new URI(module.getTargetPath());
+ appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
+ // add manifest class path entries to the app client context
+ addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
+
+
+ } catch (IOException e) {
+ throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
+ } catch (URISyntaxException e) {
+ throw new DeploymentException("Unable to get app client module base URI " + module.getTargetPath(), e);
+ }
+
+ appClientModuleClasspaths.add(module.getTargetPath());
+ EARContext moduleContext = module.getEarContext();
+ Collection<String> moduleLocations = module.getParentModule().getModuleLocations();
+ URI baseUri = URI.create(module.getTargetPath());
+ moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), appClientModuleClasspaths, moduleLocations);
+
+
+ for (String classpath: appClientModuleClasspaths){
+ appClientDeploymentContext.addToClassPath(classpath);
+
+ //Copy needed jar from ear to appclient configuration.
+ if (classpath.endsWith(".jar")){
+
+ NestedJarFile library = new NestedJarFile(earFile, classpath);
+ appClientDeploymentContext.addIncludeAsPackedJar(URI.create(classpath), library);
+
+ }
+ }
+ }
+
} catch (DeploymentException e) {
throw e;
} catch (IOException e) {
throw new DeploymentException(e);
- }
+ }
for (Module connectorModule : appClientModule.getModules()) {
if (connectorModule instanceof ConnectorModule) {
getConnectorModuleBuilder().installModule(connectorModule.getModuleFile(), appClientDeploymentContext, connectorModule, configurationStores, targetConfigurationStore, repositories);
@@ -652,25 +705,12 @@ public class AppClientModuleBuilder impl
}
}
- // Create a Module ID Builder defaulting to similar settings to use for any children we create
- ModuleIDBuilder idBuilder = new ModuleIDBuilder();
- idBuilder.setDefaultGroup(appClientModule.getEnvironment().getConfigId().getGroupId());
- idBuilder.setDefaultVersion(appClientModule.getEnvironment().getConfigId().getVersion());
+
try {
try {
//register the message destinations in the app client ear context.
namingBuilders.initContext(appClient, geronimoAppClient, appClientModule);
- // extract the client Jar file into a standalone packed jar file and add the contents to the output
- URI moduleBase = new URI(appClientModule.getTargetPath());
- try {
- appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
- } catch (IOException e) {
- throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
- }
-
- // add manifest class path entries to the app client context
- addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
// get the classloader
Bundle appClientClassBundle = appClientDeploymentContext.getDeploymentBundle();
@@ -896,12 +936,11 @@ public class AppClientModuleBuilder impl
throw new DeploymentException("Invalid manifest classpath entry: jarFile=" + jarFileLocation + ", path=" + path, e);
}
- if (!pathUri.getPath().endsWith(".jar")) {
- throw new DeploymentException("Manifest class path entries must end with the .jar extension (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
- }
if (pathUri.isAbsolute()) {
throw new DeploymentException("Manifest class path entries must be relative (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
}
+
+ Enumeration<JarEntry> ear_entries = earFile.entries();
// determine the target file
URI classPathJarLocation = jarFileLocation.resolve(pathUri);
@@ -915,23 +954,44 @@ public class AppClientModuleBuilder impl
if (entry == null) {
throw new DeploymentException("Cound not find manifest class path entry: jarFile=" + jarFileLocation + ", path=" + path);
}
-
+
try {
- // copy the file into the output context
- deploymentContext.addFile(classPathJarLocation, earFile, entry);
+
+ if (!entry.getName().endsWith(".jar")) {
+
+ while (ear_entries.hasMoreElements()) {
+ ZipEntry ear_entry = ear_entries.nextElement();
+ URI targetPath = jarFileLocation.resolve(ear_entry.getName());
+ if (ear_entry.getName().startsWith(classPathJarLocation.getPath()))
+ deploymentContext.addFile(targetPath, earFile, ear_entry);
+ }
+ } else {
+
+ // copy the file into the output context
+ deploymentContext.addFile(classPathJarLocation, earFile, entry);
+ }
} catch (IOException e) {
- throw new DeploymentException("Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation + ", path=" + path, e);
+ throw new DeploymentException(
+ "Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation
+ + ", path=" + path, e);
}
JarFile classPathJarFile;
- try {
- classPathJarFile = new JarFile(classPathFile);
- } catch (IOException e) {
- throw new DeploymentException("Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path, e);
- }
+
+ if (classPathFile.getName().endsWith(".jar")) {
- // add the client jars of this class path jar
- addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
+ try {
+ classPathJarFile = new JarFile(classPathFile);
+ } catch (IOException e) {
+ throw new DeploymentException(
+ "Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile="
+ + jarFileLocation + ", path=" + path, e);
+ }
+
+ // add the client jars of this class path jar
+ addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
+
+ }
}
}
}
Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Mon May 30 13:50:57 2011
@@ -362,7 +362,7 @@ public class EjbModuleBuilder implements
- detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
+ detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
ResourceFinder finder = new ResourceFinder("", detectTempClassLoader, baseUrl);
@@ -397,7 +397,7 @@ public class EjbModuleBuilder implements
libURLs.clear();
libURLs.add(baseUrl);
- ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
+ ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
// create the EJB Module
@@ -670,8 +670,12 @@ public class EjbModuleBuilder implements
// extract the ejbJar file into a standalone packed jar file and add the contents to the output
earContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
// add manifest class path entries to the ejb module classpath
- Set<String> EjbModuleClasspaths = module.getClassPath();
- earContext.addManifestClassPath(moduleFile, URI.create("."), EjbModuleClasspaths);
+ Collection<String> EjbModuleClasspaths = module.getClassPath();
+ EjbModuleClasspaths.add(module.getTargetPath());
+ Collection<String> moduleLocations = module.isStandAlone() ? null : module.getParentModule()
+ .getModuleLocations();
+ URI baseUri = URI.create(module.getTargetPath());
+ earContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), EjbModuleClasspaths, moduleLocations);
for (String classpath:EjbModuleClasspaths){
earContext.addToClassPath(classpath);
@@ -728,12 +732,7 @@ public class EjbModuleBuilder implements
private void doInitContext(EARContext earContext, Module module, Bundle bundle) throws DeploymentException {
EjbModule ejbModule = (EjbModule) module;
- Collection<String> manifestcp = module.getClassPath();
- manifestcp.add(module.getTargetPath());
- EARContext moduleContext = module.getEarContext();
- Collection<String> moduleLocations = EARContext.MODULE_LIST_KEY.get(module.getRootEarContext().getGeneralData());
- URI baseUri = URI.create(module.getTargetPath());
- moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), manifestcp, moduleLocations);
+
GeronimoEjbInfo ejbInfo = getEjbInfo(earContext, ejbModule, bundle);
Re: svn commit: r1129174 - in /geronimo/server/trunk: framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ plugins/openejb/geronimo-open...
Posted by Kevan Miller <ke...@gmail.com>.
On Jun 1, 2011, at 5:22 PM, David Jencks wrote:
> But first please explain why you think this change is correct. It looks wrong to me, and I think the test was correct. Maybe i don't understand what the test is doing, but I don't think "libfolder/" is in the "manifest classpath" being tested but it shows up in the results. Why should it?
Shawn,
Did we get an answer to David's questions including the MFCP_STRICT change?
--kevan
Re: svn commit: r1129174 - in /geronimo/server/trunk: framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ plugins/openejb/geronimo-open...
Posted by David Jencks <da...@yahoo.com>.
But first please explain why you think this change is correct. It looks wrong to me, and I think the test was correct. Maybe i don't understand what the test is doing, but I don't think "libfolder/" is in the "manifest classpath" being tested but it shows up in the results. Why should it?
thanks
david jencks
On Jun 1, 2011, at 2:02 PM, Kevan Miller wrote:
> This commit broke the build. See http://ci.apache.org/builders/geronimo-server-trunk/builds/41
>
> Can you fix the test errors?
>
> --kevan
>
> On May 30, 2011, at 9:50 AM, genspring@apache.org wrote:
>
>> Author: genspring
>> Date: Mon May 30 13:50:57 2011
>> New Revision: 1129174
>>
>> URL: http://svn.apache.org/viewvc?rev=1129174&view=rev
>> Log:
>> EJB31 spec EE.8.2.1 :
>> A JAR format file (such as a .jar file, .war file, or .rar file) may reference a
>> .jar file or directory by naming the referenced .jar file or directory in a
>> Class-Path header in the referencing JAR file’s Manifest file
>>
>> Modified:
>> geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
>> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
>> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
>>
>> Modified: geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
>> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java?rev=1129174&r1=1129173&r2=1129174&view=diff
>> ==============================================================================
>> --- geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java (original)
>> +++ geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java Mon May 30 13:50:57 2011
>> @@ -136,11 +136,13 @@ public class ClassPathUtils {
>> if (!targetUri.getPath().endsWith("/")) {
>> targetUri = URI.create(targetUri.getPath() + "/");
>> }
>> +
>> + //1, add the directory to classpath
>> + classPath.add(targetUri.getPath());
>> +
>> + //2, add *.jar under the directory to classpath
>> for (File file : factory.listFiles(targetUri)) {
>> - if (file.isDirectory()) {
>> - log.debug("Sub directory [" + file.getAbsolutePath() + "] in the manifest entry directory is ignored");
>> - continue;
>> - }
>> +
>> if (!file.getName().endsWith(".jar")) {
>> log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
>> continue;
>> @@ -149,15 +151,6 @@ public class ClassPathUtils {
>> }
>> } else {
>> if (!pathUri.getPath().endsWith(".jar")) {
>> - if (manifestClassLoaderMode == MFCP_STRICT) {
>> - problems.add(new DeploymentException(
>> - "Manifest class path entries must end with the .jar extension (J2EE 1.4 Section 8.2): path= "
>> - + path + ", module= " + moduleBaseUri));
>> - } else {
>> - log.info("The " + manifestClassLoaderMessage + " processing mode is in effect.\n"
>> - + "Therefore, a manifest classpath entry which does not end with .jar, "
>> - + pathUri + " is being permitted and ignored.");
>> - }
>> continue;
>> }
>> classPath.add(targetUri.getPath());
>> @@ -234,6 +227,32 @@ public class ClassPathUtils {
>> }
>>
>> URI targetUri = moduleBaseUri.resolve(pathUri);
>> +
>> + try {
>> + if (factory.isDirectory(targetUri)) {
>> + if (!targetUri.getPath().endsWith("/")) {
>> + targetUri = URI.create(targetUri.getPath() + "/");
>> + }
>> +
>> + //1, add the directory to classpath
>> + addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
>> +
>> + //2, add *.jar under the directory to classpath
>> + for (File file : factory.listFiles(targetUri)) {
>> +
>> + if (!file.getName().endsWith(".jar")) {
>> + log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
>> + continue;
>> + }
>> + addToClassPath(moduleBaseUri, resolutionUri, targetUri.resolve(file.getName()), classpath, exclusions, factory, problems);
>> + }
>> + } else {
>> + if (!pathUri.getPath().endsWith(".jar")) {
>> + continue;
>> + }
>> + addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
>> + }
>> + } catch (IOException e) {}
>>
>> try {
>> if (factory.isDirectory(targetUri)) {
>> @@ -281,7 +300,7 @@ public class ClassPathUtils {
>>
>> private static void addToClassPath(URI moduleBaseUri, URI resolutionUri, URI targetUri, Collection<String> classpath, Collection<String> exclusions, JarFileFactory factory, List<DeploymentException> problems) throws DeploymentException {
>> String targetEntry = targetUri.toString();
>> - if (exclusions.contains(targetEntry)) {
>> + if (exclusions!=null && exclusions.contains(targetEntry)) {
>> return;
>> }
>> URI resolvedUri = resolutionUri.resolve(targetUri);
>> @@ -291,6 +310,11 @@ public class ClassPathUtils {
>> return;
>> }
>> classpath.add(classpathEntry);
>> +
>> + if (!classpathEntry.endsWith(".jar")){
>> + return;
>> + }
>> +
>> JarFile classPathJarFile;
>> try {
>> classPathJarFile = factory.newJarFile(targetUri);
>>
>> Modified: geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
>> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
>> ==============================================================================
>> --- geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original)
>> +++ geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Mon May 30 13:50:57 2011
>> @@ -25,12 +25,15 @@ import java.net.URL;
>> import java.util.ArrayList;
>> import java.util.Collection;
>> import java.util.Collections;
>> +import java.util.Enumeration;
>> import java.util.HashMap;
>> import java.util.LinkedList;
>> import java.util.List;
>> import java.util.Map;
>> +import java.util.Set;
>> import java.util.StringTokenizer;
>> import java.util.jar.Attributes;
>> +import java.util.jar.JarEntry;
>> import java.util.jar.JarFile;
>> import java.util.jar.Manifest;
>> import java.util.zip.ZipEntry;
>> @@ -563,12 +566,9 @@ public class AppClientModuleBuilder impl
>> appClientModule.setEarContext(appClientDeploymentContext);
>> appClientModule.setRootEarContext(appClientDeploymentContext);
>>
>> - try {
>> - appClientDeploymentContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
>> - } catch (IOException e) {
>> - throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
>> - }
>> - if (module.getParentModule() != null) {
>> +
>> + if (module.getParentModule() != null) {
>> +
>> Collection<String> libClasspath = module.getParentModule().getClassPath();
>> for (String libEntryPath : libClasspath) {
>> try {
>> @@ -579,12 +579,65 @@ public class AppClientModuleBuilder impl
>> }
>> }
>> module.getClassPath().addAll(libClasspath);
>> +
>> +
>> + Enumeration<JarEntry> ear_entries = earFile.entries();
>> +
>> + //Copy non archive files from ear file to appclient configuration. These
>> + // files are needed when caculating dir classpath in manifest.
>> + while (ear_entries.hasMoreElements()) {
>> +
>> + ZipEntry ear_entry = ear_entries.nextElement();
>> + URI targetPath = module.getParentModule().resolve(ear_entry.getName());
>> +
>> + if (!ear_entry.getName().endsWith(".jar") && !ear_entry.getName().endsWith(".war")
>> + && !ear_entry.getName().endsWith(".rar") && !ear_entry.getName().startsWith("META-INF"))
>> + {
>> + appClientDeploymentContext.addFile(targetPath, earFile, ear_entry);
>> + }
>> }
>> +
>> + Collection<String> appClientModuleClasspaths = module.getClassPath();
>> +
>> + try {
>> + // extract the client Jar file into a standalone packed jar file and add the contents to the output
>> + URI moduleBase = new URI(module.getTargetPath());
>> + appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
>> + // add manifest class path entries to the app client context
>> + addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
>> +
>> +
>> + } catch (IOException e) {
>> + throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
>> + } catch (URISyntaxException e) {
>> + throw new DeploymentException("Unable to get app client module base URI " + module.getTargetPath(), e);
>> + }
>> +
>> + appClientModuleClasspaths.add(module.getTargetPath());
>> + EARContext moduleContext = module.getEarContext();
>> + Collection<String> moduleLocations = module.getParentModule().getModuleLocations();
>> + URI baseUri = URI.create(module.getTargetPath());
>> + moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), appClientModuleClasspaths, moduleLocations);
>> +
>> +
>> + for (String classpath: appClientModuleClasspaths){
>> + appClientDeploymentContext.addToClassPath(classpath);
>> +
>> + //Copy needed jar from ear to appclient configuration.
>> + if (classpath.endsWith(".jar")){
>> +
>> + NestedJarFile library = new NestedJarFile(earFile, classpath);
>> + appClientDeploymentContext.addIncludeAsPackedJar(URI.create(classpath), library);
>> +
>> + }
>> + }
>> + }
>> +
>> } catch (DeploymentException e) {
>> throw e;
>> } catch (IOException e) {
>> throw new DeploymentException(e);
>> - }
>> + }
>> for (Module connectorModule : appClientModule.getModules()) {
>> if (connectorModule instanceof ConnectorModule) {
>> getConnectorModuleBuilder().installModule(connectorModule.getModuleFile(), appClientDeploymentContext, connectorModule, configurationStores, targetConfigurationStore, repositories);
>> @@ -652,25 +705,12 @@ public class AppClientModuleBuilder impl
>> }
>> }
>>
>> - // Create a Module ID Builder defaulting to similar settings to use for any children we create
>> - ModuleIDBuilder idBuilder = new ModuleIDBuilder();
>> - idBuilder.setDefaultGroup(appClientModule.getEnvironment().getConfigId().getGroupId());
>> - idBuilder.setDefaultVersion(appClientModule.getEnvironment().getConfigId().getVersion());
>> +
>> try {
>> try {
>>
>> //register the message destinations in the app client ear context.
>> namingBuilders.initContext(appClient, geronimoAppClient, appClientModule);
>> - // extract the client Jar file into a standalone packed jar file and add the contents to the output
>> - URI moduleBase = new URI(appClientModule.getTargetPath());
>> - try {
>> - appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
>> - } catch (IOException e) {
>> - throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
>> - }
>> -
>> - // add manifest class path entries to the app client context
>> - addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
>>
>> // get the classloader
>> Bundle appClientClassBundle = appClientDeploymentContext.getDeploymentBundle();
>> @@ -896,12 +936,11 @@ public class AppClientModuleBuilder impl
>> throw new DeploymentException("Invalid manifest classpath entry: jarFile=" + jarFileLocation + ", path=" + path, e);
>> }
>>
>> - if (!pathUri.getPath().endsWith(".jar")) {
>> - throw new DeploymentException("Manifest class path entries must end with the .jar extension (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
>> - }
>> if (pathUri.isAbsolute()) {
>> throw new DeploymentException("Manifest class path entries must be relative (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
>> }
>> +
>> + Enumeration<JarEntry> ear_entries = earFile.entries();
>>
>> // determine the target file
>> URI classPathJarLocation = jarFileLocation.resolve(pathUri);
>> @@ -915,23 +954,44 @@ public class AppClientModuleBuilder impl
>> if (entry == null) {
>> throw new DeploymentException("Cound not find manifest class path entry: jarFile=" + jarFileLocation + ", path=" + path);
>> }
>> -
>> +
>> try {
>> - // copy the file into the output context
>> - deploymentContext.addFile(classPathJarLocation, earFile, entry);
>> +
>> + if (!entry.getName().endsWith(".jar")) {
>> +
>> + while (ear_entries.hasMoreElements()) {
>> + ZipEntry ear_entry = ear_entries.nextElement();
>> + URI targetPath = jarFileLocation.resolve(ear_entry.getName());
>> + if (ear_entry.getName().startsWith(classPathJarLocation.getPath()))
>> + deploymentContext.addFile(targetPath, earFile, ear_entry);
>> + }
>> + } else {
>> +
>> + // copy the file into the output context
>> + deploymentContext.addFile(classPathJarLocation, earFile, entry);
>> + }
>> } catch (IOException e) {
>> - throw new DeploymentException("Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation + ", path=" + path, e);
>> + throw new DeploymentException(
>> + "Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation
>> + + ", path=" + path, e);
>> }
>>
>> JarFile classPathJarFile;
>> - try {
>> - classPathJarFile = new JarFile(classPathFile);
>> - } catch (IOException e) {
>> - throw new DeploymentException("Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path, e);
>> - }
>> +
>> + if (classPathFile.getName().endsWith(".jar")) {
>>
>> - // add the client jars of this class path jar
>> - addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
>> + try {
>> + classPathJarFile = new JarFile(classPathFile);
>> + } catch (IOException e) {
>> + throw new DeploymentException(
>> + "Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile="
>> + + jarFileLocation + ", path=" + path, e);
>> + }
>> +
>> + // add the client jars of this class path jar
>> + addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
>> +
>> + }
>> }
>> }
>> }
>>
>> Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
>> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
>> ==============================================================================
>> --- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
>> +++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Mon May 30 13:50:57 2011
>> @@ -362,7 +362,7 @@ public class EjbModuleBuilder implements
>>
>>
>>
>> - detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>> + detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>>
>> ResourceFinder finder = new ResourceFinder("", detectTempClassLoader, baseUrl);
>>
>> @@ -397,7 +397,7 @@ public class EjbModuleBuilder implements
>> libURLs.clear();
>> libURLs.add(baseUrl);
>>
>> - ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>> + ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>>
>>
>> // create the EJB Module
>> @@ -670,8 +670,12 @@ public class EjbModuleBuilder implements
>> // extract the ejbJar file into a standalone packed jar file and add the contents to the output
>> earContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
>> // add manifest class path entries to the ejb module classpath
>> - Set<String> EjbModuleClasspaths = module.getClassPath();
>> - earContext.addManifestClassPath(moduleFile, URI.create("."), EjbModuleClasspaths);
>> + Collection<String> EjbModuleClasspaths = module.getClassPath();
>> + EjbModuleClasspaths.add(module.getTargetPath());
>> + Collection<String> moduleLocations = module.isStandAlone() ? null : module.getParentModule()
>> + .getModuleLocations();
>> + URI baseUri = URI.create(module.getTargetPath());
>> + earContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), EjbModuleClasspaths, moduleLocations);
>>
>> for (String classpath:EjbModuleClasspaths){
>> earContext.addToClassPath(classpath);
>> @@ -728,12 +732,7 @@ public class EjbModuleBuilder implements
>> private void doInitContext(EARContext earContext, Module module, Bundle bundle) throws DeploymentException {
>> EjbModule ejbModule = (EjbModule) module;
>>
>> - Collection<String> manifestcp = module.getClassPath();
>> - manifestcp.add(module.getTargetPath());
>> - EARContext moduleContext = module.getEarContext();
>> - Collection<String> moduleLocations = EARContext.MODULE_LIST_KEY.get(module.getRootEarContext().getGeneralData());
>> - URI baseUri = URI.create(module.getTargetPath());
>> - moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), manifestcp, moduleLocations);
>> +
>>
>> GeronimoEjbInfo ejbInfo = getEjbInfo(earContext, ejbModule, bundle);
>>
>>
>>
>
Re: svn commit: r1129174 - in /geronimo/server/trunk: framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ plugins/openejb/geronimo-open...
Posted by Kevan Miller <ke...@gmail.com>.
This commit broke the build. See http://ci.apache.org/builders/geronimo-server-trunk/builds/41
Can you fix the test errors?
--kevan
On May 30, 2011, at 9:50 AM, genspring@apache.org wrote:
> Author: genspring
> Date: Mon May 30 13:50:57 2011
> New Revision: 1129174
>
> URL: http://svn.apache.org/viewvc?rev=1129174&view=rev
> Log:
> EJB31 spec EE.8.2.1 :
> A JAR format file (such as a .jar file, .war file, or .rar file) may reference a
> .jar file or directory by naming the referenced .jar file or directory in a
> Class-Path header in the referencing JAR file’s Manifest file
>
> Modified:
> geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
>
> Modified: geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java?rev=1129174&r1=1129173&r2=1129174&view=diff
> ==============================================================================
> --- geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java (original)
> +++ geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java Mon May 30 13:50:57 2011
> @@ -136,11 +136,13 @@ public class ClassPathUtils {
> if (!targetUri.getPath().endsWith("/")) {
> targetUri = URI.create(targetUri.getPath() + "/");
> }
> +
> + //1, add the directory to classpath
> + classPath.add(targetUri.getPath());
> +
> + //2, add *.jar under the directory to classpath
> for (File file : factory.listFiles(targetUri)) {
> - if (file.isDirectory()) {
> - log.debug("Sub directory [" + file.getAbsolutePath() + "] in the manifest entry directory is ignored");
> - continue;
> - }
> +
> if (!file.getName().endsWith(".jar")) {
> log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
> continue;
> @@ -149,15 +151,6 @@ public class ClassPathUtils {
> }
> } else {
> if (!pathUri.getPath().endsWith(".jar")) {
> - if (manifestClassLoaderMode == MFCP_STRICT) {
> - problems.add(new DeploymentException(
> - "Manifest class path entries must end with the .jar extension (J2EE 1.4 Section 8.2): path= "
> - + path + ", module= " + moduleBaseUri));
> - } else {
> - log.info("The " + manifestClassLoaderMessage + " processing mode is in effect.\n"
> - + "Therefore, a manifest classpath entry which does not end with .jar, "
> - + pathUri + " is being permitted and ignored.");
> - }
> continue;
> }
> classPath.add(targetUri.getPath());
> @@ -234,6 +227,32 @@ public class ClassPathUtils {
> }
>
> URI targetUri = moduleBaseUri.resolve(pathUri);
> +
> + try {
> + if (factory.isDirectory(targetUri)) {
> + if (!targetUri.getPath().endsWith("/")) {
> + targetUri = URI.create(targetUri.getPath() + "/");
> + }
> +
> + //1, add the directory to classpath
> + addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
> +
> + //2, add *.jar under the directory to classpath
> + for (File file : factory.listFiles(targetUri)) {
> +
> + if (!file.getName().endsWith(".jar")) {
> + log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
> + continue;
> + }
> + addToClassPath(moduleBaseUri, resolutionUri, targetUri.resolve(file.getName()), classpath, exclusions, factory, problems);
> + }
> + } else {
> + if (!pathUri.getPath().endsWith(".jar")) {
> + continue;
> + }
> + addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
> + }
> + } catch (IOException e) {}
>
> try {
> if (factory.isDirectory(targetUri)) {
> @@ -281,7 +300,7 @@ public class ClassPathUtils {
>
> private static void addToClassPath(URI moduleBaseUri, URI resolutionUri, URI targetUri, Collection<String> classpath, Collection<String> exclusions, JarFileFactory factory, List<DeploymentException> problems) throws DeploymentException {
> String targetEntry = targetUri.toString();
> - if (exclusions.contains(targetEntry)) {
> + if (exclusions!=null && exclusions.contains(targetEntry)) {
> return;
> }
> URI resolvedUri = resolutionUri.resolve(targetUri);
> @@ -291,6 +310,11 @@ public class ClassPathUtils {
> return;
> }
> classpath.add(classpathEntry);
> +
> + if (!classpathEntry.endsWith(".jar")){
> + return;
> + }
> +
> JarFile classPathJarFile;
> try {
> classPathJarFile = factory.newJarFile(targetUri);
>
> Modified: geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
> ==============================================================================
> --- geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Mon May 30 13:50:57 2011
> @@ -25,12 +25,15 @@ import java.net.URL;
> import java.util.ArrayList;
> import java.util.Collection;
> import java.util.Collections;
> +import java.util.Enumeration;
> import java.util.HashMap;
> import java.util.LinkedList;
> import java.util.List;
> import java.util.Map;
> +import java.util.Set;
> import java.util.StringTokenizer;
> import java.util.jar.Attributes;
> +import java.util.jar.JarEntry;
> import java.util.jar.JarFile;
> import java.util.jar.Manifest;
> import java.util.zip.ZipEntry;
> @@ -563,12 +566,9 @@ public class AppClientModuleBuilder impl
> appClientModule.setEarContext(appClientDeploymentContext);
> appClientModule.setRootEarContext(appClientDeploymentContext);
>
> - try {
> - appClientDeploymentContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
> - } catch (IOException e) {
> - throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
> - }
> - if (module.getParentModule() != null) {
> +
> + if (module.getParentModule() != null) {
> +
> Collection<String> libClasspath = module.getParentModule().getClassPath();
> for (String libEntryPath : libClasspath) {
> try {
> @@ -579,12 +579,65 @@ public class AppClientModuleBuilder impl
> }
> }
> module.getClassPath().addAll(libClasspath);
> +
> +
> + Enumeration<JarEntry> ear_entries = earFile.entries();
> +
> + //Copy non archive files from ear file to appclient configuration. These
> + // files are needed when caculating dir classpath in manifest.
> + while (ear_entries.hasMoreElements()) {
> +
> + ZipEntry ear_entry = ear_entries.nextElement();
> + URI targetPath = module.getParentModule().resolve(ear_entry.getName());
> +
> + if (!ear_entry.getName().endsWith(".jar") && !ear_entry.getName().endsWith(".war")
> + && !ear_entry.getName().endsWith(".rar") && !ear_entry.getName().startsWith("META-INF"))
> + {
> + appClientDeploymentContext.addFile(targetPath, earFile, ear_entry);
> + }
> }
> +
> + Collection<String> appClientModuleClasspaths = module.getClassPath();
> +
> + try {
> + // extract the client Jar file into a standalone packed jar file and add the contents to the output
> + URI moduleBase = new URI(module.getTargetPath());
> + appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
> + // add manifest class path entries to the app client context
> + addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
> +
> +
> + } catch (IOException e) {
> + throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
> + } catch (URISyntaxException e) {
> + throw new DeploymentException("Unable to get app client module base URI " + module.getTargetPath(), e);
> + }
> +
> + appClientModuleClasspaths.add(module.getTargetPath());
> + EARContext moduleContext = module.getEarContext();
> + Collection<String> moduleLocations = module.getParentModule().getModuleLocations();
> + URI baseUri = URI.create(module.getTargetPath());
> + moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), appClientModuleClasspaths, moduleLocations);
> +
> +
> + for (String classpath: appClientModuleClasspaths){
> + appClientDeploymentContext.addToClassPath(classpath);
> +
> + //Copy needed jar from ear to appclient configuration.
> + if (classpath.endsWith(".jar")){
> +
> + NestedJarFile library = new NestedJarFile(earFile, classpath);
> + appClientDeploymentContext.addIncludeAsPackedJar(URI.create(classpath), library);
> +
> + }
> + }
> + }
> +
> } catch (DeploymentException e) {
> throw e;
> } catch (IOException e) {
> throw new DeploymentException(e);
> - }
> + }
> for (Module connectorModule : appClientModule.getModules()) {
> if (connectorModule instanceof ConnectorModule) {
> getConnectorModuleBuilder().installModule(connectorModule.getModuleFile(), appClientDeploymentContext, connectorModule, configurationStores, targetConfigurationStore, repositories);
> @@ -652,25 +705,12 @@ public class AppClientModuleBuilder impl
> }
> }
>
> - // Create a Module ID Builder defaulting to similar settings to use for any children we create
> - ModuleIDBuilder idBuilder = new ModuleIDBuilder();
> - idBuilder.setDefaultGroup(appClientModule.getEnvironment().getConfigId().getGroupId());
> - idBuilder.setDefaultVersion(appClientModule.getEnvironment().getConfigId().getVersion());
> +
> try {
> try {
>
> //register the message destinations in the app client ear context.
> namingBuilders.initContext(appClient, geronimoAppClient, appClientModule);
> - // extract the client Jar file into a standalone packed jar file and add the contents to the output
> - URI moduleBase = new URI(appClientModule.getTargetPath());
> - try {
> - appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
> - } catch (IOException e) {
> - throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
> - }
> -
> - // add manifest class path entries to the app client context
> - addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
>
> // get the classloader
> Bundle appClientClassBundle = appClientDeploymentContext.getDeploymentBundle();
> @@ -896,12 +936,11 @@ public class AppClientModuleBuilder impl
> throw new DeploymentException("Invalid manifest classpath entry: jarFile=" + jarFileLocation + ", path=" + path, e);
> }
>
> - if (!pathUri.getPath().endsWith(".jar")) {
> - throw new DeploymentException("Manifest class path entries must end with the .jar extension (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
> - }
> if (pathUri.isAbsolute()) {
> throw new DeploymentException("Manifest class path entries must be relative (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
> }
> +
> + Enumeration<JarEntry> ear_entries = earFile.entries();
>
> // determine the target file
> URI classPathJarLocation = jarFileLocation.resolve(pathUri);
> @@ -915,23 +954,44 @@ public class AppClientModuleBuilder impl
> if (entry == null) {
> throw new DeploymentException("Cound not find manifest class path entry: jarFile=" + jarFileLocation + ", path=" + path);
> }
> -
> +
> try {
> - // copy the file into the output context
> - deploymentContext.addFile(classPathJarLocation, earFile, entry);
> +
> + if (!entry.getName().endsWith(".jar")) {
> +
> + while (ear_entries.hasMoreElements()) {
> + ZipEntry ear_entry = ear_entries.nextElement();
> + URI targetPath = jarFileLocation.resolve(ear_entry.getName());
> + if (ear_entry.getName().startsWith(classPathJarLocation.getPath()))
> + deploymentContext.addFile(targetPath, earFile, ear_entry);
> + }
> + } else {
> +
> + // copy the file into the output context
> + deploymentContext.addFile(classPathJarLocation, earFile, entry);
> + }
> } catch (IOException e) {
> - throw new DeploymentException("Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation + ", path=" + path, e);
> + throw new DeploymentException(
> + "Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation
> + + ", path=" + path, e);
> }
>
> JarFile classPathJarFile;
> - try {
> - classPathJarFile = new JarFile(classPathFile);
> - } catch (IOException e) {
> - throw new DeploymentException("Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path, e);
> - }
> +
> + if (classPathFile.getName().endsWith(".jar")) {
>
> - // add the client jars of this class path jar
> - addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
> + try {
> + classPathJarFile = new JarFile(classPathFile);
> + } catch (IOException e) {
> + throw new DeploymentException(
> + "Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile="
> + + jarFileLocation + ", path=" + path, e);
> + }
> +
> + // add the client jars of this class path jar
> + addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
> +
> + }
> }
> }
> }
>
> Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
> ==============================================================================
> --- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Mon May 30 13:50:57 2011
> @@ -362,7 +362,7 @@ public class EjbModuleBuilder implements
>
>
>
> - detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
> + detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>
> ResourceFinder finder = new ResourceFinder("", detectTempClassLoader, baseUrl);
>
> @@ -397,7 +397,7 @@ public class EjbModuleBuilder implements
> libURLs.clear();
> libURLs.add(baseUrl);
>
> - ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
> + ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>
>
> // create the EJB Module
> @@ -670,8 +670,12 @@ public class EjbModuleBuilder implements
> // extract the ejbJar file into a standalone packed jar file and add the contents to the output
> earContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
> // add manifest class path entries to the ejb module classpath
> - Set<String> EjbModuleClasspaths = module.getClassPath();
> - earContext.addManifestClassPath(moduleFile, URI.create("."), EjbModuleClasspaths);
> + Collection<String> EjbModuleClasspaths = module.getClassPath();
> + EjbModuleClasspaths.add(module.getTargetPath());
> + Collection<String> moduleLocations = module.isStandAlone() ? null : module.getParentModule()
> + .getModuleLocations();
> + URI baseUri = URI.create(module.getTargetPath());
> + earContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), EjbModuleClasspaths, moduleLocations);
>
> for (String classpath:EjbModuleClasspaths){
> earContext.addToClassPath(classpath);
> @@ -728,12 +732,7 @@ public class EjbModuleBuilder implements
> private void doInitContext(EARContext earContext, Module module, Bundle bundle) throws DeploymentException {
> EjbModule ejbModule = (EjbModule) module;
>
> - Collection<String> manifestcp = module.getClassPath();
> - manifestcp.add(module.getTargetPath());
> - EARContext moduleContext = module.getEarContext();
> - Collection<String> moduleLocations = EARContext.MODULE_LIST_KEY.get(module.getRootEarContext().getGeneralData());
> - URI baseUri = URI.create(module.getTargetPath());
> - moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), manifestcp, moduleLocations);
> +
>
> GeronimoEjbInfo ejbInfo = getEjbInfo(earContext, ejbModule, bundle);
>
>
>
Re: svn commit: r1129174 - in /geronimo/server/trunk: framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ plugins/openejb/geronimo-open...
Posted by David Jencks <da...@yahoo.com>.
Could you please open a jira for the ClassPathUtils changes and give examples of the incorrect behavior and correct behavior?
Have you eliminated the MFCP_STRICT flag?
thanks
david jencks
On May 30, 2011, at 6:50 AM, genspring@apache.org wrote:
> Author: genspring
> Date: Mon May 30 13:50:57 2011
> New Revision: 1129174
>
> URL: http://svn.apache.org/viewvc?rev=1129174&view=rev
> Log:
> EJB31 spec EE.8.2.1 :
> A JAR format file (such as a .jar file, .war file, or .rar file) may reference a
> .jar file or directory by naming the referenced .jar file or directory in a
> Class-Path header in the referencing JAR file’s Manifest file
>
> Modified:
> geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
>
> Modified: geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java?rev=1129174&r1=1129173&r2=1129174&view=diff
> ==============================================================================
> --- geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java (original)
> +++ geronimo/server/trunk/framework/modules/geronimo-deployment/src/main/java/org/apache/geronimo/deployment/ClassPathUtils.java Mon May 30 13:50:57 2011
> @@ -136,11 +136,13 @@ public class ClassPathUtils {
> if (!targetUri.getPath().endsWith("/")) {
> targetUri = URI.create(targetUri.getPath() + "/");
> }
> +
> + //1, add the directory to classpath
> + classPath.add(targetUri.getPath());
> +
> + //2, add *.jar under the directory to classpath
> for (File file : factory.listFiles(targetUri)) {
> - if (file.isDirectory()) {
> - log.debug("Sub directory [" + file.getAbsolutePath() + "] in the manifest entry directory is ignored");
> - continue;
> - }
> +
> if (!file.getName().endsWith(".jar")) {
> log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
> continue;
> @@ -149,15 +151,6 @@ public class ClassPathUtils {
> }
> } else {
> if (!pathUri.getPath().endsWith(".jar")) {
> - if (manifestClassLoaderMode == MFCP_STRICT) {
> - problems.add(new DeploymentException(
> - "Manifest class path entries must end with the .jar extension (J2EE 1.4 Section 8.2): path= "
> - + path + ", module= " + moduleBaseUri));
> - } else {
> - log.info("The " + manifestClassLoaderMessage + " processing mode is in effect.\n"
> - + "Therefore, a manifest classpath entry which does not end with .jar, "
> - + pathUri + " is being permitted and ignored.");
> - }
> continue;
> }
> classPath.add(targetUri.getPath());
> @@ -234,6 +227,32 @@ public class ClassPathUtils {
> }
>
> URI targetUri = moduleBaseUri.resolve(pathUri);
> +
> + try {
> + if (factory.isDirectory(targetUri)) {
> + if (!targetUri.getPath().endsWith("/")) {
> + targetUri = URI.create(targetUri.getPath() + "/");
> + }
> +
> + //1, add the directory to classpath
> + addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
> +
> + //2, add *.jar under the directory to classpath
> + for (File file : factory.listFiles(targetUri)) {
> +
> + if (!file.getName().endsWith(".jar")) {
> + log.debug("Only jar files are added to classpath, file [" + file.getAbsolutePath() + "] is ignored");
> + continue;
> + }
> + addToClassPath(moduleBaseUri, resolutionUri, targetUri.resolve(file.getName()), classpath, exclusions, factory, problems);
> + }
> + } else {
> + if (!pathUri.getPath().endsWith(".jar")) {
> + continue;
> + }
> + addToClassPath(moduleBaseUri, resolutionUri, targetUri, classpath, exclusions, factory, problems);
> + }
> + } catch (IOException e) {}
>
> try {
> if (factory.isDirectory(targetUri)) {
> @@ -281,7 +300,7 @@ public class ClassPathUtils {
>
> private static void addToClassPath(URI moduleBaseUri, URI resolutionUri, URI targetUri, Collection<String> classpath, Collection<String> exclusions, JarFileFactory factory, List<DeploymentException> problems) throws DeploymentException {
> String targetEntry = targetUri.toString();
> - if (exclusions.contains(targetEntry)) {
> + if (exclusions!=null && exclusions.contains(targetEntry)) {
> return;
> }
> URI resolvedUri = resolutionUri.resolve(targetUri);
> @@ -291,6 +310,11 @@ public class ClassPathUtils {
> return;
> }
> classpath.add(classpathEntry);
> +
> + if (!classpathEntry.endsWith(".jar")){
> + return;
> + }
> +
> JarFile classPathJarFile;
> try {
> classPathJarFile = factory.newJarFile(targetUri);
>
> Modified: geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
> ==============================================================================
> --- geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Mon May 30 13:50:57 2011
> @@ -25,12 +25,15 @@ import java.net.URL;
> import java.util.ArrayList;
> import java.util.Collection;
> import java.util.Collections;
> +import java.util.Enumeration;
> import java.util.HashMap;
> import java.util.LinkedList;
> import java.util.List;
> import java.util.Map;
> +import java.util.Set;
> import java.util.StringTokenizer;
> import java.util.jar.Attributes;
> +import java.util.jar.JarEntry;
> import java.util.jar.JarFile;
> import java.util.jar.Manifest;
> import java.util.zip.ZipEntry;
> @@ -563,12 +566,9 @@ public class AppClientModuleBuilder impl
> appClientModule.setEarContext(appClientDeploymentContext);
> appClientModule.setRootEarContext(appClientDeploymentContext);
>
> - try {
> - appClientDeploymentContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
> - } catch (IOException e) {
> - throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
> - }
> - if (module.getParentModule() != null) {
> +
> + if (module.getParentModule() != null) {
> +
> Collection<String> libClasspath = module.getParentModule().getClassPath();
> for (String libEntryPath : libClasspath) {
> try {
> @@ -579,12 +579,65 @@ public class AppClientModuleBuilder impl
> }
> }
> module.getClassPath().addAll(libClasspath);
> +
> +
> + Enumeration<JarEntry> ear_entries = earFile.entries();
> +
> + //Copy non archive files from ear file to appclient configuration. These
> + // files are needed when caculating dir classpath in manifest.
> + while (ear_entries.hasMoreElements()) {
> +
> + ZipEntry ear_entry = ear_entries.nextElement();
> + URI targetPath = module.getParentModule().resolve(ear_entry.getName());
> +
> + if (!ear_entry.getName().endsWith(".jar") && !ear_entry.getName().endsWith(".war")
> + && !ear_entry.getName().endsWith(".rar") && !ear_entry.getName().startsWith("META-INF"))
> + {
> + appClientDeploymentContext.addFile(targetPath, earFile, ear_entry);
> + }
> }
> +
> + Collection<String> appClientModuleClasspaths = module.getClassPath();
> +
> + try {
> + // extract the client Jar file into a standalone packed jar file and add the contents to the output
> + URI moduleBase = new URI(module.getTargetPath());
> + appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
> + // add manifest class path entries to the app client context
> + addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
> +
> +
> + } catch (IOException e) {
> + throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
> + } catch (URISyntaxException e) {
> + throw new DeploymentException("Unable to get app client module base URI " + module.getTargetPath(), e);
> + }
> +
> + appClientModuleClasspaths.add(module.getTargetPath());
> + EARContext moduleContext = module.getEarContext();
> + Collection<String> moduleLocations = module.getParentModule().getModuleLocations();
> + URI baseUri = URI.create(module.getTargetPath());
> + moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), appClientModuleClasspaths, moduleLocations);
> +
> +
> + for (String classpath: appClientModuleClasspaths){
> + appClientDeploymentContext.addToClassPath(classpath);
> +
> + //Copy needed jar from ear to appclient configuration.
> + if (classpath.endsWith(".jar")){
> +
> + NestedJarFile library = new NestedJarFile(earFile, classpath);
> + appClientDeploymentContext.addIncludeAsPackedJar(URI.create(classpath), library);
> +
> + }
> + }
> + }
> +
> } catch (DeploymentException e) {
> throw e;
> } catch (IOException e) {
> throw new DeploymentException(e);
> - }
> + }
> for (Module connectorModule : appClientModule.getModules()) {
> if (connectorModule instanceof ConnectorModule) {
> getConnectorModuleBuilder().installModule(connectorModule.getModuleFile(), appClientDeploymentContext, connectorModule, configurationStores, targetConfigurationStore, repositories);
> @@ -652,25 +705,12 @@ public class AppClientModuleBuilder impl
> }
> }
>
> - // Create a Module ID Builder defaulting to similar settings to use for any children we create
> - ModuleIDBuilder idBuilder = new ModuleIDBuilder();
> - idBuilder.setDefaultGroup(appClientModule.getEnvironment().getConfigId().getGroupId());
> - idBuilder.setDefaultVersion(appClientModule.getEnvironment().getConfigId().getVersion());
> +
> try {
> try {
>
> //register the message destinations in the app client ear context.
> namingBuilders.initContext(appClient, geronimoAppClient, appClientModule);
> - // extract the client Jar file into a standalone packed jar file and add the contents to the output
> - URI moduleBase = new URI(appClientModule.getTargetPath());
> - try {
> - appClientDeploymentContext.addIncludeAsPackedJar(moduleBase, moduleFile);
> - } catch (IOException e) {
> - throw new DeploymentException("Unable to copy app client module jar into configuration: " + moduleFile.getName(), e);
> - }
> -
> - // add manifest class path entries to the app client context
> - addManifestClassPath(appClientDeploymentContext, appClientModule.getEarFile(), moduleFile, moduleBase);
>
> // get the classloader
> Bundle appClientClassBundle = appClientDeploymentContext.getDeploymentBundle();
> @@ -896,12 +936,11 @@ public class AppClientModuleBuilder impl
> throw new DeploymentException("Invalid manifest classpath entry: jarFile=" + jarFileLocation + ", path=" + path, e);
> }
>
> - if (!pathUri.getPath().endsWith(".jar")) {
> - throw new DeploymentException("Manifest class path entries must end with the .jar extension (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
> - }
> if (pathUri.isAbsolute()) {
> throw new DeploymentException("Manifest class path entries must be relative (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path);
> }
> +
> + Enumeration<JarEntry> ear_entries = earFile.entries();
>
> // determine the target file
> URI classPathJarLocation = jarFileLocation.resolve(pathUri);
> @@ -915,23 +954,44 @@ public class AppClientModuleBuilder impl
> if (entry == null) {
> throw new DeploymentException("Cound not find manifest class path entry: jarFile=" + jarFileLocation + ", path=" + path);
> }
> -
> +
> try {
> - // copy the file into the output context
> - deploymentContext.addFile(classPathJarLocation, earFile, entry);
> +
> + if (!entry.getName().endsWith(".jar")) {
> +
> + while (ear_entries.hasMoreElements()) {
> + ZipEntry ear_entry = ear_entries.nextElement();
> + URI targetPath = jarFileLocation.resolve(ear_entry.getName());
> + if (ear_entry.getName().startsWith(classPathJarLocation.getPath()))
> + deploymentContext.addFile(targetPath, earFile, ear_entry);
> + }
> + } else {
> +
> + // copy the file into the output context
> + deploymentContext.addFile(classPathJarLocation, earFile, entry);
> + }
> } catch (IOException e) {
> - throw new DeploymentException("Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation + ", path=" + path, e);
> + throw new DeploymentException(
> + "Cound not copy manifest class path entry into configuration: jarFile=" + jarFileLocation
> + + ", path=" + path, e);
> }
>
> JarFile classPathJarFile;
> - try {
> - classPathJarFile = new JarFile(classPathFile);
> - } catch (IOException e) {
> - throw new DeploymentException("Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile=" + jarFileLocation + ", path=" + path, e);
> - }
> +
> + if (classPathFile.getName().endsWith(".jar")) {
>
> - // add the client jars of this class path jar
> - addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
> + try {
> + classPathJarFile = new JarFile(classPathFile);
> + } catch (IOException e) {
> + throw new DeploymentException(
> + "Manifest class path entries must be a valid jar file (JAVAEE 5 Section 8.2): jarFile="
> + + jarFileLocation + ", path=" + path, e);
> + }
> +
> + // add the client jars of this class path jar
> + addManifestClassPath(deploymentContext, earFile, classPathJarFile, classPathJarLocation);
> +
> + }
> }
> }
> }
>
> Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=1129174&r1=1129173&r2=1129174&view=diff
> ==============================================================================
> --- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Mon May 30 13:50:57 2011
> @@ -362,7 +362,7 @@ public class EjbModuleBuilder implements
>
>
>
> - detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
> + detectTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>
> ResourceFinder finder = new ResourceFinder("", detectTempClassLoader, baseUrl);
>
> @@ -397,7 +397,7 @@ public class EjbModuleBuilder implements
> libURLs.clear();
> libURLs.add(baseUrl);
>
> - ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, (URL[])libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
> + ejbModuleTempClassLoader = ClassLoaderUtil.createTempClassLoader(ClassLoaderUtil.createClassLoader(jarPath, libURLs.toArray(new URL[0]), OpenEJB.class.getClassLoader()));
>
>
> // create the EJB Module
> @@ -670,8 +670,12 @@ public class EjbModuleBuilder implements
> // extract the ejbJar file into a standalone packed jar file and add the contents to the output
> earContext.addIncludeAsPackedJar(URI.create(module.getTargetPath()), moduleFile);
> // add manifest class path entries to the ejb module classpath
> - Set<String> EjbModuleClasspaths = module.getClassPath();
> - earContext.addManifestClassPath(moduleFile, URI.create("."), EjbModuleClasspaths);
> + Collection<String> EjbModuleClasspaths = module.getClassPath();
> + EjbModuleClasspaths.add(module.getTargetPath());
> + Collection<String> moduleLocations = module.isStandAlone() ? null : module.getParentModule()
> + .getModuleLocations();
> + URI baseUri = URI.create(module.getTargetPath());
> + earContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), EjbModuleClasspaths, moduleLocations);
>
> for (String classpath:EjbModuleClasspaths){
> earContext.addToClassPath(classpath);
> @@ -728,12 +732,7 @@ public class EjbModuleBuilder implements
> private void doInitContext(EARContext earContext, Module module, Bundle bundle) throws DeploymentException {
> EjbModule ejbModule = (EjbModule) module;
>
> - Collection<String> manifestcp = module.getClassPath();
> - manifestcp.add(module.getTargetPath());
> - EARContext moduleContext = module.getEarContext();
> - Collection<String> moduleLocations = EARContext.MODULE_LIST_KEY.get(module.getRootEarContext().getGeneralData());
> - URI baseUri = URI.create(module.getTargetPath());
> - moduleContext.getCompleteManifestClassPath(module.getDeployable(), baseUri, URI.create("."), manifestcp, moduleLocations);
> +
>
> GeronimoEjbInfo ejbInfo = getEjbInfo(earContext, ejbModule, bundle);
>
>
>