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 16:28:35 UTC

svn commit: r1570224 - /uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.java

Author: schor
Date: Thu Feb 20 15:28:35 2014
New Revision: 1570224

URL: http://svn.apache.org/r1570224
Log:
[UIMA-3642] Enable parallel loading with UIMAClassLoader, for Java 7 and later

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/internal/util/UIMAClassLoader.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=1570224&r1=1570223&r2=1570224&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 15:28:35 2014
@@ -36,6 +36,13 @@ 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;
+  static {
+    if (SUPPORTS_PARALLEL_LOADING) {
+      ClassLoader.registerAsParallelCapable();
+    }
+  }
   /**
    * Transforms the string classpath to a URL array based classpath.
    * 
@@ -138,8 +145,18 @@ public class UIMAClassLoader extends URL
   /*
    * Try to load the class itself before delegate the class loading to its parent
    */
-  protected synchronized Class<?> loadClass(String name, boolean resolve)
+  protected Class<?> loadClass(String name, boolean resolve)
           throws ClassNotFoundException {
+    if (SUPPORTS_PARALLEL_LOADING) {
+      return loadClassImpl(name, resolve);
+    } else {
+      synchronized (this) {
+        return loadClassImpl(name, resolve);
+      }
+    }
+  }
+
+  private Class<?> loadClassImpl(String name, boolean resolve) throws ClassNotFoundException {
     // First, check if the class has already been loaded
     Class<?> c = findLoadedClass(name);
     if (c == null) {
@@ -154,7 +171,6 @@ public class UIMAClassLoader extends URL
     if (resolve) {
       resolveClass(c);
     }
-    return c;
+    return c;    
   }
-
 }