You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2015/03/19 19:35:40 UTC
svn commit: r1667846 - in
/uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user:
common/main/DuccJobService.java jp/DuccAbstractProcessContainer.java
Author: burn
Date: Thu Mar 19 18:35:40 2015
New Revision: 1667846
URL: http://svn.apache.org/r1667846
Log:
UIMA-4253 Establish user's logger early ... hide 4 logging properties from DUCC
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java
uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/DuccAbstractProcessContainer.java
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java?rev=1667846&r1=1667845&r2=1667846&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java Thu Mar 19 18:35:40 2015
@@ -24,6 +24,9 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.uima.ducc.user.common.investment.Investment;
import org.apache.uima.ducc.user.jp.iface.IProcessContainer;
@@ -35,6 +38,7 @@ import org.apache.uima.ducc.user.jp.ifac
public class DuccJobService {
boolean DEBUG = false;
private Investment investment = null;
+ private HashMap<String, String> savedPropsMap;
public static URLClassLoader create(String classPath)
throws MalformedURLException {
@@ -85,16 +89,6 @@ public class DuccJobService {
public void start(String[] args) throws Exception {
try {
- String log4jConfigurationFile = System.getProperty("log4j.configuration");
- // if user provided log4j configuration file via -D, save it for later
- // under a different property name. Remove "log4j.configuration" from System
- // properties to prevent Ducc from using it to configure its logger.
- // The user's log4j configuration property will be restored before crossing
- // class loader boundary from ducc to user.
- if ( log4jConfigurationFile != null ) {
- System.setProperty("ducc.user.log4j.saved.configuration",log4jConfigurationFile);
- System.getProperties().remove("log4j.configuration");
- }
investment = new Investment();
// cache current context classloader
@@ -117,16 +111,21 @@ public class DuccJobService {
Method registerInvestmentInstanceMethod = duccServiceClass.getMethod("registerInvestmentInstance", Object.class);
Method startMethod = duccServiceClass.getMethod("start");
- System.out.println("DuccJobService.boot() >>>>>>>>> booting Ducc Container");
+ // Establish user's logger early to prevent the DUCC code from accidentally doing so
+ Logger logger = Logger.getLogger(DuccJobService.class.getName());
+ logger.log(Level.INFO, ">>>>>>>>> Booting Ducc Container");
+ hideLoggingProperties(); // Ensure DUCC doesn't try to use the user's logging setup
+
// Construct & initialize Ducc fenced container.
// It calls component's Configuration class
Thread.currentThread().setContextClassLoader(ucl);
Object duccContainerInstance = duccServiceClass.newInstance();
bootMethod.invoke(duccContainerInstance, (Object) args);
- System.out.println("DuccJobService.boot() <<<<<<<< Ducc Container initialized");
-
+ logger.log(Level.INFO, "<<<<<<<< Ducc Container booted");
+ restoreLoggingProperties(); // May not be necessary as user's logger has been established
+
// below property is set by component's Configuration class. It can also
// be provided on the command line in case a custom processor is needed.
String processorClass = System.getProperty("ducc.deploy.JpProcessorClass");
@@ -144,7 +143,7 @@ public class DuccJobService {
Class<?> processorClz = sysCL.loadClass(processorClass);
IProcessContainer pc = (IProcessContainer) processorClz.newInstance();
- System.out.println("DuccJobService.start() >>>>>>>>> Starting Ducc Container");
+ logger.log(Level.INFO, ">>>>>>>>> Running Ducc Container");
// Call DuccService.setProcessor() to hand-off instance of the
// process container to the component along with this process args
@@ -156,7 +155,7 @@ public class DuccJobService {
// Call DuccService.start() to initialize the process and begin processing
startMethod.invoke(duccContainerInstance);
- System.out.println("DuccJobService.start() <<<<<<<< Ducc Container ended");
+ logger.log(Level.INFO, "<<<<<<<< Ducc Container ended");
} catch( Throwable t) {
t.printStackTrace();
@@ -165,7 +164,31 @@ public class DuccJobService {
}
}
+
+ private void hideLoggingProperties() {
+ String[] propsToSave = { "log4j.configuration",
+ "java.util.logging.config.file",
+ "java.util.logging.config.class",
+ "org.apache.uima.logger.class"};
+ savedPropsMap = new HashMap<String,String>();
+ for (String prop : propsToSave) {
+ String val = System.getProperty(prop);
+ if (val != null) {
+ savedPropsMap.put(prop, val);
+ System.getProperties().remove(prop);
+ //System.out.println("!!!! Saved prop " + prop + " = " + val);
+ }
+ }
+ }
+
+ private void restoreLoggingProperties() {
+ for (String prop : savedPropsMap.keySet()) {
+ System.setProperty(prop, savedPropsMap.get(prop));
+ //System.out.println("!!!! Restored prop " + prop + " = " + System.getProperty(prop));
+ }
+ }
+
public static void main(String[] args) {
try {
DuccJobService service = new DuccJobService();
Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/DuccAbstractProcessContainer.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/DuccAbstractProcessContainer.java?rev=1667846&r1=1667845&r2=1667846&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/DuccAbstractProcessContainer.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/DuccAbstractProcessContainer.java Thu Mar 19 18:35:40 2015
@@ -50,7 +50,7 @@ public abstract class DuccAbstractProces
// Map to store DuccUimaSerializer instances. Each has affinity to a thread
protected static Map<Long, DuccUimaSerializer> serializerMap =
new HashMap<Long, DuccUimaSerializer>();
-
+
protected final boolean debug = System.getProperty("ducc.debug") != null;
/**
@@ -90,26 +90,17 @@ public abstract class DuccAbstractProces
return serializerMap.get(Thread.currentThread().getId());
}
- private void restoreLog4j() {
- String log4jConfigurationFile="";
- if ( (log4jConfigurationFile = System.getProperty("ducc.user.log4j.saved.configuration")) != null ) {
- System.setProperty("log4j.configuration", log4jConfigurationFile);
- }
- }
public int initialize(Properties p, String[] arg) throws Exception {
System.out.println("DuccAbstractProcessContainer.initialize() >>>>>>>>> Initializing User Container");
// save current context cl and inject System classloader as
// a context cl before calling user code. This is done in
// user code needs to load resources
- // Restore user's log4j setting (was hidden from ducc-side logger)
ClassLoader savedCL = Thread.currentThread().getContextClassLoader();
- restoreLog4j();
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
try {
return doInitialize(p, arg);
}finally {
Thread.currentThread().setContextClassLoader(savedCL);
- System.getProperties().remove("log4j.configuration");
System.out.println("DuccAbstractProcessContainer.initialize() <<<<<<<< User Container initialized");
}
}
@@ -118,9 +109,7 @@ public abstract class DuccAbstractProces
System.out.println("DuccAbstractProcessContainer.deploy() >>>>>>>>> Deploying User Container");
// save current context cl and inject System classloader as
// a context cl before calling user code.
- // Restore user's log4j setting (was hidden from ducc-side logger)
ClassLoader savedCL = Thread.currentThread().getContextClassLoader();
- restoreLog4j();
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
try {
doDeploy();
@@ -128,8 +117,6 @@ public abstract class DuccAbstractProces
Thread.currentThread().setContextClassLoader(savedCL);
// Pin thread to its own CAS serializer instance
serializerMap.put( Thread.currentThread().getId(), new DuccUimaSerializer());
- // remove log4j configuration property after calling user code
- System.getProperties().remove("log4j.configuration");
System.out.println("DuccAbstractProcessContainer.deploy() <<<<<<<< User Container deployed");
}
}
@@ -137,7 +124,6 @@ public abstract class DuccAbstractProces
if (debug) System.out.println("DuccAbstractProcessContainer.process() >>>>>>>>> Processing User Container");
// save current context cl and inject System classloader as
// a context cl before calling user code.
- // No need to restore log4j properties here
ClassLoader savedCL = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
try {
@@ -175,4 +161,5 @@ public abstract class DuccAbstractProces
throw e;
}
}
+
}