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 2016/12/22 03:12:59 UTC

svn commit: r1775569 - in /uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container: common/classloader/ContextSwitch.java jd/classload/ProxyJobDriverCollectionReader.java

Author: burn
Date: Thu Dec 22 03:12:59 2016
New Revision: 1775569

URL: http://svn.apache.org/viewvc?rev=1775569&view=rev
Log:
UIMA-5227 Set its context class-loader during construction of an object

Modified:
    uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ContextSwitch.java
    uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java

Modified: uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ContextSwitch.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ContextSwitch.java?rev=1775569&r1=1775568&r2=1775569&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ContextSwitch.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/classloader/ContextSwitch.java Thu Dec 22 03:12:59 2016
@@ -18,11 +18,23 @@
 */
 package org.apache.uima.ducc.container.common.classloader;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.net.URLClassLoader;
 
 public class ContextSwitch {
 
+    public static Object construct(URLClassLoader urlClassLoader, Constructor<?> constructor, Object[] args) throws Exception {
+        ClassLoader saveThreadCCL = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(urlClassLoader);
+            return constructor.newInstance(args);
+        }
+        finally {
+            Thread.currentThread().setContextClassLoader(saveThreadCCL);
+        }
+    }
+    
 	public static Object call(URLClassLoader urlClassLoader, Method method, Object instance, Object[] args) throws Exception {
 		ClassLoader saveThreadCCL = Thread.currentThread().getContextClassLoader();
 		try {

Modified: uima/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/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java?rev=1775569&r1=1775568&r2=1775569&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/ProxyJobDriverCollectionReader.java Thu Dec 22 03:12:59 2016
@@ -222,7 +222,8 @@ public class ProxyJobDriverCollectionRea
 	private void prepare() throws Exception {
 		class_JdUserCollectionReader = urlClassLoader.loadClass("org.apache.uima.ducc.user.jd.JdUserCollectionReader");
 		Constructor<?> constructor_JdUserCollectionReader = class_JdUserCollectionReader.getConstructor(String.class,String.class);
-		instance_JdUserCollectionReader = constructor_JdUserCollectionReader.newInstance(new Object[] { crXml, crCfg });
+		instance_JdUserCollectionReader = ContextSwitch.construct(urlClassLoader, constructor_JdUserCollectionReader, 
+		        new Object[] { crXml, crCfg });
 		method_getTotal = class_JdUserCollectionReader.getMethod(name_getTotal, nullClassArray);
 		class_JdUserMetaCas = urlClassLoader.loadClass("org.apache.uima.ducc.user.jd.JdUserMetaCas");
 		method_getJdUserMetaCas = class_JdUserCollectionReader.getMethod(name_getJdUserMetaCas, nullClassArray);