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.


Reply via email to