You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2016/08/31 16:39:42 UTC

svn commit: r1758651 - /uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java

Author: rec
Date: Wed Aug 31 16:39:42 2016
New Revision: 1758651

URL: http://svn.apache.org/viewvc?rev=1758651&view=rev
Log:
[UIMA-5076] Respect UimaContextHolder if set

Modified:
    uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java

Modified: uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java
URL: http://svn.apache.org/viewvc/uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java?rev=1758651&r1=1758650&r2=1758651&view=diff
==============================================================================
--- uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java (original)
+++ uima/uimafit/trunk/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java Wed Aug 31 16:39:42 2016
@@ -21,6 +21,9 @@ package org.apache.uima.fit.internal;
 import java.net.MalformedURLException;
 
 import org.apache.uima.UIMAFramework;
+import org.apache.uima.UimaContext;
+import org.apache.uima.UimaContextAdmin;
+import org.apache.uima.UimaContextHolder;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
 import org.springframework.util.ClassUtils;
@@ -58,9 +61,22 @@ public class ResourceManagerFactory {
   public static class DefaultResourceManagerCreator implements ResourceManagerCreator {
     public ResourceManager newResourceManager() throws ResourceInitializationException {
       try {
-        ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
-        resMgr.setExtensionClassPath(ClassUtils.getDefaultClassLoader(), "", true);
-        return resMgr;
+        UimaContext activeContext = UimaContextHolder.getContext();
+        if (activeContext != null) {
+          // If we are already in a UIMA context, then we re-use it. Mind that the JCas cannot
+          // handle switching across more than one classloader.
+          // This can be done since UIMA 2.9.0 and starts being handled in uimaFIT 2.3.0
+          // See https://issues.apache.org/jira/browse/UIMA-5056
+          return ((UimaContextAdmin) activeContext).getResourceManager();
+        }
+        else {
+          // If there is no UIMA context, then we create a new resource manager
+          // UIMA core still does not fall back to the context classloader in all cases.
+          // This was the default behavior until uimaFIT 2.2.0.
+          ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
+          resMgr.setExtensionClassPath(ClassUtils.getDefaultClassLoader(), "", true);
+          return resMgr;
+        }
       }
       catch (MalformedURLException e) {
         throw new ResourceInitializationException(e);