Author: rmannibucau
Date: Thu Mar 14 22:19:09 2013
New Revision: 1456698

URL: http://svn.apache.org/r1456698
Log:
TOMEE-794 using flat file + allowing urls (not only http, mvn, file)

Added:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java
Removed:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsXmlParser.java
Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
    
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
    
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ProvisioningWebappLoader.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/ClassLoaderUtil.java
 Thu Mar 14 22:19:09 2013
@@ -16,10 +16,9 @@
  */
 package org.apache.openejb;
 
-import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.classloader.ClassLoaderConfigurer;
 import org.apache.openejb.classloader.CompositeClassLoaderConfigurer;
-import org.apache.openejb.config.QuickJarsXmlParser;
+import org.apache.openejb.config.QuickJarsTxtParser;
 import org.apache.openejb.core.TempClassLoader;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.LogCategory;
@@ -309,8 +308,8 @@ public class ClassLoaderUtil {
             }
         }
 
-        final Collection<URL> jarsXmlUrls = QuickJarsXmlParser.parse(new 
File(appId, "META-INF/" + QuickJarsXmlParser.FILE_NAME)).getAdditionalURLs();
-        jarsXmlUrls.addAll(QuickJarsXmlParser.parse(new File(appId, "WEB-INF/" 
+ QuickJarsXmlParser.FILE_NAME)).getAdditionalURLs());
+        final Collection<URL> jarsXmlUrls = QuickJarsTxtParser.parse(new 
File(appId, "META-INF/" + QuickJarsTxtParser.FILE_NAME));
+        jarsXmlUrls.addAll(QuickJarsTxtParser.parse(new File(appId, "WEB-INF/" 
+ QuickJarsTxtParser.FILE_NAME)));
 
         final URL[] urls;
         ClassLoaderConfigurer configurer = 
ClassLoaderUtil.configurer(updatedAppId);

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
 Thu Mar 14 22:19:09 2013
@@ -59,7 +59,7 @@ import org.apache.openejb.classloader.Cl
 import org.apache.openejb.component.ClassLoaderEnricher;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.NewLoaderLogic;
-import org.apache.openejb.config.QuickJarsXmlParser;
+import org.apache.openejb.config.QuickJarsTxtParser;
 import org.apache.openejb.config.TldScanner;
 import org.apache.openejb.core.ConnectorReference;
 import org.apache.openejb.core.CoreContainerSystem;
@@ -1715,7 +1715,7 @@ public class Assembler extends Assembler
         } else {
             prefix = "META-INF/";
         }
-        jars.addAll(QuickJarsXmlParser.parse(new File(appInfo.path, prefix + 
QuickJarsXmlParser.FILE_NAME)).getAdditionalURLs());
+        jars.addAll(QuickJarsTxtParser.parse(new File(appInfo.path, prefix + 
QuickJarsTxtParser.FILE_NAME)));
 
         final URL[] filtered = jars.toArray(new URL[jars.size()]);
 

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/DeploymentLoader.java
 Thu Mar 14 22:19:09 2013
@@ -396,7 +396,7 @@ public class DeploymentLoader implements
                 createApplicationFromFiles(appId, tmpClassLoader, ejbModules, 
clientModules, resouceModules, webModules, files);
             }
 
-            final Collection<URL> jarsXmlUrls = QuickJarsXmlParser.parse(new 
File(appDir, "META-INF/" + QuickJarsXmlParser.FILE_NAME)).getAdditionalURLs();
+            final Collection<URL> jarsXmlUrls = QuickJarsTxtParser.parse(new 
File(appDir, "META-INF/" + QuickJarsTxtParser.FILE_NAME));
             final Collection<URL> jarsXmlLib = new ArrayList<URL>();
             if (!jarsXmlUrls.isEmpty()) {
                 for (final URL url : jarsXmlUrls) {
@@ -881,7 +881,7 @@ public class DeploymentLoader implements
             webUrls.addAll(parser.getAdditionalURLs());
         }
 
-        webUrls.addAll(QuickJarsXmlParser.parse(new File(warFile, "WEB-INF/" + 
QuickJarsXmlParser.FILE_NAME)).getAdditionalURLs());
+        webUrls.addAll(QuickJarsTxtParser.parse(new File(warFile, "WEB-INF/" + 
QuickJarsTxtParser.FILE_NAME)));
 
         final URL[] webUrlsArray = webUrls.toArray(new URL[webUrls.size()]);
 
@@ -1301,7 +1301,7 @@ public class DeploymentLoader implements
         // create the class loader
         final List<URL> classPath = new ArrayList<URL>();
         classPath.addAll(rarLibs.values());
-        classPath.addAll(QuickJarsXmlParser.parse(new File(rarFile, 
"META-INF/" + QuickJarsXmlParser.FILE_NAME)).getAdditionalURLs());
+        classPath.addAll(QuickJarsTxtParser.parse(new File(rarFile, 
"META-INF/" + QuickJarsTxtParser.FILE_NAME)));
         final URL[] urls = classPath.toArray(new URL[classPath.size()]);
         final ClassLoader appClassLoader = 
ClassLoaderUtil.createTempClassLoader(appId, urls, parentClassLoader);
 

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
 Thu Mar 14 22:19:09 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.openejb.config;
 
+import org.apache.openejb.loader.Files;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
@@ -27,6 +28,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Locale;
 import java.util.Set;
@@ -62,47 +64,7 @@ public class QuickContextXmlParser exten
                 continue;
             }
 
