You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by an...@apache.org on 2012/12/05 16:40:25 UTC

svn commit: r1417489 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config: DeploymentLoader.java DeploymentsResolver.java

Author: andygumbrecht
Date: Wed Dec  5 15:40:24 2012
New Revision: 1417489

URL: http://svn.apache.org/viewvc?rev=1417489&view=rev
Log:
Filter out known exclude directories

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

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1417489&r1=1417488&r2=1417489&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java Wed Dec  5 15:40:24 2012
@@ -88,7 +88,6 @@ public class DeploymentLoader implements
     private boolean scanManagedBeans = true;
     private static final Collection<String> KNOWN_DESCRIPTORS = Arrays.asList("app-ctx.xml", "module.properties", "application.properties", "web.xml", "ejb-jar.xml", "openejb-jar.xml", "env-entries.properties", "beans.xml", "ra.xml", "application.xml", "application-client.xml", "persistence-fragment.xml", "persistence.xml", "validation.xml", NewLoaderLogic.EXCLUSION_FILE);
     private static String ALTDD = SystemInstance.get().getOptions().get(OPENEJB_ALTDD_PREFIX, (String) null);
-    private static final String[] ignoreDirs = SystemInstance.get().getProperty("openejb.ignore.directories", ".svn,_svn,cvs").split(",");
 
     public AppModule load(final File jarFile) throws OpenEJBException {
         // verify we have a valid file
@@ -108,7 +107,7 @@ public class DeploymentLoader implements
 
         try {
             // determine the module type
-            Class<? extends DeploymentModule> moduleClass;
+            final Class<? extends DeploymentModule> moduleClass;
 
             try {
                 doNotUseClassLoader = ClassLoaderUtil.createClassLoader(jarPath, new URL[]{baseUrl}, getOpenEJBClassLoader());
@@ -234,6 +233,7 @@ public class DeploymentLoader implements
         return ParentClassLoaderFinder.Helper.get();
     }
 
+    @SuppressWarnings("unchecked")
     private void addWebPersistenceDD(final String name, final Map<String, Object> otherDD, final AppModule appModule) {
         if (otherDD.containsKey(name)) {
             List<URL> persistenceUrls = (List<URL>) appModule.getAltDDs().get(name);
@@ -516,7 +516,7 @@ public class DeploymentLoader implements
             DeploymentsResolver.loadFromClasspath(base, filteredUrls, appModule.getClassLoader());
             addPersistenceUnits(appModule, filteredUrls.toArray(new URL[filteredUrls.size()]));
 
-            for (DeploymentModule module : appModule.getDeploymentModule()) {
+            for (final DeploymentModule module : appModule.getDeploymentModule()) {
                 module.setStandaloneModule(false);
             }
 
@@ -626,6 +626,7 @@ public class DeploymentLoader implements
         addWebModule(webModule, appModule);
     }
 
+    @SuppressWarnings("unchecked")
     public static void addWebModule(final WebModule webModule, final AppModule appModule) throws OpenEJBException {
         // create and add the WebModule
         appModule.getWebModules().add(webModule);
@@ -693,10 +694,10 @@ public class DeploymentLoader implements
      * then per specification we use the web.xml metadata-complete setting
      * to imply the same for EJBs.
      *
-     * @param webModule
-     * @param ejbModule
+     * @param webModule WebModule
+     * @param ejbModule EjbModule
      */
-    private static void fillEjbJar(WebModule webModule, EjbModule ejbModule) {
+    private static void fillEjbJar(final WebModule webModule, final EjbModule ejbModule) {
         final Object o = webModule.getAltDDs().get("ejb-jar.xml");
         if (o != null) return;
         if (ejbModule.getEjbJar() != null) return;
@@ -709,7 +710,7 @@ public class DeploymentLoader implements
         ejbModule.setEjbJar(ejbJar);
     }
 
-    private static boolean isMetadataComplete(WebModule webModule, EjbModule ejbModule) {
+    private static boolean isMetadataComplete(final WebModule webModule, final EjbModule ejbModule) {
         if (webModule.getWebApp() == null) return false;
         if (!webModule.getWebApp().isMetadataComplete()) return false;
 
@@ -781,7 +782,7 @@ public class DeploymentLoader implements
         return webModule;
     }
 
-    public static List<URL> filterWebappUrls(final URL[] webUrls, URL exclusions) {
+    public static List<URL> filterWebappUrls(final URL[] webUrls, final URL exclusions) {
         Filter excludeFilter = null;
         if (exclusions != null) {
             try {
@@ -1025,7 +1026,7 @@ public class DeploymentLoader implements
     /**
      * Finds all faces configuration files and stores them in the WebModule
      *
-     * @param webModule
+     * @param webModule WebModule
      * @throws OpenEJBException
      */
     private void addFacesConfigs(final WebModule webModule) throws OpenEJBException {
@@ -1256,8 +1257,8 @@ public class DeploymentLoader implements
     /**
      * Modifies the map passed in with all the alt dd URLs found
      *
-     * @param map
-     * @param log
+     * @param map Map
+     * @param log boolean
      * @return the same map instance updated with alt dds
      */
     public static Map<String, URL> altDDSources(final Map<String, URL> map, final boolean log) {
@@ -1349,13 +1350,19 @@ public class DeploymentLoader implements
             // file path has trailing !/ that must be stripped off
             pathname = pathname.substring(0, pathname.lastIndexOf('!'));
 
-            pathname = URLDecoder.decode(pathname);
+            try {
+                pathname = URLDecoder.decode(pathname, "UTF-8");
+            } catch (Exception e) {
+                //noinspection deprecation
+                pathname = URLDecoder.decode(pathname);
+            }
             return new File(pathname);
         } else if ("file".equals(warUrl.getProtocol())) {
             final String pathname = warUrl.getPath();
             try {
-                return new File(URLDecoder.decode(pathname, "UTF8"));
+                return new File(URLDecoder.decode(pathname, "UTF-8"));
             } catch (UnsupportedEncodingException e) {
+                //noinspection deprecation
                 return new File(URLDecoder.decode(pathname));
             }
         } else {
@@ -1410,6 +1417,7 @@ public class DeploymentLoader implements
         return discoverModuleType(baseUrl, classLoader, search);
     }
 
+    @SuppressWarnings("unchecked")
     public Class<? extends DeploymentModule> discoverModuleType(final URL baseUrl, final ClassLoader classLoader, final Set<RequireDescriptors> requireDescriptor) throws IOException, UnknownModuleTypeException {
         final boolean scanPotentialEjbModules = !requireDescriptor.contains(RequireDescriptors.EJB);
         final boolean scanPotentialClientModules = !requireDescriptor.contains(RequireDescriptors.CLIENT);
@@ -1485,22 +1493,11 @@ public class DeploymentLoader implements
 
         //#TOMEE-613
         final File file = URLs.toFile(baseUrl);
-        if (file.isDirectory() && !file.isHidden() && !file.equals(SystemInstance.get().getHome().getDirectory("lib", false))) {
-
-            final String fn = file.getName();
-            boolean checkEAR = true;
+        if (DeploymentsResolver.isValidDirectory(file)) {
 
-            for (final String dir : ignoreDirs) {
-                if (fn.equalsIgnoreCase(dir)) {
-                    checkEAR = false;
-                    break;
-                }
-            }
-
-            if (checkEAR) {
-                if (containsEarAssets(file)) return AppModule.class;
-                if (containsWebAssets(file)) return WebModule.class;
-            }
+            final File[] files = file.listFiles();
+            if (containsEarAssets(files)) return AppModule.class;
+            if (containsWebAssets(files)) return WebModule.class;
         }
 
         final Class<? extends DeploymentModule> defaultType = (Class<? extends DeploymentModule>) SystemInstance.get().getOptions().get("openejb.default.deployment-module", (Class<?>) null);
@@ -1516,10 +1513,9 @@ public class DeploymentLoader implements
         throw new UnknownModuleTypeException("Unknown module type: url=" + path); // baseUrl can be null
     }
 
-    private boolean containsWebAssets(File dir) {
-        final File[] files = dir.listFiles();
+    private static boolean containsWebAssets(final File[] files) {
         if (files != null) {
-            for (File file : files) {
+            for (final File file : files) {
                 if (file.getName().endsWith(".jsp")) return true;
                 if (file.getName().endsWith(".html")) return true;
             }
@@ -1527,10 +1523,9 @@ public class DeploymentLoader implements
         return false;
     }
 
-    private boolean containsEarAssets(File dir) {
-        final File[] files = dir.listFiles();
+    private static boolean containsEarAssets(final File[] files) {
         if (files != null) {
-            for (File file : files) {
+            for (final File file : files) {
                 if (file.getName().endsWith(".jar")) return true;
                 if (file.getName().endsWith(".war")) return true;
                 if (file.getName().endsWith(".rar")) return true;

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java?rev=1417489&r1=1417488&r2=1417489&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentsResolver.java Wed Dec  5 15:40:24 2012
@@ -30,6 +30,7 @@ import org.apache.xbean.finder.filter.Fi
 import org.apache.xbean.finder.filter.IncludeExcludeFilter;
 
 import java.io.File;
+import java.io.FileFilter;
 import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -47,9 +48,37 @@ import static org.apache.openejb.util.UR
  * @version $Rev$ $Date$
  */
 public class DeploymentsResolver implements DeploymentFilterable {
-    private static final String EXCLUDE_INCLUDE_ORDER = SystemInstance.get().getOptions().get("openejb.exclude-include.order", "include-exclude");
 
+    private static final String EXCLUDE_INCLUDE_ORDER = SystemInstance.get().getOptions().get("openejb.exclude-include.order", "include-exclude");
+    private static final String[] ignoreDirs = SystemInstance.get().getProperty("openejb.ignore.directories", ".svn,_svn,cvs,.git,.hg").split(",");
     private static final Logger logger = DeploymentLoader.logger;
+    private static File lib = null;
+
+    static {
+        try {
+            lib = SystemInstance.get().getHome().getDirectory("lib", false);
+        } catch (IOException e) {
+            //Ignore
+        }
+    }
+
+    public static boolean isValidDirectory(final File file) {
+
+        if (file.isDirectory() && !file.isHidden() && !file.equals(lib)) {
+
+            final String fn = file.getName();
+
+            for (final String dir : ignoreDirs) {
+                if (fn.equalsIgnoreCase(dir)) {
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        return false;
+    }
 
     public static void loadFrom(final Deployments dep, final FileUtils path, final List<File> jarList) {
 
@@ -85,12 +114,12 @@ public class DeploymentsResolver impleme
     }
 
     public static class DeploymentsConfigurationException extends RuntimeException {
-        public DeploymentsConfigurationException(String message) {
+        public DeploymentsConfigurationException(final String message) {
             super(message);
         }
     }
 
-    private static void loadFromFile(Deployments dep, FileUtils path, List<File> jarList) {
+    private static void loadFromFile(final Deployments dep, final FileUtils path, final List<File> jarList) {
         final File file = Files.path(path.getDirectory(), dep.getFile());
 
         Files.exists(file);
@@ -102,35 +131,49 @@ public class DeploymentsResolver impleme
         }
     }
 
-    private static void loadFromDir(Deployments dep, FileUtils path, List<File> jarList) {
+    private static void loadFromDir(final Deployments dep, final FileUtils path, final List<File> jarList) {
         final File dir = Files.path(path.getDirectory(), dep.getDir());
 
         Files.exists(dir);
         Files.readable(dir);
         Files.dir(dir);
+        Files.notHidden(dir);
 
         final Map<String, File> files = new LinkedHashMap<String, java.io.File>();
-        for (File file : dir.listFiles()) {
-            files.put(file.getAbsolutePath(), file);
-        }
+        final File[] list = dir.listFiles(new FileFilter() {
+            @Override
+            public boolean accept(final File f) {
+                if (f.isDirectory()) {
+                    return DeploymentsResolver.isValidDirectory(f);
+                }
+                return true;
+            }
+        });
+
+        if (list != null) {
+            for (final File file : list) {
 
-        // Ignore any unpacked versions
-        for (File file : dir.listFiles()) {
-            if (!isArchive(file)) continue;
-            final String archive = file.getAbsolutePath();
-            files.remove(archive.substring(0, archive.length() - 4));
+                files.put(file.getAbsolutePath(), file);
+            }
+
+            // Ignore any unpacked versions
+            for (final File file : list) {
+                if (!isArchive(file)) continue;
+                final String archive = file.getAbsolutePath();
+                files.remove(archive.substring(0, archive.length() - 4));
+            }
         }
 
-        for (File file : files.values()) {
+        for (final File file : files.values()) {
             if (!jarList.contains(file)) {
                 jarList.add(file);
             }
         }
     }
 
-    private static boolean isArchive(File file) {
+    private static boolean isArchive(final File file) {
         if (!file.isFile()) return false;
-        if (!file.getName().endsWith("ar")) return false;
+        if (!file.getName().toLowerCase().endsWith("ar")) return false;
 
         final String name = file.getName();
         final char c = name.charAt(name.length() - 4);