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

svn commit: r639146 - /openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Author: dblevins
Date: Wed Mar 19 20:47:38 2008
New Revision: 639146

URL: http://svn.apache.org/viewvc?rev=639146&view=rev
Log:
Merging r637630 - http://svn.apache.org/viewvc?rev=637630&view=rev

svn merge -r 637629:637630 https://svn.apache.org/repos/asf/openejb/trunk/openejb3 .

------------------------------------------------------------------------
r637630 | dain | 2008-03-16 12:33:07 -0700 (Sun, 16 Mar 2008) | 1 line

Fix windows file locking for standalone ejb-jar files
------------------------------------------------------------------------

Modified:
    openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java

Modified: openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=639146&r1=639145&r2=639146&view=diff
==============================================================================
--- openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ openejb/branches/openejb-3.0/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Wed Mar 19 20:47:38 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)) {