You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by de...@apache.org on 2014/11/15 11:51:20 UTC

svn commit: r1639855 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-container/src: main/java/org/apache/uima/ducc/container/common/ main/java/org/apache/uima/ducc/container/common/classloader/ main/java/org/apache/uima/ducc/container/jd/classload/ test/j...

Author: degenaro
Date: Sat Nov 15 10:51:19 2014
New Revision: 1639855

URL: http://svn.apache.org/r1639855
Log:
UIMA-4069 Redesign of JD toward the main goal of classpath separation for container (system) code.

JD daemon - revisions for initial support.

Added:
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ContainerPropertiesHelper.java   (with props)
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ClassLoaderUtil.java   (with props)
Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverErrorHandler.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ContainerPropertiesHelper.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ContainerPropertiesHelper.java?rev=1639855&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ContainerPropertiesHelper.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ContainerPropertiesHelper.java Sat Nov 15 10:51:19 2014
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.container.common;
+
+import org.apache.uima.ducc.common.config.SystemPropertiesHelper;
+
+public class ContainerPropertiesHelper extends SystemPropertiesHelper {
+
+	private IContainerLogger logger = ContainerLogger.getLogger(ContainerPropertiesHelper.class, IContainerLogger.Component.JD.name());
+	
+	private static ContainerPropertiesHelper instance = new ContainerPropertiesHelper();
+	
+	public static ContainerPropertiesHelper getInstance() {
+		return instance;
+	}
+	
+	public String getUserClasspath() {
+		String location = "getUserClasspath";
+		String retVal = super.getUserClasspath();
+		if(retVal != null) {
+			String[] list = retVal.split(":");
+			if(list != null) {
+				if(list.length > 0) {
+					logger.debug(location, IEntityId.null_id, SystemPropertiesHelper.Name.UserClasspath.name());
+					int index = 0;
+					for(String item : list) {
+						String text = "["+index+"]"+" "+item;
+						logger.debug(location, IEntityId.null_id, text);
+						index++;
+					}
+				}
+			}
+		}
+		return retVal;
+	}
+	
+}

Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/ContainerPropertiesHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java?rev=1639855&r1=1639854&r2=1639855&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java Sat Nov 15 10:51:19 2014
@@ -21,6 +21,7 @@ package org.apache.uima.ducc.container.c
 public class Standardize {
 
 	public enum Label {
+		directory,
 		node,
 		pid,
 		tid,
@@ -41,6 +42,7 @@ public class Standardize {
 		prev,
 		hash,
 		loaded,
+		loading,
 		seqNo,
 		transNo,
 		remote,

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ClassLoaderUtil.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ClassLoaderUtil.java?rev=1639855&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ClassLoaderUtil.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ClassLoaderUtil.java Sat Nov 15 10:51:19 2014
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+*/
+package org.apache.uima.ducc.container.common.classloader;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import org.apache.uima.ducc.container.common.ContainerLogger;
+import org.apache.uima.ducc.container.common.IContainerLogger;
+import org.apache.uima.ducc.container.common.IEntityId;
+import org.apache.uima.ducc.container.common.MessageBuffer;
+import org.apache.uima.ducc.container.common.Standardize;
+
+public class ClassLoaderUtil {
+
+	private static IContainerLogger logger = ContainerLogger.getLogger(ClassLoaderUtil.class, IContainerLogger.Component.JD.name());
+	
+	public static ClassLoader getClassLoader() {
+		return ClassLoader.getSystemClassLoader();
+	}
+	
+	public static ClassLoader getClassLoaderParent() {
+		return ClassLoader.getSystemClassLoader().getParent();
+	}
+	
+	private static ArrayList<String> resolveClasspathWildcardsDirectory(String dName) {
+		String location = "resolveClasspathWildcardsDirectory";
+		ArrayList<String> retVal = new ArrayList<String>();
+		if(dName != null) {
+			try {
+				retVal.add(dName);
+				logger.debug(location, IEntityId.null_id, dName);
+				File file = new File(dName);
+				if (file.isDirectory()) {
+					MessageBuffer mb = new MessageBuffer();
+					mb.append(Standardize.Label.directory.get()+file.getName());
+					logger.debug(location, IEntityId.null_id, mb);
+					File[] jars = file.listFiles();
+					for(File jar : jars) {
+						String jarName = jar.getCanonicalPath();
+						if(jarName.endsWith(".jar")) {
+							retVal.add(jarName);
+							logger.debug(location, IEntityId.null_id, jarName);
+						}
+					}
+				}
+			}
+			catch(Exception e) {
+				logger.error(location, IEntityId.null_id, e);
+			}
+		}
+		return retVal;
+	}
+	
+	private static ArrayList<String> resolveClasspathWildcards(ArrayList<String> list) {
+		ArrayList<String> retVal = new ArrayList<String>();
+		if(list != null) {
+			for(String item : list) {
+				ArrayList<String> xList = resolveClasspathWildcardsDirectory(item);
+				for(String xItem : xList) {
+					retVal.add(xItem);
+				}
+			}
+		}
+		return retVal;
+	}
+	
+	private static String convertToString(ArrayList<String> list) {
+		StringBuffer sb = new StringBuffer();
+		if(list != null) {
+			boolean first = true;
+			for(String item : list) {
+				if(first) {
+					first = false;
+				}
+				else {
+					sb.append(":");
+				}
+				sb.append(item);
+			}
+		}
+		return sb.toString();
+	}
+	
+	private static ArrayList<String> convertToList(String cp) {
+		ArrayList<String> retVal = new ArrayList<String>();
+		if(cp != null) {
+			String[] array = cp.split(":");
+			for(String item : array) {
+				retVal.add(item);
+			}
+		}
+		return retVal;
+	}
+	
+	public static String resolveClasspathWildcards(String cp) {
+		ArrayList<String> list = convertToList(cp);
+		list = resolveClasspathWildcards(list);
+		String retVal = convertToString(list);
+		return retVal;
+	}
+}

Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ClassLoaderUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java?rev=1639855&r1=1639854&r2=1639855&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java Sat Nov 15 10:51:19 2014
@@ -24,12 +24,14 @@ import java.lang.reflect.Type;
 import java.net.URL;
 import java.net.URLClassLoader;
 
-import org.apache.uima.ducc.common.config.SystemPropertiesHelper;
+import org.apache.uima.ducc.common.utils.DuccLogger;
 import org.apache.uima.ducc.container.common.ContainerLogger;
+import org.apache.uima.ducc.container.common.ContainerPropertiesHelper;
 import org.apache.uima.ducc.container.common.IContainerLogger;
 import org.apache.uima.ducc.container.common.IEntityId;
 import org.apache.uima.ducc.container.common.MessageBuffer;
 import org.apache.uima.ducc.container.common.Standardize;
+import org.apache.uima.ducc.container.common.classloader.ClassLoaderUtil;
 import org.apache.uima.ducc.container.jd.JobDriverException;
 import org.apache.uima.ducc.container.net.impl.MetaCas;
 
@@ -70,18 +72,36 @@ public class ProxyJobDriverCollectionRea
 			};
 	
 	public ProxyJobDriverCollectionReader() throws JobDriverException {
-		SystemPropertiesHelper sph = SystemPropertiesHelper.getInstance();
-		String userClasspath = sph.getUserClasspath();
-		String[] classpath = sph.stringToArray(userClasspath);
+		ClassLoader classLoader = ClassLoaderUtil.getClassLoader();
+		initialize(classLoader);
+	}
+	
+	public ProxyJobDriverCollectionReader(boolean parentFlag) throws JobDriverException {
+		ClassLoader classLoader = ClassLoaderUtil.getClassLoader();
+		if(parentFlag) {
+			classLoader = ClassLoaderUtil.getClassLoaderParent();
+		}
+		initialize(classLoader);
+	}
+	
+	private void initialize(ClassLoader baseClassLoader) throws JobDriverException {
+		String location = "initialize";
+		ContainerPropertiesHelper cph = ContainerPropertiesHelper.getInstance();
+		String userClasspath = cph.getUserClasspath();
+		String resolvedUserCP = ClassLoaderUtil.resolveClasspathWildcards(userClasspath);
+		String[] classpath = cph.stringToArray(resolvedUserCP);
 		URL[] classLoaderUrls = new URL[classpath.length];
+		logger.info(location, IEntityId.null_id, "classpath");
 		int i = 0;
 		for(String jar : classpath) {
+			String text = "["+i+"]"+" "+jar;
+			logger.info(location, IEntityId.null_id, text);
 			classLoaderUrls[i] = this.getClass().getResource(jar);
 			i++;
 		}
-		URLClassLoader classLoader = new URLClassLoader(classLoaderUrls, ClassLoader.getSystemClassLoader().getParent());
-		String crXml = sph.getCollectionReaderXml();
-		String crCfg = sph.getCollectionReaderCfg();
+		URLClassLoader classLoader = new URLClassLoader(classLoaderUrls, baseClassLoader);
+		String crXml = cph.getCollectionReaderXml();
+		String crCfg = cph.getCollectionReaderCfg();
 		construct(classLoader, crXml, crCfg);
 	}
 	
@@ -138,13 +158,13 @@ public class ProxyJobDriverCollectionRea
 	}
 	
 	private void construct(URLClassLoader classLoader, String crXml, String cfCfg) throws JobDriverException {
-		prepare(classLoader, crXml, cfCfg);
+		setup(classLoader, crXml, cfCfg);
 		validate();
-		initialize();
+		prepare();
 	}
 	
-	private void prepare(URLClassLoader urlClassLoader, String crXml, String crCfg) throws JobDriverException {
-		String location = "prepare";
+	private void setup(URLClassLoader urlClassLoader, String crXml, String crCfg) throws JobDriverException {
+		String location = "setup";
 		if(urlClassLoader == null) {
 			JobDriverException e = new JobDriverException("missing URLClassLoader");
 			logger.error(location, IEntityId.null_id, e);
@@ -166,8 +186,8 @@ public class ProxyJobDriverCollectionRea
 		}
 	}
 	
-	private void initialize() throws JobDriverException {
-		String location = "initialize";
+	private void prepare() throws JobDriverException {
+		String location = "prepare";
 		try {
 			class_JdUserCollectionReader = urlClassLoader.loadClass("org.apache.uima.ducc.user.jd.JdUserCollectionReader");
 			Constructor<?> constructor_JdUserCollectionReader = class_JdUserCollectionReader.getConstructor(String.class,String.class);
@@ -212,13 +232,17 @@ public class ProxyJobDriverCollectionRea
 	private void loadClass(String className) throws JobDriverException {
 		String location = "loadClass";
 		try {
-			logger.info(location, IEntityId.null_id, "loading "+className);
+			MessageBuffer mb1 = new MessageBuffer();
+			mb1.append(Standardize.Label.loading.get()+className);
+			logger.debug(location, IEntityId.null_id, mb1.toString());
 			Class<?> loadedClass = urlClassLoader.loadClass(className);
-			MessageBuffer mb = new MessageBuffer();
-			mb.append(Standardize.Label.loaded.get()+loadedClass.getName());
-			logger.debug(location, IEntityId.null_id, mb.toString());
+			MessageBuffer mb2 = new MessageBuffer();
+			mb2.append(Standardize.Label.loaded.get()+loadedClass.getName());
+			logger.trace(location, IEntityId.null_id, mb2.toString());
 		} 
 		catch (Exception e) {
+			DuccLogger duccLogger = DuccLogger.getLogger(ProxyJobDriverCollectionReader.class, "JD");
+			duccLogger.error(location, null, e);
 			logger.error(location, IEntityId.null_id, e);
 			throw new JobDriverException(e);
 		}

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverErrorHandler.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverErrorHandler.java?rev=1639855&r1=1639854&r2=1639855&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverErrorHandler.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverErrorHandler.java Sat Nov 15 10:51:19 2014
@@ -27,6 +27,7 @@ import org.apache.uima.ducc.common.confi
 import org.apache.uima.ducc.container.common.ContainerLogger;
 import org.apache.uima.ducc.container.common.IContainerLogger;
 import org.apache.uima.ducc.container.common.IEntityId;
+import org.apache.uima.ducc.container.common.classloader.ClassLoaderUtil;
 import org.apache.uima.ducc.container.jd.JobDriverException;
 
 public class ProxyJobDriverErrorHandler {
@@ -67,7 +68,7 @@ public class ProxyJobDriverErrorHandler 
 				classLoaderUrls[i] = this.getClass().getResource(item);
 				i++;
 			}
-			classLoader = new URLClassLoader(classLoaderUrls, ClassLoader.getSystemClassLoader().getParent());
+			classLoader = new URLClassLoader(classLoaderUrls, ClassLoaderUtil.getClassLoader());
 			Class<?> classAnchor = classLoader.loadClass(className);
 			objectInstance = classAnchor.newInstance();
 			//

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java?rev=1639855&r1=1639854&r2=1639855&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java Sat Nov 15 10:51:19 2014
@@ -98,7 +98,7 @@ public class TestSuite extends ATest {
 			try {
 				String userPartialClasspath = sb.toString();
 				System.setProperty(SystemPropertiesHelper.Name.UserClasspath.name(), userPartialClasspath);
-				new ProxyJobDriverCollectionReader();
+				new ProxyJobDriverCollectionReader(true);
 				fail("Exception missing...?");
 			}
 			catch(JobDriverException e) {