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 }