Author: rmannibucau Date: Thu Oct 9 20:01:15 2014 New Revision: 1630578 URL: http://svn.apache.org/r1630578 Log: supporting reloading of java.util.logging.SimpleFormatter.format
Modified: tomee/tomee/trunk/maven/tomee-embedded-maven-plugin/src/main/java/org/apache/openejb/maven/plugins/TomEEEmbeddedMojo.java 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=1630578&r1=1630577&r2=1630578&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 20:01:15 2014 @@ -29,11 +29,14 @@ import org.apache.openejb.core.ParentCla import org.apache.openejb.core.ProvidedClassLoaderFinder; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.maven.util.MavenLogStreamFactory; +import org.apache.openejb.util.JuliLogStreamFactory; import org.apache.tomee.embedded.Configuration; import org.apache.tomee.embedded.Container; import java.io.File; +import java.io.IOException; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -43,6 +46,8 @@ import java.util.Map; import java.util.Properties; import java.util.Scanner; import java.util.Set; +import java.util.logging.LogManager; +import java.util.logging.SimpleFormatter; /** * Run an Embedded TomEE. @@ -137,6 +142,9 @@ public class TomEEEmbeddedMojo extends A final Properties originalSystProp = new Properties(); originalSystProp.putAll(System.getProperties()); + // we use MavenLogStreamFactory but if user set some JUL config in properties we want to respect them + configureJULIfNeeded(); + final Thread thread = Thread.currentThread(); final ClassLoader loader = thread.getContextClassLoader(); @@ -212,6 +220,29 @@ public class TomEEEmbeddedMojo extends A } } + private void configureJULIfNeeded() { + if (containerProperties != null && "true".equalsIgnoreCase(containerProperties.get("openejb.jul.forceReload"))) { + System.getProperties().putAll(containerProperties); + new JuliLogStreamFactory(); // easiest way to support forceReload, note this doesn't do that much ATM + final String simpleFormat = containerProperties.get("java.util.logging.SimpleFormatter.format"); + if (simpleFormat != null) { + try { + final Field field = SimpleFormatter.class.getDeclaredField("format"); + field.setAccessible(true); + final int modifiers = field.getModifiers(); + if (Modifier.isFinal(modifiers)) { + final Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, modifiers & ~Modifier.FINAL); + } + field.set(null, simpleFormat); + } catch (final Throwable ignored) { + // no-op: don't block for it + } + } + } + } + private ClassLoader createClassLoader(final ClassLoader parent) { final List<URL> urls = new ArrayList<>(); for (final Artifact artifact : (Set<Artifact>) project.getArtifacts()) {