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/10/09 12:14:05 UTC
svn commit: r1630362 - in /tomee/tomee/trunk:
container/openejb-core/src/main/java/org/apache/openejb/util/
maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/
tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/
Author: rmannibucau
Date: Thu Oct 9 10:14:05 2014
New Revision: 1630362
URL: http://svn.apache.org/r1630362
Log:
ensuring webapp loader have the right parent (at least openejb one) + correct default for logger properties
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.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/util/Logger.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java?rev=1630362&r1=1630361&r2=1630362&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java Thu Oct 9 10:14:05 2014
@@ -33,7 +33,6 @@ import java.util.ResourceBundle;
public class Logger {
private static final String SUFFIX = ".Messages";
private static final String OPENEJB = "org.apache.openejb";
- private static final Properties EMPTY_PROPS = new Properties();
private static LogStreamFactory logStreamFactory;
// don't return the instance since it needs to stay private but export which one is used to allow integration with other libs (as tomcat ;))
@@ -46,7 +45,7 @@ public class Logger {
}
public static synchronized void configure() {
- configure(EMPTY_PROPS);
+ configure(System.getProperties());
}
public static synchronized void configure(final Properties config) {
Modified: tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java?rev=1630362&r1=1630361&r2=1630362&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java (original)
+++ tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java Thu Oct 9 10:14:05 2014
@@ -124,6 +124,9 @@ public class TomEEEmbeddedMojo extends A
@Parameter(defaultValue = "${project}", readonly = true, required = true)
private MavenProject project;
+ @Parameter(property = "tomee-embedded-plugin.mavenLog", defaultValue = "true")
+ private boolean mavenLog;
+
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (!classpathAsWar && "pom".equals(packaging)) {
@@ -131,11 +134,18 @@ public class TomEEEmbeddedMojo extends A
return;
}
- final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ final Properties originalSystProp = new Properties();
+ originalSystProp.putAll(System.getProperties());
+
+ final Thread thread = Thread.currentThread();
+ final ClassLoader loader = thread.getContextClassLoader();
final String logFactory = System.getProperty("openejb.log.factory");
MavenLogStreamFactory.setLogger(getLog());
- System.setProperty("openejb.log.factory", "org.apache.openejb.maven.util.MavenLogStreamFactory");
+ if (mavenLog) {
+ System.setProperty("openejb.log.factory", "org.apache.openejb.maven.util.MavenLogStreamFactory");
+ System.setProperty("openejb.jul.forceReload", "true");
+ }
final Container container = new Container();
final Configuration config = getConfig();
@@ -167,10 +177,10 @@ public class TomEEEmbeddedMojo extends A
if (context != null) {
getLog().warn("Context will be ignored since not using classpathAsWar");
}
- container.deploy(warFile.getName(), warFile);
+ container.deploy(context == null ? warFile.getName() : context, warFile);
} else {
if (useProjectClasspath) {
- Thread.currentThread().setContextClassLoader(createClassLoader(loader));
+ thread.setContextClassLoader(createClassLoader(loader));
}
container.deployClasspathAsWebApp(context, docBase); // null is handled properly so no issue here
}
@@ -200,7 +210,8 @@ public class TomEEEmbeddedMojo extends A
} else {
System.setProperty("openejb.log.factory", logFactory);
}
- Thread.currentThread().setContextClassLoader(loader);
+ thread.setContextClassLoader(loader);
+ System.setProperties(originalSystProp);
}
}
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=1630362&r1=1630361&r2=1630362&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 Thu Oct 9 10:14:05 2014
@@ -454,10 +454,11 @@ public class TomcatWebAppBuilder impleme
StandardContext standardContext;
{
+ final ClassLoader containerLoader = Helper.get();
final Host host = hosts.getDefault();
if (StandardHost.class.isInstance(host)) {
try {
- standardContext = StandardContext.class.cast(ParentClassLoaderFinder.Helper.get().loadClass(StandardHost.class.cast(host).getContextClass()).newInstance());
+ standardContext = StandardContext.class.cast(containerLoader.loadClass(StandardHost.class.cast(host).getContextClass()).newInstance());
} catch (final Throwable th) {
logger.warning("Can't use context class specified, using default StandardContext", th);
standardContext = new StandardContext();
@@ -465,6 +466,11 @@ public class TomcatWebAppBuilder impleme
} else {
standardContext = new StandardContext();
}
+ // should be optional but in maven parent is app loader and not maven loader which is the real parent
+ final ClassLoader currentParent = standardContext.getParentClassLoader();
+ if (currentParent == null || isParent(currentParent, containerLoader)) {
+ standardContext.setParentClassLoader(containerLoader);
+ }
}
if (contextXml != null) {
standardContext.setConfigFile(contextXmlUrl);
@@ -556,6 +562,17 @@ public class TomcatWebAppBuilder impleme
}
}
+ private static boolean isParent(final ClassLoader parent, final ClassLoader child) {
+ ClassLoader current = child;
+ while (current != null) {
+ if (current == parent) {
+ return true;
+ }
+ current = current.getParent();
+ }
+ return child.getParent() == null && child != ClassLoader.getSystemClassLoader(); // maven ClassRealm classloader...yeah that's not awesome
+ }
+
private static boolean isRoot(final String name) {
return "/ROOT".equals(name) || "ROOT".equals(name) || name == null || name.isEmpty() || "ROOT.war".equals(name);
}