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 2019/01/30 20:45:31 UTC
svn commit: r1852548 - in
/uima/uv3/uimaj-v3/trunk/uimaj-core/src/main/java/org/apache/uima:
analysis_engine/impl/PearAnalysisEngineWrapper.java
resource/impl/ResourceManager_impl.java
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
}