Merge pull request #8 from apache/feature/5805-do-not-set-extension-classloader-if-not-required
[UIMA-5805] No longer set extension classloader in DefaultResourceManagerCreator
diff --git a/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java b/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java
index 0b64d32..8da8214 100644
--- a/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java
+++ b/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java
@@ -24,6 +24,7 @@
import org.apache.uima.UimaContext;
import org.apache.uima.UimaContextAdmin;
import org.apache.uima.UimaContextHolder;
+import org.apache.uima.impl.UimaVersion;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.ResourceManager;
import org.springframework.util.ClassUtils;
@@ -59,6 +60,7 @@
}
public static class DefaultResourceManagerCreator implements ResourceManagerCreator {
+ @Override
public ResourceManager newResourceManager() throws ResourceInitializationException {
try {
UimaContext activeContext = UimaContextHolder.getContext();
@@ -74,7 +76,20 @@
// 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);
+
+ // Since UIMA Core version 2.10.3 and 3.0.1 the thread context classloader is taken
+ // into account by the core framework. Thus, we no longer have to explicitly set a
+ // classloader these or more recent versions. (cf. UIMA-5802)
+ short maj = UimaVersion.getMajorVersion();
+ short min = UimaVersion.getMinorVersion();
+ short rev = UimaVersion.getBuildRevision();
+ boolean uimaCoreIgnoresContextClassloader =
+ (maj == 2 && (min < 10 || (min == 10 && rev < 3))) || // version < 2.10.3
+ (maj == 3 && ((min == 0 && rev < 1))); // version < 3.0.1
+ if (uimaCoreIgnoresContextClassloader) {
+ resMgr.setExtensionClassPath(ClassUtils.getDefaultClassLoader(), "", true);
+ }
+
return resMgr;
}
}