Author: burn
Date: Thu Jul 7 19:05:26 2016
New Revision: 1751826
URL: http://svn.apache.org/viewvc?rev=1751826&view=rev
Log:
UIMA-5003 Hide logger-related system properties while launching broker. Ruduce
from 3 to 2 the number of copies of class-loading code\!
Modified:
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/UimaASProcessContainer.java
Modified:
uima/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/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java?rev=1751826&r1=1751825&r2=1751826&view=diff
==============================================================================
---
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java
(original)
+++
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/DuccJobService.java
Thu Jul 7 19:05:26 2016
@@ -38,7 +38,6 @@ 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 {
@@ -90,7 +89,7 @@ public class DuccJobService {
public void start(String[] args) throws Exception {
try {
investment = new Investment();
-
+
// cache current context classloader
ClassLoader sysCL =
Thread.currentThread().getContextClassLoader();
@@ -115,7 +114,7 @@ public class DuccJobService {
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
+ HashMap<String, String> savedPropsMap =
hideLoggingProperties(); // Ensure DUCC doesn't try to use the user's logging
setup
// Construct & initialize Ducc fenced container.
// It calls component's Configuration class
@@ -124,7 +123,7 @@ public class DuccJobService {
bootMethod.invoke(duccContainerInstance, (Object) args);
logger.log(Level.INFO, "<<<<<<<< Ducc Container
booted");
- restoreLoggingProperties(); // May not be necessary as
user's logger has been established
+ restoreLoggingProperties(savedPropsMap); // 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.
@@ -165,12 +164,12 @@ public class DuccJobService {
}
- private void hideLoggingProperties() {
+ public static HashMap<String,String> 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>();
+ HashMap<String, String> savedPropsMap = new
HashMap<String,String>();
for (String prop : propsToSave) {
String val = System.getProperty(prop);
if (val != null) {
@@ -179,10 +178,10 @@ public class DuccJobService {
//System.out.println("!!!! Saved prop " + prop
+ " = " + val);
}
}
-
+ return savedPropsMap;
}
- private void restoreLoggingProperties() {
+ public static void restoreLoggingProperties(HashMap<String,String>
savedPropsMap) {
for (String prop : savedPropsMap.keySet()) {
System.setProperty(prop, savedPropsMap.get(prop));
//System.out.println("!!!! Restored prop " + prop + " =
" + System.getProperty(prop));
Modified:
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/UimaASProcessContainer.java
URL:
http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/UimaASProcessContainer.java?rev=1751826&r1=1751825&r2=1751826&view=diff
==============================================================================
---
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/UimaASProcessContainer.java
(original)
+++
uima/uima-ducc/trunk/uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/UimaASProcessContainer.java
Thu Jul 7 19:05:26 2016
@@ -24,9 +24,7 @@ import java.lang.management.ManagementFa
import java.lang.reflect.Method;
import java.net.BindException;
import java.net.InetAddress;
-import java.net.MalformedURLException;
import java.net.SocketException;
-import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.HashMap;
@@ -50,6 +48,7 @@ import org.apache.uima.analysis_engine.A
import org.apache.uima.cas.CAS;
import org.apache.uima.collection.EntityProcessStatus;
import org.apache.uima.ducc.IUser;
+import org.apache.uima.ducc.user.common.main.DuccJobService;
import org.apache.uima.util.Level;
import org.apache.uima.util.Logger;
import org.xml.sax.Attributes;
@@ -177,21 +176,13 @@ public class UimaASProcessContainer ext
}
}
}
- public static void dump(ClassLoader cl, int numLevels) {
- int n = 0;
- for (URLClassLoader ucl = (URLClassLoader) cl; ucl != null
&& ++n <= numLevels; ucl = (URLClassLoader) ucl.getParent()) {
- System.out.println("Class-loader " + n + " has " +
ucl.getURLs().length + " urls:");
- for (URL u : ucl.getURLs()) {
- System.out.println(" " + u );
- }
- }
- }
private void deployBroker(String duccHome) throws Exception {
// Save current context class loader. When done loading the
broker jars
// this class loader will be restored
ClassLoader currentCL =
Thread.currentThread().getContextClassLoader();
-
+ HashMap<String, String> savedPropsMap = null;
+
try {
// setup a classpath for Ducc broker
String[] brokerClasspath = new String[] {
@@ -200,11 +191,15 @@ public class UimaASProcessContainer ext
};
// isolate broker in its own Class loader
- URLClassLoader ucl = create(brokerClasspath);
+ URLClassLoader ucl =
DuccJobService.create(brokerClasspath);
Thread.currentThread().setContextClassLoader(ucl);
+ savedPropsMap = DuccJobService.hideLoggingProperties();
// Ensure DUCC doesn't try to use the user's logging setup
classToLaunch =
ucl.loadClass("org.apache.activemq.broker.BrokerService");
- dump(ucl, 4);
+ if (System.getProperty("ducc.debug") != null) {
+ System.out.println("Classpath for the internal
broker");
+ DuccJobService.dump(ucl, 4);
+ }
brokerInstance = classToLaunch.newInstance();
Method setDedicatedTaskRunnerMethod =
classToLaunch.getMethod("setDedicatedTaskRunner", boolean.class);
@@ -249,6 +244,7 @@ public class UimaASProcessContainer ext
// restore context class loader
Thread.currentThread().setContextClassLoader(currentCL);
brokerLatch.countDown();
+ DuccJobService.restoreLoggingProperties(savedPropsMap);
// May not be necessary as user's logger has been established
}
}
@@ -267,29 +263,7 @@ public class UimaASProcessContainer ext
return false;
}
}
- public static URLClassLoader create(String[] classPathElements)
throws MalformedURLException {
- ArrayList<URL> urlList = new
ArrayList<URL>(classPathElements.length);
- for (String element : classPathElements) {
- if (element.endsWith("*")) {
- File dir = new File(element.substring(0,
element.length() - 1));
- File[] files = dir.listFiles(); // Will be null if
missing or not a dir
- if (files != null) {
- for (File f : files) {
- if (f.getName().endsWith(".jar")) {
- urlList.add(f.toURI().toURL());
- }
- }
- }
- } else {
- File f = new File(element);
- if (f.exists()) {
- urlList.add(f.toURI().toURL());
- }
- }
- }
- URL[] urls = new URL[urlList.size()];
- return new URLClassLoader(urlList.toArray(urls),
ClassLoader.getSystemClassLoader().getParent());
- }
+
/**
* This method is called via reflection and stops the UIMA-AS service,
* the client, and the colocated broker.