Author: schor
Date: Wed Jan 30 20:45:31 2019
New Revision: 1852548

URL: http://svn.apache.org/viewvc?rev=1852548&view=rev
Log:
[UIMA-5935] fix to destroy pear resource managers when parent is destroyed

Modified:
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/PearAnalysisEngineWrapper.java
    
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceManager_impl.java

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/PearAnalysisEngineWrapper.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/PearAnalysisEngineWrapper.java?rev=1852548&r1=1852547&r2=1852548&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/PearAnalysisEngineWrapper.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/PearAnalysisEngineWrapper.java
 Wed Jan 30 20:45:31 2019
@@ -86,11 +86,11 @@ public class PearAnalysisEngineWrapper e
    // incoming Resource Manager, and a second map.
    // The second map (allows for multiple Pears in a pipeline)
    // maps (for the given incoming Resource Manager), using a key
-   // consisting of the "class path" and "data path", the 
+   // consisting of the PEARs "class path" and "data path", the 
    // Resource Manager for that combination.
 
-   // note: all accesses to this are synchronized
-   static private Map<ResourceManager, Map<StringPair, ResourceManager>> 
cachedResourceManagers =
+   // note: all accesses to this are synchronized on this object itself
+   static final private Map<ResourceManager, Map<StringPair, ResourceManager>> 
cachedResourceManagers =
        new WeakHashMap<>(4);
 
    private AnalysisEngine ae = null;
@@ -614,7 +614,7 @@ public class PearAnalysisEngineWrapper e
     * inner class StringPair
     * 
     */
-   static private class StringPair {
+   static public class StringPair {
 
       private String classPath;
 
@@ -658,4 +658,8 @@ public class PearAnalysisEngineWrapper e
          return true;
       }
    }
+
+  public static Map<ResourceManager, Map<StringPair, ResourceManager>> 
getCachedResourceManagers() {
+    return cachedResourceManagers;
+  }
 }

Modified: 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceManager_impl.java
URL: 
http://svn.apache.org/viewvc/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceManager_impl.java?rev=1852548&r1=1852547&r2=1852548&view=diff
==============================================================================
--- 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceManager_impl.java
 (original)
+++ 
uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/ResourceManager_impl.java
 Wed Jan 30 20:45:31 2019
@@ -35,6 +35,8 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.UIMA_IllegalStateException;
 import org.apache.uima.analysis_engine.impl.AnalysisEngineImplBase;
+import org.apache.uima.analysis_engine.impl.PearAnalysisEngineWrapper;
+import 
org.apache.uima.analysis_engine.impl.PearAnalysisEngineWrapper.StringPair;
 import org.apache.uima.internal.util.Class_TCCL;
 import org.apache.uima.internal.util.UIMAClassLoader;
 import org.apache.uima.resource.CasManager;
@@ -899,6 +901,18 @@ public class ResourceManager_impl implem
       }      
     }
     
+    // https://issues.apache.org/jira/browse/UIMA-5935
+    Map<ResourceManager, Map<PearAnalysisEngineWrapper.StringPair, 
ResourceManager>> cachedResourceManagers =
+        PearAnalysisEngineWrapper.getCachedResourceManagers();
+    synchronized(cachedResourceManagers) {
+      Map<StringPair, ResourceManager> c1 = cachedResourceManagers.get(this);
+      if (c1 != null) {
+        for (ResourceManager rm : c1.values()) {
+          rm.destroy();
+        }
+      }
+    }
+    
     // no destroy of caspool at this time
     
   }


Reply via email to