Author: rmannibucau
Date: Sat Mar 16 15:13:22 2013
New Revision: 1457261
URL: http://svn.apache.org/r1457261
Log:
TOMEE-794 using classloaderconfigurer for jars.txt + small optimization on
ProvisioningUtil (avoid to download N times the same http artifact)
Removed:
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappLoader.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/classloader/ClassLoaderConfigurer.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/CompositeClassLoaderConfigurer.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.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/QuickJarsTxtParser.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/LazyStopWebappClassLoader.java
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ProvisioningWebappLoader.java
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.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=1457261&r1=1457260&r2=1457261&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
Sat Mar 16 15:13:22 2013
@@ -308,35 +308,27 @@ public class ClassLoaderUtil {
}
}
- 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)));
+ // from the app
+ final ClassLoaderConfigurer configurer1 = QuickJarsTxtParser.parse(new
File(appId, "META-INF/" + QuickJarsTxtParser.FILE_NAME));
+ final ClassLoaderConfigurer configurer2 = QuickJarsTxtParser.parse(new
File(appId, "WEB-INF/" + QuickJarsTxtParser.FILE_NAME));
+
+ // external config
+ ClassLoaderConfigurer configurer3 =
ClassLoaderUtil.configurer(updatedAppId);
+ if (configurer3 == null) { // try the complete path
+ configurer3 = ClassLoaderUtil.configurer(appId);
+ }
final URL[] urls;
- ClassLoaderConfigurer configurer =
ClassLoaderUtil.configurer(updatedAppId);
- if (configurer == null) { // try the complete path
- configurer = ClassLoaderUtil.configurer(appId);
- }
- if (configurer != null) {
- final Collection<URL> urlList = new ArrayList<URL>();
- for (final URL rawUrl : rawUrls) {
- if (configurer.accept(rawUrl)) {
- urlList.add(rawUrl);
- }
- }
- urlList.addAll(Arrays.asList(configurer.additionalURLs()));
- urlList.addAll(jarsXmlUrls);
- urls = urlList.toArray(new URL[urlList.size()]);
- } else if (jarsXmlUrls.isEmpty()) {
+ if (configurer1 == null && configurer2 == null && configurer3 == null)
{
urls = rawUrls;
} else {
- final Collection<URL> urlList = new ArrayList<URL>();
- urlList.addAll(Arrays.asList(rawUrls));
- urlList.addAll(jarsXmlUrls);
- urls = urlList.toArray(new URL[urlList.size()]);
+ final CompositeClassLoaderConfigurer configurer = new
CompositeClassLoaderConfigurer(configurer1, configurer2, configurer3);
+ final Collection<URL> list = new ArrayList<URL>();
+ list.addAll(Arrays.asList(rawUrls));
+ ClassLoaderConfigurer.Helper.configure(list, configurer);
+ urls = list.toArray(new URL[list.size()]);
}
-
-
return new TempClassLoader(createClassLoader(appId, urls, parent));
}
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=1457261&r1=1457260&r2=1457261&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
Sat Mar 16 15:13:22 2013
@@ -56,6 +56,7 @@ import org.apache.openejb.cdi.OpenEJBTra
import org.apache.openejb.cdi.OptimizedLoaderService;
import org.apache.openejb.cdi.ThreadSingletonServiceImpl;
import org.apache.openejb.classloader.ClassLoaderConfigurer;
+import org.apache.openejb.classloader.CompositeClassLoaderConfigurer;
import org.apache.openejb.component.ClassLoaderEnricher;
import org.apache.openejb.config.ConfigurationFactory;
import org.apache.openejb.config.NewLoaderLogic;
@@ -1698,24 +1699,19 @@ public class Assembler extends Assembler
parent = parentFinder.getParentClassLoader(parent);
}
- final ClassLoaderConfigurer configurer =
ClassLoaderUtil.configurer(appInfo.appId);
- if (configurer != null) {
- final Iterator<URL> it = jars.iterator();
- while (it.hasNext()) {
- if (!configurer.accept(it.next())) {
- it.remove();
- }
- }
- jars.addAll(Arrays.asList(configurer.additionalURLs()));
- }
-
final String prefix;
if (appInfo.webAppAlone) {
prefix = "WEB-INF/";
} else {
prefix = "META-INF/";
}
- jars.addAll(QuickJarsTxtParser.parse(new File(appInfo.path, prefix +
QuickJarsTxtParser.FILE_NAME)));
+ final ClassLoaderConfigurer configurer1 = QuickJarsTxtParser.parse(new
File(appInfo.path, prefix + QuickJarsTxtParser.FILE_NAME));
+ final ClassLoaderConfigurer configurer2 =
ClassLoaderUtil.configurer(appInfo.appId);
+
+ if (configurer1 != null || configurer2 != null) {
+ final ClassLoaderConfigurer configurer = new
CompositeClassLoaderConfigurer(configurer1, configurer2);
+ ClassLoaderConfigurer.Helper.configure(jars, configurer);
+ }
final URL[] filtered = jars.toArray(new URL[jars.size()]);
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ClassLoaderConfigurer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ClassLoaderConfigurer.java?rev=1457261&r1=1457260&r2=1457261&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ClassLoaderConfigurer.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ClassLoaderConfigurer.java
Sat Mar 16 15:13:22 2013
@@ -17,8 +17,27 @@
package org.apache.openejb.classloader;
import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
public interface ClassLoaderConfigurer {
URL[] additionalURLs();
boolean accept(final URL url);
+
+ public static class Helper {
+ private Helper() {
+ // no-op
+ }
+
+ public static void configure(final Collection<URL> urls, final
ClassLoaderConfigurer configurer) {
+ final Iterator<URL> it = urls.iterator();
+ while (it.hasNext()) {
+ if (!configurer.accept(it.next())) {
+ it.remove();
+ }
+ }
+ urls.addAll(Arrays.asList(configurer.additionalURLs()));
+ }
+ }
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/CompositeClassLoaderConfigurer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/CompositeClassLoaderConfigurer.java?rev=1457261&r1=1457260&r2=1457261&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/CompositeClassLoaderConfigurer.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/CompositeClassLoaderConfigurer.java
Sat Mar 16 15:13:22 2013
@@ -25,12 +25,14 @@ public class CompositeClassLoaderConfigu
private final ClassLoaderConfigurer[] composites;
private final URL[] urls;
- public CompositeClassLoaderConfigurer(final ClassLoaderConfigurer[]
configurers) {
+ public CompositeClassLoaderConfigurer(final ClassLoaderConfigurer...
configurers) {
composites = configurers;
final Set<URL> urlSet = new HashSet<URL>();
- for (ClassLoaderConfigurer configurer : configurers) {
- urlSet.addAll(Arrays.asList(configurer.additionalURLs()));
+ for (final ClassLoaderConfigurer configurer : configurers) {
+ if (configurer != null) {
+ urlSet.addAll(Arrays.asList(configurer.additionalURLs()));
+ }
}
urls = urlSet.toArray(new URL[urlSet.size()]);
}
@@ -42,8 +44,8 @@ public class CompositeClassLoaderConfigu
@Override
public boolean accept(final URL url) {
- for (ClassLoaderConfigurer configurer : composites) {
- if (!configurer.accept(url)) {
+ for (final ClassLoaderConfigurer configurer : composites) {
+ if (configurer != null && !configurer.accept(url)) {
return false;
}
}
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java?rev=1457261&r1=1457260&r2=1457261&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/classloader/ProvisioningClassLoaderConfigurer.java
Sat Mar 16 15:13:22 2013
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.classloader;
+import org.apache.openejb.loader.Files;
import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.ProvisioningUtil;
import org.apache.openejb.util.LogCategory;
@@ -27,7 +28,6 @@ import org.apache.xbean.finder.filter.Fi
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
-import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -39,7 +39,7 @@ import java.util.Collection;
* Handled file format:
* -xbean
* +http://..../camel-core.jar
- * +org.foo:bar:1.0
+ * +mvn:org.foo:bar:1.0
*
* The maven like urls needs the openejb-provisinning module
*
@@ -68,7 +68,7 @@ public class ProvisioningClassLoaderConf
}
public void setConfiguration(final String configFile) {
- final Collection<String> toAdd = new ArrayList<String>();
+ final Collection<URL> toAdd = new ArrayList<URL>();
final Collection<String> toExclude = new ArrayList<String>();
BufferedReader reader = null;
@@ -88,7 +88,7 @@ public class ProvisioningClassLoaderConf
if (line.startsWith("+")) {
line = line.substring(1);
}
- toAdd.add(ProvisioningUtil.realLocation(line));
+
toAdd.addAll(Files.listJars(ProvisioningUtil.realLocation(line)));
}
}
@@ -98,16 +98,7 @@ public class ProvisioningClassLoaderConf
IO.close(reader);
}
- added = new URL[toAdd.size()];
- int i = 0;
- for (final String path : toAdd) {
- try {
- added[i++] = new File(path).toURI().toURL();
- } catch (MalformedURLException e) {
- LOGGER.warning("Can't add file " + path, e);
- }
- }
-
+ added = toAdd.toArray(new URL[toAdd.size()]);
if (toExclude.size() > 0) {
excluded = Filters.prefixes(toExclude.toArray(new
String[toExclude.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=1457261&r1=1457260&r2=1457261&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
Sat Mar 16 15:13:22 2013
@@ -21,6 +21,7 @@ import org.apache.openejb.ClassLoaderUti
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.api.LocalClient;
import org.apache.openejb.api.RemoteClient;
+import org.apache.openejb.classloader.ClassLoaderConfigurer;
import org.apache.openejb.classloader.WebAppEnricher;
import org.apache.openejb.config.event.BeforeDeploymentEvent;
import org.apache.openejb.core.EmptyResourcesClassLoader;
@@ -396,10 +397,10 @@ public class DeploymentLoader implements
createApplicationFromFiles(appId, tmpClassLoader, ejbModules,
clientModules, resouceModules, webModules, files);
}
- final Collection<URL> jarsXmlUrls = QuickJarsTxtParser.parse(new
File(appDir, "META-INF/" + QuickJarsTxtParser.FILE_NAME));
+ final ClassLoaderConfigurer configurer =
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) {
+ if (configurer != null) {
+ for (final URL url : configurer.additionalURLs()) {
try {
detectAndAddModuleToApplication(appId, tmpClassLoader,
ejbModules, clientModules, resouceModules,
webModules,
@@ -881,7 +882,10 @@ public class DeploymentLoader implements
webUrls.addAll(parser.getAdditionalURLs());
}
- webUrls.addAll(QuickJarsTxtParser.parse(new File(warFile, "WEB-INF/" +
QuickJarsTxtParser.FILE_NAME)));
+ final ClassLoaderConfigurer configurer = QuickJarsTxtParser.parse(new
File(warFile, "WEB-INF/" + QuickJarsTxtParser.FILE_NAME));
+ if (configurer != null) {
+ ClassLoaderConfigurer.Helper.configure(webUrls, configurer);
+ }
final URL[] webUrlsArray = webUrls.toArray(new URL[webUrls.size()]);
@@ -1301,7 +1305,12 @@ public class DeploymentLoader implements
// create the class loader
final List<URL> classPath = new ArrayList<URL>();
classPath.addAll(rarLibs.values());
- classPath.addAll(QuickJarsTxtParser.parse(new File(rarFile,
"META-INF/" + QuickJarsTxtParser.FILE_NAME)));
+
+ final ClassLoaderConfigurer configurer = QuickJarsTxtParser.parse(new
File(rarFile, "META-INF/" + QuickJarsTxtParser.FILE_NAME));
+ if (configurer != null) {
+ ClassLoaderConfigurer.Helper.configure(classPath, configurer);
+ }
+
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/QuickJarsTxtParser.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java?rev=1457261&r1=1457260&r2=1457261&view=diff
==============================================================================
---
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java
(original)
+++
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickJarsTxtParser.java
Sat Mar 16 15:13:22 2013
@@ -16,19 +16,11 @@
*/
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.classloader.ClassLoaderConfigurer;
+import org.apache.openejb.classloader.ProvisioningClassLoaderConfigurer;
import org.apache.openejb.loader.SystemInstance;
-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 {
private static final boolean ACTIVATED =
SystemInstance.get().getOptions().get("openejb.jarstxt.activated", true);
@@ -39,33 +31,13 @@ public final class QuickJarsTxtParser {
// no-op
}
- public static Collection<URL> parse(final File file) {
+ public static ClassLoaderConfigurer parse(final File file) {
if (!ACTIVATED || !file.exists()) {
- return new ArrayList<URL>(); // need to be modifiable
+ return null;
}
- 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;
+ final ProvisioningClassLoaderConfigurer configurer = new
ProvisioningClassLoaderConfigurer();
+ configurer.setConfiguration(file.getAbsolutePath());
+ return configurer;
}
}
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=1457261&r1=1457260&r2=1457261&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
Sat Mar 16 15:13:22 2013
@@ -51,12 +51,11 @@ public class ProvisioningUtil {
}
public static String cache() {
- return System.getProperty(OPENEJB_DEPLOYER_CACHE_FOLDER, "temp");
+ return System.getProperty(OPENEJB_DEPLOYER_CACHE_FOLDER, new
File(System.getProperty("openejb.base", "."), "temp").getAbsolutePath());
}
public static File cacheFile(final String path) {
- return new File(SystemInstance.get().getBase().getDirectory(),
- cache() + File.separator + path);
+ return new File(SystemInstance.get().getBase().getDirectory(), cache()
+ File.separator + path);
}
public static String copyTryingProxies(final URI source, final File
destination) throws Exception {
@@ -99,6 +98,9 @@ public class ProvisioningUtil {
public static String realLocation(final String rawLocation) {
if (rawLocation.startsWith(HTTP_PREFIX)) {
final File file = cacheFile(lastPart(rawLocation));
+ if (file.exists()) {
+ return file.getAbsolutePath();
+ }
String path = null;
try {
Modified:
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java?rev=1457261&r1=1457260&r2=1457261&view=diff
==============================================================================
---
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
(original)
+++
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
Sat Mar 16 15:13:22 2013
@@ -19,7 +19,6 @@ package org.apache.tomee.catalina;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.loader.WebappClassLoader;
-import org.apache.openejb.ClassLoaderUtil;
import org.apache.openejb.OpenEJB;
import org.apache.openejb.classloader.ClassLoaderConfigurer;
import org.apache.openejb.classloader.WebAppEnricher;
@@ -36,6 +35,7 @@ import java.util.Enumeration;
public class LazyStopWebappClassLoader extends WebappClassLoader {
private static final Logger LOGGER =
Logger.getInstance(LogCategory.OPENEJB,
LazyStopWebappClassLoader.class.getName());
+ private static final ThreadLocal<ClassLoaderConfigurer> INIT_CONFIGURER =
new ThreadLocal<ClassLoaderConfigurer>();
public static final String TOMEE_WEBAPP_FIRST = "tomee.webapp-first";
@@ -55,7 +55,7 @@ public class LazyStopWebappClassLoader e
private void construct() {
setDelegate(isDelegate());
- configurer =
ClassLoaderUtil.configurer(LazyStopWebappLoader.getCurrentAppId());
+ configurer = INIT_CONFIGURER.get();
}
@Override
@@ -137,7 +137,7 @@ public class LazyStopWebappClassLoader e
if (configurer != null) {
// add now we removed all we wanted
final URL[] enrichment = configurer.additionalURLs();
- for (URL url : enrichment) {
+ for (final URL url : enrichment) {
super.addURL(url);
}
}
@@ -193,6 +193,14 @@ public class LazyStopWebappClassLoader e
return "LazyStop" + super.toString();
}
+ public static void initContext(final ClassLoaderConfigurer configurer) {
+ INIT_CONFIGURER.set(configurer);
+ }
+
+ public static void cleanInitContext() {
+ INIT_CONFIGURER.remove();
+ }
+
private static class NoClassClassLoader extends ClassLoader {
private static final NoClassClassLoader INSTANCE = new
NoClassClassLoader();
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=1457261&r1=1457260&r2=1457261&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
Sat Mar 16 15:13:22 2013
@@ -19,13 +19,15 @@ package org.apache.tomee.catalina;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
+import org.apache.catalina.loader.VirtualWebappLoader;
+import org.apache.openejb.ClassLoaderUtil;
+import org.apache.openejb.classloader.ClassLoaderConfigurer;
+import org.apache.openejb.classloader.CompositeClassLoaderConfigurer;
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;
import java.io.File;
-import java.net.URL;
/**
* Usage example in META-INF/context.xml
@@ -42,7 +44,23 @@ import java.net.URL;
*
*/
-public class ProvisioningWebappLoader extends LazyStopWebappLoader {
+public class ProvisioningWebappLoader extends VirtualWebappLoader {
+ @Override
+ public void backgroundProcess() {
+ final ClassLoader classloader = super.getClassLoader();
+ if (classloader instanceof LazyStopWebappClassLoader) {
+ final LazyStopWebappClassLoader lazyStopWebappClassLoader =
(LazyStopWebappClassLoader) classloader;
+ lazyStopWebappClassLoader.restarting();
+ try {
+ super.backgroundProcess();
+ } finally {
+ lazyStopWebappClassLoader.restarted();
+ }
+ } else {
+ super.backgroundProcess();
+ }
+ }
+
@Override
protected void startInternal() throws LifecycleException {
// standard tomcat part
@@ -54,14 +72,15 @@ public class ProvisioningWebappLoader ex
}
}
+ ClassLoaderConfigurer configurer =
ClassLoaderUtil.configurer(getContainer().getName());
+
// 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/" +
QuickJarsTxtParser.FILE_NAME);
- if (jarsXml.exists()) {
- for (final URL url : QuickJarsTxtParser.parse(jarsXml)) {
- builder.append(URLs.toFile(url)).append(";"); //
provisiningutil already called so simply decode url
- }
+ final ClassLoaderConfigurer configurerTxt =
QuickJarsTxtParser.parse(jarsXml);
+ if (configurerTxt != null) {
+ configurer = new CompositeClassLoaderConfigurer(configurer,
configurerTxt);
}
}
@@ -72,6 +91,16 @@ public class ProvisioningWebappLoader ex
}
Reflections.set(this, "virtualClasspath", cp);
- super.startInternal();
+ LazyStopWebappClassLoader.initContext(configurer);
+ try {
+ super.startInternal();
+ } finally {
+ LazyStopWebappClassLoader.cleanInitContext();
+ }
+ }
+
+ @Override
+ public String toString() {
+ return "Provisioning" + super.toString();
}
}
Modified:
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL:
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1457261&r1=1457260&r2=1457261&view=diff
==============================================================================
---
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
(original)
+++
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Sat Mar 16 15:13:22 2013
@@ -939,7 +939,7 @@ public class TomcatWebAppBuilder impleme
return;
}
- if (standardContextLoader != null &&
LazyStopWebappLoader.class.isInstance(standardContextLoader)) {
+ if (standardContextLoader != null &&
ProvisioningWebappLoader.class.isInstance(standardContextLoader)) {
standardContextLoader.setContainer(standardContext);
return; // no need to replace the loader
}