You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/07/20 15:25:07 UTC
svn commit: r1612084 - in
/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina:
LazyStopWebappClassLoader.java naming/resources/EmptyDirContext.java
Author: rmannibucau
Date: Sun Jul 20 13:25:07 2014
New Revision: 1612084
URL: http://svn.apache.org/r1612084
Log:
EmptyDirContext should support scanning of @Web
Modified:
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/naming/resources/EmptyDirContext.java
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=1612084&r1=1612083&r2=1612084&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 Sun Jul 20 13:25:07 2014
@@ -39,6 +39,7 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
+import java.util.LinkedList;
public class LazyStopWebappClassLoader extends WebappClassLoader {
private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, LazyStopWebappClassLoader.class.getName());
@@ -51,6 +52,7 @@ public class LazyStopWebappClassLoader e
private boolean forceStopPhase = Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.webappclassloader.force-stop-phase", "false"));
private ClassLoaderConfigurer configurer;
private final int hashCode;
+ private Collection<File> additionalRepos;
public LazyStopWebappClassLoader() {
j2seClassLoader = getSystemClassLoader();
@@ -77,6 +79,11 @@ public class LazyStopWebappClassLoader e
}
}
+ public Collection<File> getAdditionalRepos() {
+ initAdditionalRepos();
+ return additionalRepos;
+ }
+
@Override
public Class<?> loadClass(final String name) throws ClassNotFoundException {
if ("org.apache.openejb.hibernate.OpenEJBJtaPlatform".equals(name)
@@ -158,17 +165,12 @@ public class LazyStopWebappClassLoader e
return restarting;
}
- // embeddeding implementation of sthg (JPA, JSF) can lead to classloading issues if we don't enrich the webapp
- // with our integration jars
- // typically the class will try to be loaded by the common classloader
- // but the interface implemented or the parent class
- // will be in the webapp
- @Override
- public void start() throws LifecycleException {
- super.start(); // do it first otherwise we can't use this as classloader
-
- // mainly for tomee-maven-plugin
+ public synchronized void initAdditionalRepos() {
+ if (additionalRepos != null) {
+ return;
+ }
if (CONTEXT.get() != null) {
+ additionalRepos = new LinkedList<>();
final String root = CONTEXT.get().getServletContext().getRealPath("/");
if (root != null) {
final String externalRepositories = SystemInstance.get().getProperty("tomee." + new File(root).getName() + ".externalRepositories");
@@ -177,16 +179,35 @@ public class LazyStopWebappClassLoader e
for (final String additional : externalRepositories.split(",")) {
final String trim = additional.trim();
if (!trim.isEmpty()) {
- try { // not addURL to look here first
- super.addRepository(new File(trim).toURI().toURL().toExternalForm());
- } catch (final MalformedURLException e) {
- LOGGER.error(e.getMessage());
- }
+ final File file = new File(trim);
+ additionalRepos.add(file);
}
}
}
}
}
+ }
+
+ // embeddeding implementation of sthg (JPA, JSF) can lead to classloading issues if we don't enrich the webapp
+ // with our integration jars
+ // typically the class will try to be loaded by the common classloader
+ // but the interface implemented or the parent class
+ // will be in the webapp
+ @Override
+ public void start() throws LifecycleException {
+ super.start(); // do it first otherwise we can't use this as classloader
+
+ // mainly for tomee-maven-plugin
+ initAdditionalRepos();
+ if (additionalRepos != null) {
+ for (final File f : additionalRepos) {
+ try { // not addURL to look here first
+ super.addRepository(f.toURI().toURL().toExternalForm());
+ } catch (final MalformedURLException e) {
+ LOGGER.error(e.getMessage());
+ }
+ }
+ }
// add configurer enrichments
if (configurer != null) {
Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/naming/resources/EmptyDirContext.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/naming/resources/EmptyDirContext.java?rev=1612084&r1=1612083&r2=1612084&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/naming/resources/EmptyDirContext.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/naming/resources/EmptyDirContext.java Sun Jul 20 13:25:07 2014
@@ -18,8 +18,10 @@ package org.apache.tomee.catalina.naming
import org.apache.catalina.core.StandardContext;
import org.apache.naming.resources.FileDirContext;
+import org.apache.tomee.catalina.LazyStopWebappClassLoader;
import java.io.File;
+import java.util.Collection;
// we need a FileDirContext (so doesn't work with not exploded wars) for boot time
// note lifecycle is a quick one mainly used internally, other listeners are not intended to be used
@@ -50,6 +52,14 @@ public class EmptyDirContext extends Fil
if (shouldLookup(name)) {
return super.file(name);
}
+ if ("/WEB-INF/classes".equals(name)) {
+ if (context.getLoader() != null && LazyStopWebappClassLoader.class.isInstance(context.getLoader().getClassLoader())) {
+ final Collection<File> repos = LazyStopWebappClassLoader.class.cast(context.getLoader().getClassLoader()).getAdditionalRepos();
+ if (repos != null && !repos.isEmpty()) {
+ return repos.iterator().next();
+ }
+ }
+ }
return null;
}