You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by da...@apache.org on 2008/03/16 20:33:08 UTC

svn commit: r637630 - /openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Author: dain
Date: Sun Mar 16 12:33:07 2008
New Revision: 637630

URL: http://svn.apache.org/viewvc?rev=637630&view=rev
Log:
Fix windows file locking for standalone ejb-jar files

Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=637630&r1=637629&r2=637630&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Sun Mar 16 12:33:07 2008
@@ -63,6 +63,7 @@
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.URLs;
+import org.apache.openejb.util.UrlCache;
 import static org.apache.openejb.util.URLs.toFile;
 import org.apache.xbean.finder.ClassFinder;
 import org.apache.xbean.finder.ResourceFinder;
@@ -94,10 +95,30 @@
         try {
             // determine the module type
             Class moduleClass;
+            File tmpFile = null;
             try {
-                moduleClass = discoverModuleType(baseUrl, ClassLoaderUtil.createTempClassLoader(doNotUseClassLoader), true);
+                // TODO: ClassFinder is leaking file locks, so copy the jar to a temp dir
+                // when we have a possible ejb-jar file (only ejb-jars result in a ClassFinder being used)
+                URL tempURL = baseUrl;
+                if (jarFile.isFile() && UrlCache.cacheDir != null &&
+                        !jarFile.getName().endsWith(".ear") &&
+                        !jarFile.getName().endsWith(".war") &&
+                        !jarFile.getName().endsWith(".rar") ) {
+                    try {
+                        tmpFile = File.createTempFile("AppModule-", "", UrlCache.cacheDir);
+                        JarExtractor.copy(URLs.toFile(baseUrl), tmpFile);
+                        tempURL = tmpFile.toURL();
+                    } catch (Exception e) {
+                        throw new OpenEJBException(e);
+                    }
+                }
+
+                moduleClass = discoverModuleType(tempURL, ClassLoaderUtil.createTempClassLoader(doNotUseClassLoader), true);
             } catch (Exception e) {
                 throw new UnknownModuleTypeException("Unable to determine module type for jar: " + baseUrl.toExternalForm(), e);
+            } finally {
+                // most likely won't work but give it a try
+                if (tmpFile != null) tmpFile.delete();
             }
 
             if (AppModule.class.equals(moduleClass)) {