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())
{