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/13 15:23:59 UTC

svn commit: r1666462 - in /uima/sandbox/uima-ducc/trunk: uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/ uima-ducc-user/src/main/java/org/apache/uima/ducc/user/common/main/ uima-ducc-user/src/main/java/org/apache/uima/ducc/user/jp/

Author: burn
Date: Fri Mar 13 14:23:59 2015
New Revision: 1666462

URL: http://svn.apache.org/r1666462
Log:
UIMA-4253 Moved Ducc-User container crossing messages so can easily verify that the correct log4j setup is done on each side

Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccService.java
    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-common/src/main/java/org/apache/uima/ducc/common/main/DuccService.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccService.java?rev=1666462&r1=1666461&r2=1666462&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccService.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/main/DuccService.java Fri Mar 13 14:23:59 2015
@@ -35,7 +35,6 @@ import org.apache.uima.ducc.common.compo
 import org.apache.uima.ducc.common.exception.DuccComponentInitializationException;
 import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.common.utils.Utils;
-import org.apache.uima.ducc.user.common.investment.Investment;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 

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=1666462&r1=1666461&r2=1666462&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 Fri Mar 13 14:23:59 2015
@@ -99,32 +99,37 @@ public class DuccJobService {
 	        
 	        // cache current context classloader
 			ClassLoader sysCL = Thread.currentThread().getContextClassLoader();
+
 			// Fetch a classpath for the fenced Ducc container
-			String duccContainerClasspath = System
-					.getProperty("ducc.deploy.DuccClasspath");//"ducc.deploy.JpDuccClasspath");
+			String duccContainerClasspath = System.getProperty("ducc.deploy.DuccClasspath");
 			URLClassLoader ucl = create(duccContainerClasspath);
-			if ( System.getProperty("DEBUG") != null ) {
+			if (System.getProperty("ducc.debug") != null) {
 				DEBUG = true;
 			}
 			if (DEBUG) {
 				dump(ucl, 4);
 			}
 
-	 		System.out.println("DuccJobService.start() >>>>>>>>> Crossing from User Container to Ducc Container");
-			Thread.currentThread().setContextClassLoader(ucl);
+			// Load the DuccService class and find its methods of interest
+			Class<?> duccServiceClass = ucl.loadClass("org.apache.uima.ducc.common.main.DuccService");
+			Method bootMethod = duccServiceClass.getMethod("boot", String[].class);
+			Method setProcessorMethod = duccServiceClass.getMethod("setProcessor", Object.class, String[].class);
+			Method registerInvestmentInstanceMethod = duccServiceClass.getMethod("registerInvestmentInstance", Object.class);
+			Method startMethod = duccServiceClass.getMethod("start");
 
-			// Create DuccService instance
-			Class<?> classToLaunch = ucl.loadClass("org.apache.uima.ducc.common.main.DuccService");
-			Object duccContainerInstance = classToLaunch.newInstance();
+			System.out.println("DuccJobService.boot() >>>>>>>>> booting Ducc Container");
 
-			// initialize Ducc fenced container. It calls component's Configuration class
-			Method bootMethod = classToLaunch.getMethod("boot", String[].class);
+			// 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");
+
 			// 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");
+			String processorClass = System.getProperty("ducc.deploy.JpProcessorClass");
 
 			// Instantiate process container where the actual analysis will be done.
 			// Currently there are three containers:
@@ -139,20 +144,19 @@ public class DuccJobService {
 			Class<?> processorClz = sysCL.loadClass(processorClass);
 			IProcessContainer pc = (IProcessContainer) processorClz.newInstance();
 
+			System.out.println("DuccJobService.start() >>>>>>>>> Starting Ducc Container");
+ 
 			// Call DuccService.setProcessor() to hand-off instance of the 
 			// process container to the component along with this process args
-			Method setProcessorMethod = classToLaunch.getMethod("setProcessor",
-					Object.class, String[].class);
 			setProcessorMethod.invoke(duccContainerInstance, pc, args);
 
-			Method registerInvestmentInstanceMethod = classToLaunch.getMethod("registerInvestmentInstance",
-					Object.class);
+			// Hand-off investment object
 			registerInvestmentInstanceMethod.invoke(duccContainerInstance, investment);
 			
-	        // Call DuccService.start() to initialize the process
-			// and begin processing
-			Method startMethod = classToLaunch.getMethod("start");// ,
+	        // Call DuccService.start() to initialize the process and begin processing
 			startMethod.invoke(duccContainerInstance);
+
+			System.out.println("DuccJobService.start()  <<<<<<<< Ducc Container ended");
 			
 		} catch( Throwable t) {
 			t.printStackTrace();

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=1666462&r1=1666461&r2=1666462&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 Fri Mar 13 14:23:59 2015
@@ -50,6 +50,8 @@ 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;
 
 	/**
 	 * This method is called to fetch a WorkItem ID from a given CAS which
@@ -95,67 +97,68 @@ public abstract class DuccAbstractProces
 		}
     }
     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());
- 		System.out.println("DuccAbstractProcessContainer.initialize() >>>>>>>>> Crossed from Ducc Container to User Container");
 		try {
-
     		return doInitialize(p, arg);
         }finally {
 			Thread.currentThread().setContextClassLoader(savedCL);
- 	 		System.out.println("DuccAbstractProcessContainer.initialize() <<<<<<<< Returned from User Container to Ducc Container");
-			System.setProperty("log4j.configuration", "");
+			System.getProperties().remove("log4j.configuration");
+ 	 		System.out.println("DuccAbstractProcessContainer.initialize() <<<<<<<< User Container initialized");
         }
     }
     public void deploy() throws Exception {
 
+    	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());
- 		System.out.println("DuccAbstractProcessContainer.deploy() >>>>>>>>> Crossed from Ducc Container to User Container");
          try {
      		doDeploy();
          } finally {
  			Thread.currentThread().setContextClassLoader(savedCL);
- 	 		System.out.println("DuccAbstractProcessContainer.deploy() <<<<<<<< Returned from User Container to Ducc Container");
  			//	Pin thread to its own CAS serializer instance
  			serializerMap.put( Thread.currentThread().getId(), new DuccUimaSerializer());
-			if ( System.getProperties().containsKey("log4j.configuration")) {
-				// remove log4j configuration property after calling user code
-				System.getProperties().remove("log4j.configuration");
-			}
+ 			// remove log4j configuration property after calling user code
+ 			System.getProperties().remove("log4j.configuration");
+			System.out.println("DuccAbstractProcessContainer.deploy() <<<<<<<< User Container deployed");
          }
      }
     public List<Properties> process(Object xmi) throws Exception {
+    	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 {
      		return doProcess(xmi);
          }finally {
  			Thread.currentThread().setContextClassLoader(savedCL);
+ 			if (debug) System.out.println("DuccAbstractProcessContainer.process() <<<<<<<< User Container processed");
          }
      }
     public void stop() throws Exception {
+    	if (debug) System.out.println("DuccAbstractProcessContainer.stop() >>>>>>>>> Stopping User Container");
  		// save current context cl and inject System classloader as
  		// a context cl before calling user code. 
  		ClassLoader savedCL = Thread.currentThread().getContextClassLoader();
  		Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
- 		System.out.println("DuccAbstractProcessContainer.stop() >>>>>>>>> Crossed from Ducc Container to User Container");
          
  		try {
      		doStop();
          }finally {
  			Thread.currentThread().setContextClassLoader(savedCL);
- 	 		System.out.println("DuccAbstractProcessContainer.stop() <<<<<<<< Returned from User Container to Ducc Container");
-
+ 	 		if (debug) System.out.println("DuccAbstractProcessContainer.stop() <<<<<<<< User Container stopped");
          }
      }