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 2014/04/28 22:19:29 UTC

svn commit: r1590775 - in /uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit: factory/AnalysisEngineFactory.java factory/CollectionReaderFactory.java internal/ResourceManagerFactory.java

Author: rec
Date: Mon Apr 28 20:19:29 2014
New Revision: 1590775

URL: http://svn.apache.org/r1590775
Log:
[UIMA-3692] Classloading inconsistencies
- Added an experimental API to control resource managers used by uimaFIT

Added:
    uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java   (with props)
Modified:
    uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java
    uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java

Modified: uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java
URL: http://svn.apache.org/viewvc/uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java?rev=1590775&r1=1590774&r2=1590775&view=diff
==============================================================================
--- uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java (original)
+++ uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java Mon Apr 28 20:19:29 2014
@@ -56,6 +56,7 @@ import org.apache.uima.fit.descriptor.So
 import org.apache.uima.fit.descriptor.TypeCapability;
 import org.apache.uima.fit.factory.ConfigurationParameterFactory.ConfigurationData;
 import org.apache.uima.fit.internal.ReflectionUtil;
+import org.apache.uima.fit.internal.ResourceManagerFactory;
 import org.apache.uima.flow.FlowControllerDescription;
 import org.apache.uima.resource.ExternalResourceDescription;
 import org.apache.uima.resource.ResourceInitializationException;
@@ -105,7 +106,7 @@ public final class AnalysisEngineFactory
   public static AnalysisEngine createEngine(String descriptorName, Object... configurationData)
           throws InvalidXMLException, IOException, ResourceInitializationException {
     AnalysisEngineDescription aed = createEngineDescription(descriptorName, configurationData);
-    return UIMAFramework.produceAnalysisEngine(aed);
+    return UIMAFramework.produceAnalysisEngine(aed, ResourceManagerFactory.newResourceManager(), null);
   }
 
   /**
@@ -201,11 +202,13 @@ public final class AnalysisEngineFactory
   public static AnalysisEngine createEngine(AnalysisEngineDescription desc,
           Object... configurationData) throws ResourceInitializationException {
     if (configurationData == null || configurationData.length == 0) {
-      return UIMAFramework.produceAnalysisEngine(desc, null, null);
+      return UIMAFramework.produceAnalysisEngine(desc, ResourceManagerFactory.newResourceManager(),
+              null);
     } else {
       AnalysisEngineDescription descClone = (AnalysisEngineDescription) desc.clone();
       ResourceCreationSpecifierFactory.setConfigurationParameters(descClone, configurationData);
-      return UIMAFramework.produceAnalysisEngine(descClone);
+      return UIMAFramework.produceAnalysisEngine(descClone,
+              ResourceManagerFactory.newResourceManager(), null);
     }
   }
 
@@ -767,7 +770,8 @@ public final class AnalysisEngineFactory
           ResourceInitializationException {
     AnalysisEngineDescription desc = createEngineDescriptionFromPath(descriptorPath,
             configurationData);
-    return UIMAFramework.produceAnalysisEngine(desc);
+    return UIMAFramework.produceAnalysisEngine(desc, ResourceManagerFactory.newResourceManager(),
+            null);
   }
 
   /**

Modified: uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java
URL: http://svn.apache.org/viewvc/uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java?rev=1590775&r1=1590774&r2=1590775&view=diff
==============================================================================
--- uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java (original)
+++ uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java Mon Apr 28 20:19:29 2014
@@ -39,6 +39,7 @@ import org.apache.uima.UIMAFramework;
 import org.apache.uima.collection.CollectionReader;
 import org.apache.uima.collection.CollectionReaderDescription;
 import org.apache.uima.fit.factory.ConfigurationParameterFactory.ConfigurationData;
+import org.apache.uima.fit.internal.ResourceManagerFactory;
 import org.apache.uima.resource.ExternalResourceDescription;
 import org.apache.uima.resource.ResourceCreationSpecifier;
 import org.apache.uima.resource.ResourceInitializationException;
@@ -77,7 +78,8 @@ public final class CollectionReaderFacto
           Object... configurationData) throws UIMAException, IOException {
     CollectionReaderDescription desc = createReaderDescriptionFromPath(descriptorPath,
             configurationData);
-    return UIMAFramework.produceCollectionReader(desc);
+    return UIMAFramework.produceCollectionReader(desc, ResourceManagerFactory.newResourceManager(),
+            null);
   }
 
   /**
@@ -164,7 +166,8 @@ public final class CollectionReaderFacto
     imp.setName(descriptorName);
     URL url = imp.findAbsoluteUrl(UIMAFramework.newDefaultResourceManager());
     ResourceSpecifier specifier = createResourceCreationSpecifier(url, configurationData);
-    return UIMAFramework.produceCollectionReader(specifier);
+    return UIMAFramework.produceCollectionReader(specifier,
+            ResourceManagerFactory.newResourceManager(), null);
   }
 
   /**
@@ -405,7 +408,8 @@ public final class CollectionReaderFacto
           Object... configurationData) throws ResourceInitializationException {
     CollectionReaderDescription descClone = (CollectionReaderDescription) desc.clone();
     ResourceCreationSpecifierFactory.setConfigurationParameters(descClone, configurationData);
-    return UIMAFramework.produceCollectionReader(descClone);
+    return UIMAFramework.produceCollectionReader(descClone,
+            ResourceManagerFactory.newResourceManager(), null);
   }
 
   /**

Added: uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java
URL: http://svn.apache.org/viewvc/uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java?rev=1590775&view=auto
==============================================================================
--- uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java (added)
+++ uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java Mon Apr 28 20:19:29 2014
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.fit.internal;
+
+import java.net.MalformedURLException;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.resource.ResourceManager;
+import org.springframework.util.ClassUtils;
+
+/**
+ * INTERNAL API - Helper functions for dealing with resource managers and classloading
+ * 
+ * This API is experimental and is very likely to be removed or changed in future versions. 
+ */
+public class ResourceManagerFactory {
+  private static ResourceManagerCreator resourceManagerCreator = new DefaultResourceManagerCreator();
+  
+  private ResourceManagerFactory() {
+    // No instances
+  }
+
+  public static ResourceManager newResourceManager() throws ResourceInitializationException
+  {
+    return resourceManagerCreator.newResourceManager();
+  }
+  
+  public static synchronized void setResourceManagerCreator(
+          ResourceManagerCreator resourceManagerCreator) {
+    ResourceManagerFactory.resourceManagerCreator = resourceManagerCreator;
+  }
+  
+  public static ResourceManagerCreator getResourceManagerCreator() {
+    return resourceManagerCreator;
+  }
+  
+  public static interface ResourceManagerCreator {
+    ResourceManager newResourceManager() throws ResourceInitializationException;
+  }
+  
+  public static class DefaultResourceManagerCreator implements ResourceManagerCreator {
+    public ResourceManager newResourceManager() throws ResourceInitializationException {
+      try {
+        ResourceManager resMgr = UIMAFramework.newDefaultResourceManager();
+        resMgr.setExtensionClassPath(ClassUtils.getDefaultClassLoader(), "", true);
+        return resMgr;
+      }
+      catch (MalformedURLException e) {
+        throw new ResourceInitializationException(e);
+      }
+    }
+  }
+}

Propchange: uima/uimafit/branches/2.0.x/uimafit-core/src/main/java/org/apache/uima/fit/internal/ResourceManagerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native