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
}
}