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/25 20:49:35 UTC

svn commit: r1613491 - in /tomee/tomee/trunk: maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/ tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/

Author: rmannibucau
Date: Fri Jul 25 18:49:35 2014
New Revision: 1613491

URL: http://svn.apache.org/r1613491
Log:
making dynamic development working back after tomcat 8 migration

Modified:
    tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/JULLogger.java
    tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java
    tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java

Modified: tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java?rev=1613491&r1=1613490&r2=1613491&view=diff
==============================================================================
--- tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java (original)
+++ tomee/tomee/trunk/maven/tomee-maven-plugin/src/main/java/org/apache/openejb/maven/plugin/AbstractTomEEMojo.java Fri Jul 25 18:49:35 2014
@@ -117,6 +117,9 @@ public abstract class AbstractTomEEMojo 
     @Parameter(property = "tomee-plugin.apache-repos", defaultValue = "snapshots")
     protected String apacheRepos;
 
+    /**
+     * tomee classifier to use (webprofile or plus)
+     */
     @Parameter(property = "tomee-plugin.classifier", defaultValue = "webprofile")
     protected String tomeeClassifier;
 
@@ -217,6 +220,12 @@ public abstract class AbstractTomEEMojo 
     protected boolean forceReloadable;
 
     /**
+     * force webapp to be reloadable
+     */
+    @Parameter(property = "tomee-plugin.jsp-development", defaultValue = "true")
+    protected boolean forceJspDevelopment;
+
+    /**
      * supported formats:
      * --> groupId:artifactId:version...
      * --> unzip:groupId:artifactId:version...
@@ -288,12 +297,6 @@ public abstract class AbstractTomEEMojo 
     @Parameter
     protected List<File> externalRepositories;
 
-    /**
-     * when you set docBases to src/main/webapp setting it to true will allow hot refresh.
-     */
-    @Parameter(property = "tomee-plugin.skipWarResources", defaultValue = "false")
-    protected boolean skipWarResources = false;
-
     protected File deployedFile = null;
     protected RemoteServer server = null;
     protected String container = TOM_EE;
@@ -924,8 +927,9 @@ public abstract class AbstractTomEEMojo 
             }
         }
 
-        if (skipWarResources) {
-            strings.add("-Dtomee.skip-war-resources=" + skipWarResources);
+        if (forceJspDevelopment) {
+            getLog().info("TomEE will run in development mode");
+            strings.add("-Dtomee.jsp-development=true");
         }
 
         return strings;
@@ -940,10 +944,6 @@ public abstract class AbstractTomEEMojo 
             getLog().info("Forcing forceReloadable=true to be able to type 'reload[ENTER]' when classes are updated");
             forceReloadable = true;
         }
-        if (!skipWarResources) {
-            getLog().info("Forcing skipWarResources=true to be able to refresh resources with F5");
-            skipWarResources = true;
-        }
         if (docBases == null) {
             docBases = new ArrayList<File>();
         }

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java?rev=1613491&r1=1613490&r2=1613491&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java Fri Jul 25 18:49:35 2014
@@ -43,6 +43,7 @@ import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.URLs;
 import org.apache.tomcat.util.bcel.classfile.AnnotationEntry;
 import org.apache.tomcat.util.bcel.classfile.ElementValuePair;
+import org.apache.tomcat.util.bcel.classfile.JavaClass;
 import org.apache.tomcat.util.descriptor.web.ContextResource;
 import org.apache.tomcat.util.descriptor.web.JspPropertyGroup;
 import org.apache.tomcat.util.descriptor.web.WebXml;
@@ -377,6 +378,13 @@ public class OpenEJBContextConfig extend
             return;
         }
 
+        if ("true".equalsIgnoreCase(SystemInstance.get().getProperty("tomee.jsp-development", "true"))) {
+            final Wrapper jsp = Wrapper.class.cast(context.findChild("jsp"));
+            if (jsp != null) {
+                jsp.addInitParameter("development", "true");
+            }
+        }
+
         final ClassLoader classLoader = context.getLoader().getClassLoader();
 
         // add myfaces auto-initializer if mojarra is not present
@@ -509,6 +517,11 @@ public class OpenEJBContextConfig extend
     }
 
     @Override