-            if (token.endsWith("*.jar")) {
-                token = token.substring(0, token.length() - "*.jar".length());
-
-                final File directory = new File(token);
-                if (!directory.isDirectory()) {
-                    continue;
-                }
-
-                final String filenames[] = directory.list();
-                Arrays.sort(filenames);
-
-                for (final String rawFilename : filenames) {
-                    final String filename = 
rawFilename.toLowerCase(Locale.ENGLISH);
-                    if (!filename.endsWith(".jar")) {
-                        continue;
-                    }
-
-                    final File file = new File(directory, rawFilename);
-                    if (!file.isFile()) {
-                        continue;
-                    }
-
-                    try {
-                        set.add(file.toURI().toURL());
-                    } catch (MalformedURLException e) {
-                        // no-op
-                    }
-                }
-            } else {
-                // single file or directory
-                final File file = new File(token);
-                if (!file.exists()) {
-                    continue;
-                }
-
-                try {
-                    set.add(file.toURI().toURL());
-                } catch (MalformedURLException e) {
-                    // no-op
-                }
-            }
+            set.addAll(Files.listJars(token));
         }
         return set;
     }

Added: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java?rev=1456698&view=auto
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java
 (added)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java
 Thu Mar 14 22:19:09 2013
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.config;
+
+import org.apache.openejb.loader.Files;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.ProvisioningUtil;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+
+public final class QuickJarsTxtParser {
+    public static final String FILE_NAME = "jars.txt";
+
+    private QuickJarsTxtParser() {
+         // no-op
+    }
+
+    public static Collection<URL> parse(final File file) {
+        if (!file.exists()) {
+            return new ArrayList<URL>(); // need to be modifiable
+        }
+
+        final Collection<URL> deps = new ArrayList<URL>();
+
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new FileReader(file));
+
+            String line;
+            while ((line = reader.readLine()) != null) {
+                final String value = line.trim();
+                if (line.startsWith("#") || value.isEmpty()) {
+                    continue;
+                }
+
+                deps.addAll(Files.listJars(new 
File(ProvisioningUtil.realLocation(value)).getAbsolutePath()));
+            }
+        } catch (final Throwable e) {
+            Logger.getInstance(LogCategory.OPENEJB, 
QuickContextXmlParser.class.getName())
+                    .warning("QuickJarsTxtParser#parse: Failed to read 
provided stream");
+        } finally {
+            IO.close(reader);
+        }
+
+        return deps;
+    }
+}

Modified: 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/Files.java
 Thu Mar 14 22:19:09 2013
