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