+    protected void checkHandlesTypes(final JavaClass javaClass) {
+        // no-op
+    }
+
+    @Override
     protected void processAnnotationsFile(final File file, final WebXml fragment, final boolean handlesTypesOnly) {
         try {
             if (NewLoaderLogic.skip(file.toURI().toURL())) {

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java?rev=1613491&r1=1613490&r2=1613491&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java Fri Jul 25 18:49:35 2014
@@ -18,14 +18,11 @@ package org.apache.tomee.catalina;
 
 import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleException;
-import org.apache.catalina.LifecycleState;
+import org.apache.catalina.WebResource;
 import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.WebResourceSet;
 import org.apache.catalina.loader.WebappClassLoader;
 import org.apache.catalina.webresources.DirResourceSet;
-import org.apache.catalina.webresources.FileResourceSet;
-import org.apache.catalina.webresources.JarResourceSet;
-import org.apache.catalina.webresources.JarWarResourceSet;
 import org.apache.catalina.webresources.StandardRoot;
 import org.apache.openejb.OpenEJB;
 import org.apache.openejb.classloader.ClassLoaderConfigurer;
@@ -53,7 +50,6 @@ import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Locale;
 
 public class TomEEWebappClassLoader extends WebappClassLoader {
     private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, TomEEWebappClassLoader.class.getName());
@@ -208,16 +204,15 @@ public class TomEEWebappClassLoader exte
         }
         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");
-                if (externalRepositories != null) {
-                    for (final String additional : externalRepositories.split(",")) {
-                        final String trim = additional.trim();
-                        if (!trim.isEmpty()) {
-                            final File file = new File(trim);
-                            additionalRepos.add(file);
-                        }
+            final String contextPath = CONTEXT.get().getServletContext().getContextPath();
+            final String name = contextPath.isEmpty() ? "ROOT" : contextPath.substring(1);
+            final String externalRepositories = SystemInstance.get().getProperty("tomee." + name + ".externalRepositories");
+            if (externalRepositories != null) {
+                for (final String additional : externalRepositories.split(",")) {
+                    final String trim = additional.trim();
+                    if (!trim.isEmpty()) {
+                        final File file = new File(trim);
+                        additionalRepos.add(file);
                     }
                 }
             }
@@ -237,12 +232,11 @@ public class TomEEWebappClassLoader exte
         initAdditionalRepos();
         if (additionalRepos != null) {
             for (final File f : additionalRepos) {
-                try { // not addURL to look here first
-                    super.addURL(f.toURI().toURL());
-                } catch (final MalformedURLException e) {
-                    LOGGER.error(e.getMessage());
-                }
+                final DirResourceSet webResourceSet = new PremptiveDirResourceSet(resources, "/", f.getAbsolutePath(), "/");
+                webResourceSet.setClassLoaderOnly(true);
+                resources.addPreResources(webResourceSet);
             }
+            resources.setCachingAllowed(false);
         }
 
         // add configurer enrichments
@@ -359,4 +353,17 @@ public class TomEEWebappClassLoader exte
             throw new ClassNotFoundException();
         }
     }
+
+    private static final class PremptiveDirResourceSet extends DirResourceSet {
+        private static final String WEB_INF_CLASSES = "/WEB-INF/classes/";
+
+        public PremptiveDirResourceSet(final WebResourceRoot resources, final String s, final String absolutePath, final String s1) {
+            super(resources, s, absolutePath, s1);
+        }
+
+        @Override
+        public WebResource getResource(final String path) {
+            return super.getResource(path.startsWith(WEB_INF_CLASSES)? path.substring(WEB_INF_CLASSES.length() - 1) : path);
+        }
+    }
 }

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=1613491&r1=1613490&r2=1613491&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 Fri Jul 25 18:49:35 2014
@@ -32,7 +32,6 @@ import org.apache.catalina.Service;
 import org.apache.catalina.UserDatabase;
 import org.apache.catalina.Valve;
 import org.apache.catalina.WebResourceRoot;
-import org.apache.catalina.Wrapper;
 import org.apache.catalina.core.ContainerBase;
 import org.apache.catalina.core.NamingContextListener;
 import org.apache.catalina.core.StandardContext;
@@ -104,7 +103,6 @@ import org.apache.openejb.spi.ContainerS
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
-import org.apache.openejb.util.reflection.Reflections;
 import org.apache.tomcat.InstanceManager;
 import org.apache.tomcat.JarScanFilter;
 import org.apache.tomcat.util.descriptor.web.ApplicationParameter;
@@ -122,8 +120,6 @@ import org.apache.tomee.catalina.cluster
 import org.apache.tomee.catalina.environment.Hosts;
 import org.apache.tomee.catalina.event.AfterApplicationCreated;
 import org.apache.tomee.catalina.routing.RouterValve;
-import org.apache.tomee.catalina.websocket.JavaEEDefaultServerEnpointConfigurator;
-import org.apache.tomee.common.LegacyAnnotationProcessor;
 import org.apache.tomee.common.NamingUtil;
 import org.apache.tomee.common.UserTransactionFactory;
 import org.apache.tomee.loader.TomcatHelper;
@@ -1007,35 +1003,6 @@ public class TomcatWebAppBuilder impleme
                 standardContext.addFilterMapBefore(filterMap);
             }
         }