@@ -19,9 +19,15 @@ package org.apache.openejb.loader;
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
+import java.util.Set;
 import java.util.regex.Pattern;
 
 /**
@@ -293,6 +299,57 @@ public class Files {
         return sb.substring(0, sb.length() - delimiter.length());
     }
 
+    // return the token as url if simply a path otheriwse if ending by *.jar 
returning the list of
+    // files in the folder
+    public static Set<URL> listJars(final String path) {
+        final Set<URL> set = new HashSet<URL>();
+
+        String token = path;
+        if (token.endsWith("*.jar")) {
+            token = token.substring(0, token.length() - "*.jar".length());
+
+            final File directory = new File(token);
+            if (!directory.isDirectory()) {
+                return set;
+            }
+
+            final String filenames[] = directory.list();
+            Arrays.sort(filenames);
+
+            for (final String rawFilename : filenames) {
+                final String filename = 
rawFilename.toLowerCase(Locale.ENGLISH);
+                if (!filename.endsWith(".jar")) {
+                    continue;
+                }
+
+                final File file = new File(directory, rawFilename);
+                if (!file.isFile()) {
+                    continue;
+                }
+
+                try {
+                    set.add(file.toURI().toURL());
+                } catch (MalformedURLException e) {
+                    // no-op
+                }
+            }
+        } else {
+            // single file or directory
+            final File file = new File(token);
+            if (!file.exists()) {
+                return set;
+            }
+
+            try {
+                set.add(file.toURI().toURL());
+            } catch (MalformedURLException e) {
+                // no-op
+            }
+        }
+
+        return set;
+    }
+
     public static class FileRuntimeException extends RuntimeException {
         public FileRuntimeException(final String str) {
             super(str);
@@ -312,5 +369,4 @@ public class Files {
             super(e);
         }
     }
-
 }

Modified: 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-loader/src/main/java/org/apache/openejb/loader/ProvisioningUtil.java
 Thu Mar 14 22:19:09 2013
@@ -111,7 +111,7 @@ public class ProvisioningUtil {
                 return path;
             }
         }
-        try {
+        try { // full maven resolution
             final Class<?> clazz = 
ProvisioningUtil.class.getClassLoader().loadClass("org.apache.openejb.resolver.Resolver");
             final LocationResolver instance = (LocationResolver) 
clazz.newInstance();
             return instance.resolve(rawLocation);
@@ -123,17 +123,44 @@ public class ProvisioningUtil {
                 } catch (MalformedURLException e1) {
                     
Logger.getLogger(ProvisioningUtil.class.getName()).severe("Can't find " + 
rawLocation);
                 }
+            } else { // try url
+                try {
+                    final File file = cacheFile(lastPart(rawLocation));
+                    final URL url = new URL(rawLocation);
+                    InputStream is = null;
+                    try {
+                        is = new BufferedInputStream(url.openStream());
+                        IO.copy(is, file);
+                        return file.getAbsolutePath();
+                    } finally {
+                        IO.close(is);
+                    }
+                } catch (final Exception e1) {
+                    // no-op
+                }
             }
+
+            // if it was not an url that's just a file path
             return rawLocation;
         }
     }
 
     private static String quickMvnUrl(final String raw) throws 
MalformedURLException {
-        final StringBuilder builder = new StringBuilder();
+        StringBuilder builder = new StringBuilder();
         final String toParse;
         if (!raw.contains("!")) {
+            // try first local file with default maven settings
+            final File file = new File(new 
StringBuilder(System.getProperty("user.home")).append("/.m2/repository/").append(mvnArtifactPath(raw)).toString());
+            if (file.exists()) {
+                return file.getAbsolutePath();
+            }
+
+            // else use repo1
+            builder = new StringBuilder();
             builder.append(REPO1);
             toParse = raw;
+
+            // try first locally
         } else {
             final int repoIdx = raw.lastIndexOf("!");
             toParse = raw.substring(repoIdx + 1);
@@ -144,26 +171,33 @@ public class ProvisioningUtil {
             }
         }
 
+        builder.append(mvnArtifactPath(toParse));
+
+        return builder.toString();
+    }
+
+    private static String mvnArtifactPath(final String toParse) throws 
MalformedURLException {
+        final StringBuilder builder = new StringBuilder();
         final String[] segments = toParse.split("/");
         if (segments.length < 3) {
-            throw new MalformedURLException("Invalid path. " + raw);
+            throw new MalformedURLException("Invalid path. " + toParse);
         }
 
         final String group = segments[0];
         if (group.trim().isEmpty()) {
-            throw new MalformedURLException("Invalid groupId. " + raw);
+            throw new MalformedURLException("Invalid groupId. " + toParse);
         }
         builder.append(group.replace('.', '/')).append("/");
 
         final String artifact = segments[1];
         if (artifact.trim().isEmpty()) {
-            throw new MalformedURLException("Invalid artifactId. " + raw);
+            throw new MalformedURLException("Invalid artifactId. " + toParse);
         }
         builder.append(artifact).append("/");
 
         final String version = segments[2];
         if (version.trim().isEmpty()) {
-            throw new MalformedURLException("Invalid artifactId. " + raw);
+            throw new MalformedURLException("Invalid artifactId. " + toParse);
         }
         builder.append(version).append("/");
 
@@ -181,9 +215,8 @@ public class ProvisioningUtil {
         if (fullClassifier != null) {
             builder.append(fullClassifier);
         }
-        builder.append(".").append(type);
 
-        return builder.toString();
+        return builder.append(".").append(type).toString();
     }
 
     public static void addAdditionalLibraries() throws IOException {

Modified: 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ProvisioningWebappLoader.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ProvisioningWebappLoader.java?rev=1456698&r1=1456697&r2=1456698&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ProvisioningWebappLoader.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ProvisioningWebappLoader.java
 Thu Mar 14 22:19:09 2013
@@ -19,7 +19,7 @@ package org.apache.tomee.catalina;
 
 import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleException;
-import org.apache.openejb.config.QuickJarsXmlParser;
+import org.apache.openejb.config.QuickJarsTxtParser;
 import org.apache.openejb.loader.ProvisioningUtil;
 import org.apache.openejb.util.URLs;
 import org.apache.openejb.util.reflection.Reflections;
@@ -57,10 +57,9 @@ public class ProvisioningWebappLoader ex
         // WEB-INF/jars.xml
         if (Context.class.isInstance(getContainer())) {
             final File war = 
Contexts.warPath(Context.class.cast(getContainer()));
-            final File jarsXml = new File(war, "WEB-INF/" + 
QuickJarsXmlParser.FILE_NAME);
+            final File jarsXml = new File(war, "WEB-INF/" + 
QuickJarsTxtParser.FILE_NAME);
             if (jarsXml.exists()) {
-                final QuickJarsXmlParser parser = 
QuickJarsXmlParser.parse(jarsXml);
-                for (final URL url : parser.getAdditionalURLs()) {
+                for (final URL url : QuickJarsTxtParser.parse(jarsXml)) {
                     builder.append(URLs.toFile(url)).append(";"); // 
provisiningutil already called so simply decode url
                 }
             }


Reply via email to