You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2014/02/20 19:47:47 UTC
svn commit: r1570299 - in /uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/internal/util/UIMAClassLoader.java
test/java/org/apache/uima/internal/util/UIMAClassLoaderTest.java
Author: schor
Date: Thu Feb 20 18:47:46 2014
New Revision: 1570299
URL: http://svn.apache.org/r1570299
Log:
[UIMA-3642] Enable parallel loading with UIMAClassLoader, for Java 7 and later. Use reflection to avoid compile errors with older Javas
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/UIMAClassLoaderTest.java
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java?rev=1570299&r1=1570298&r2=1570299&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java Thu Feb 20 18:47:46 2014
@@ -20,6 +20,8 @@
package org.apache.uima.internal.util;
import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
@@ -37,10 +39,20 @@ import java.util.StringTokenizer;
*/
public class UIMAClassLoader extends URLClassLoader {
- private final static boolean SUPPORTS_PARALLEL_LOADING = Float.parseFloat(System.getProperty("java.version").substring(0,3)) >= 1.7;
+ //public so other users can use this
+ public final static boolean SUPPORTS_PARALLEL_LOADING = Float.parseFloat(System.getProperty("java.version").substring(0,3)) >= 1.7;
static {
if (SUPPORTS_PARALLEL_LOADING) {
- ClassLoader.registerAsParallelCapable();
+ try {
+ Method m = ClassLoader.class.getDeclaredMethod("registerAsParallelCapable");
+ m.setAccessible(true);
+ m.invoke(null);
+ } catch (NoSuchMethodException e) {
+ } catch (SecurityException e) {
+ } catch (IllegalAccessException e) {
+ } catch (IllegalArgumentException e) {
+ } catch (InvocationTargetException e) {
+ }
}
}
/**
@@ -173,4 +185,5 @@ public class UIMAClassLoader extends URL
}
return c;
}
+
}
Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/UIMAClassLoaderTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/UIMAClassLoaderTest.java?rev=1570299&r1=1570298&r2=1570299&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/UIMAClassLoaderTest.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/UIMAClassLoaderTest.java Thu Feb 20 18:47:46 2014
@@ -20,6 +20,7 @@
package org.apache.uima.internal.util;
import java.io.File;
+import java.lang.reflect.Method;
import java.net.URL;
import junit.framework.Assert;
@@ -60,8 +61,21 @@ public class UIMAClassLoaderTest extends
Assert.assertNull(rsrcMgr.getExtensionClassLoader());
rsrcMgr.setExtensionClassPath("../this/is/a/simple/test.jar", false);
-
- Assert.assertNotNull(rsrcMgr.getExtensionClassLoader());
+ ClassLoader cl = rsrcMgr.getExtensionClassLoader();
+ Assert.assertNotNull(cl);
+ if (UIMAClassLoader.SUPPORTS_PARALLEL_LOADING) {
+ //assertTrue(cl != cl.getClassLoadingLock("Aclass"));
+ Class classOfLoader = cl.getClass().getSuperclass();
+ while (classOfLoader.getName() != "java.lang.ClassLoader") {
+ classOfLoader = classOfLoader.getSuperclass();
+ }
+ Method m = classOfLoader.getDeclaredMethod("getClassLoadingLock", String.class);
+ m.setAccessible(true);
+ Object o = m.invoke(cl, "someString");
+ Object o2 = m.invoke(cl, "s2");
+ assertTrue(o != o2);
+ assertTrue(cl != o);
+ }
}
public void testAdvancedRsrcMgrCLassLoaderCreation() throws Exception {