-
-        // can only be done until here (before_start)
-        if (Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.skip-war-resources", "false"))) {
-            /* play with StandardRoot to get:
-
-            @Override
-            protected File file(final String name) {
-                if (shouldLookup(name)) {
-                    return super.file(name);
-                }
-                if ("/WEB-INF/classes".equals(name)) {
-                    if (context.getLoader() != null && TomEEWebappClassLoader.class.isInstance(context.getLoader().getClassLoader())) {
-                        final Collection<File> repos = TomEEWebappClassLoader.class.cast(context.getLoader().getClassLoader()).getAdditionalRepos();
-                        if (repos != null && !repos.isEmpty()) {
-                            return repos.iterator().next();
-                        }
-                    }
-                }
-                return null;
-            }
-
-            private static boolean shouldLookup(final String name) {
-                return name != null && !name.equals("/WEB-INF/classes")
-                        && (name.matches("/?WEB-INF/[^/]*\\.?[^/]")
-                        || name.startsWith("/WEB-INF/lib") || name.startsWith("WEB-INF/lib")
-                        || name.startsWith("/META-INF/"));
-            }
-             */
-        }
     }
 
     private void initContextLoader(final StandardContext standardContext) {
@@ -1737,8 +1704,10 @@ public class TomcatWebAppBuilder impleme
 
     private void addConfiguredDocBases(final StandardContext standardContext, final ContextInfo contextInfo) {
         if (contextInfo.appInfo.path != null) {   // add external web resources
-            final String webResources = SystemInstance.get().getProperty("tomee." + new File(contextInfo.appInfo.path).getName() + ".docBases", contextInfo.appInfo.properties.getProperty("docBases"));
-            final String cache = SystemInstance.get().getProperty("tomee." + new File(contextInfo.appInfo.path).getName() + ".docBases.cache", contextInfo.appInfo.properties.getProperty("docBases.cache"));
+            final String contextPath = standardContext.getServletContext().getContextPath();
+            final String name = contextPath.isEmpty() ? "ROOT" : contextPath.substring(1);
+            final String webResources = SystemInstance.get().getProperty("tomee." + name + ".docBases", contextInfo.appInfo.properties.getProperty("docBases"));
+            final String cache = SystemInstance.get().getProperty("tomee." + name + ".docBases.cache", contextInfo.appInfo.properties.getProperty("docBases.cache"));
             if (webResources != null) {
                 for (final String alt : webResources.trim().split(",")) {
                     final String trim = alt.trim();

Modified: tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/JULLogger.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/JULLogger.java?rev=1613491&r1=1613490&r2=1613491&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/JULLogger.java (original)
+++ tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/JULLogger.java Fri Jul 25 18:49:35 2014
@@ -47,7 +47,7 @@ public class JULLogger implements Log {
                 // it is also possible that the user modified jre/lib/logging.properties -
                 // but that's really stupid in most cases
                 final Logger root=Logger.getLogger("");
-                final Handler handlers[]=root.getHandlers();
+                final Handler[] handlers = root.getHandlers();
                 for( int i=0; i< handlers.length; i++ ) {
                     // I only care about console - that's what's used in default config anyway
                     if( handlers[i] instanceof ConsoleHandler) {
@@ -165,7 +165,7 @@ public class JULLogger implements Log {
             String cname = "unknown";
             String method = "unknown";
             if (locations != null && locations.length > 3) {
-                StackTraceElement caller = locations[3];
+                final StackTraceElement caller = locations[3];
                 cname = caller.getClassName();
                 method = caller.getMethodName();
             }

Modified: tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java?rev=1613491&r1=1613490&r2=1613491&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java Fri Jul 25 18:49:35 2014
@@ -24,7 +24,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.concurrent.atomic.AtomicReference;
 
-public class ReloadableLog {
+public final class ReloadableLog {
 
     public static final Class<?>[] INTERFACES = new Class<?>[]{Log.class};
 

Modified: tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java?rev=1613491&r1=1613490&r2=1613491&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java Fri Jul 25 18:49:35 2014
@@ -21,7 +21,7 @@ import org.apache.juli.logging.Log;
 import java.lang.reflect.Method;
 
 public class TomEELog implements Log {
-    private static volatile boolean initialized = false;
+    private static volatile boolean initialized;
     private static volatile String loggerClazz;
     private static volatile boolean defaultLogger;