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) {