You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2019/03/22 21:27:28 UTC

svn commit: r1856080 - in /uima/uima-ducc/trunk: uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/ uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/ uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/

Author: cwiklik
Date: Fri Mar 22 21:27:28 2019
New Revision: 1856080

URL: http://svn.apache.org/viewvc?rev=1856080&view=rev
Log:
UIMA-6015 moved uima version detection to DuccJobSubmit

Modified:
    uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java
    uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java
    uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java

Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java?rev=1856080&r1=1856079&r2=1856080&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/DuccCommandExecutor.java Fri Mar 22 21:27:28 2019
@@ -813,7 +813,7 @@ public class DuccCommandExecutor extends
 					
 					
 					String duccHomePath = Utils.findDuccHome();
-					
+					/*
 					String[] jars = classpath.split(":");
 					URLClassLoader clsLoader = newClassLoader(jars);
 					Class<?> cls = clsLoader.loadClass("org.apache.uima.impl.UimaVersion");
@@ -837,7 +837,7 @@ public class DuccCommandExecutor extends
 					} else {
 						((JavaCommandLine) cmdLine).setClasspath(classpath);
 					}
-
+					*/
 					cmdLine.addOption("-DDUCC_HOME=" + duccHomePath);
 					cmdLine.addOption("-Dducc.deploy.configuration="
 								+ System.getProperty("ducc.deploy.configuration"));

Modified: uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java?rev=1856080&r1=1856079&r2=1856080&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-cli/src/main/java/org/apache/uima/ducc/cli/DuccJobSubmit.java Fri Mar 22 21:27:28 2019
@@ -18,13 +18,20 @@
 */
 package org.apache.uima.ducc.cli;
 
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Map.Entry;
 import java.util.Properties;
 
 import org.apache.uima.ducc.cli.aio.AllInOneLauncher;
+import org.apache.uima.ducc.common.exception.DuccRuntimeException;
 import org.apache.uima.ducc.common.utils.DuccSchedulerClasses;
 import org.apache.uima.ducc.common.utils.IllegalConfigurationException;
+import org.apache.uima.ducc.common.utils.Utils;
 import org.apache.uima.ducc.transport.event.IDuccContext.DuccContext;
 import org.apache.uima.ducc.transport.event.SubmitJobDuccEvent;
 import org.apache.uima.ducc.transport.event.SubmitJobReplyDuccEvent;
@@ -320,8 +327,54 @@ public class DuccJobSubmit
         }
 
     }
-
+	  private URLClassLoader newClassLoader(String[] classPathElements) throws IOException  {
+		    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.getCanonicalFile().toURI().toURL());
+		            }
+		          }
+		        }
+		      } else {
+		        File f = new File(element);
+		        if (f.exists()) {
+		          urlList.add(f.getCanonicalFile().toURI().toURL());
+		        }
+		      }
+		    }
+		    URL[] urls = new URL[urlList.size()];
+		    return new URLClassLoader(urlList.toArray(urls), ClassLoader.getSystemClassLoader().getParent());
+		  }
     //**********
+	private void modifyClasspathBasedOnUimaVersion(String classpathKey) throws Exception {
+        String duccHomePath = Utils.findDuccHome();
+        
+        String classpath = jobRequestProperties.getProperty(classpathKey);
+		String[] jars = classpath.split(":");
+		URLClassLoader clsLoader = newClassLoader(jars);
+		Class<?> cls = clsLoader.loadClass("org.apache.uima.impl.UimaVersion");
+		Method majorVersionMethod = cls.getMethod("getMajorVersion");
+		short majorVersion = (short)majorVersionMethod.invoke(null);
+		
+		
+        if ( !duccHomePath.trim().endsWith("/") ) {
+			duccHomePath = duccHomePath.concat("/");
+		}
+		String workItemJarDir = duccHomePath+"lib/uima-ducc/workitem/uima-ducc-workitem-";
+		if ( majorVersion < 3 ) {
+			classpath = workItemJarDir+"v2.jar:"+classpath;
+		} else if ( majorVersion >= 3 ) {
+			classpath = workItemJarDir+"v3.jar:"+classpath;
+		} else {
+			throw new DuccRuntimeException("Unknown version of UIMA - majorVersion="+majorVersion);
+		}
+		jobRequestProperties.setProperty(classpathKey,classpath);
+	}
 
     /**
      * Execute collects the job parameters, does basic error and correctness checking, and sends
@@ -355,7 +408,10 @@ public class DuccJobSubmit
         if (!jobRequestProperties.containsKey(key_cp)) {
             jobRequestProperties.setProperty(key_cp, System.getProperty("java.class.path"));
         }
-
+        // using user classpath determine which uima version is being used and 
+        // add to the front a corresponding version of uima-ducc-workitem-v<N>.jar
+        modifyClasspathBasedOnUimaVersion(key_cp);
+        
         if (jobRequestProperties.containsKey(UiOption.Debug.pname())) {
             jobRequestProperties.dump();
         }

Modified: uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java?rev=1856080&r1=1856079&r2=1856080&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-pullservice/src/main/java/org/apache/uima/ducc/ps/service/protocol/builtin/DefaultServiceProtocolHandler.java Fri Mar 22 21:27:28 2019
@@ -20,6 +20,8 @@ package org.apache.uima.ducc.ps.service.
 
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectOutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.util.Objects;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -107,9 +109,10 @@ public class DefaultServiceProtocolHandl
 		} catch (Throwable e) {
 			initError = true;
 			running = false;
+			e.printStackTrace();
 			logger.log(Level.WARNING, "ProtocolHandler initialize() failed -",e);
 			throw new ServiceInitializationException(
-					"Thread:" + Thread.currentThread().getName() + " Failed initialization");
+					"Thread:" + Thread.currentThread().getName() + " Failed initialization - "+  e);
 		} finally {
 
 			initLatch.countDown();