Author: schor Date: Wed Apr 9 20:05:32 2014 New Revision: 1586121 URL: http://svn.apache.org/r1586121 Log: [UIMA-3732] avoid modifying passed-in additional params map
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java?rev=1586121&r1=1586120&r2=1586121&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java (original) +++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java Wed Apr 9 20:05:32 2014 @@ -322,6 +322,8 @@ public abstract class UIMAFramework { if (aResourceManager != null) { if (aAdditionalParams == null) { aAdditionalParams = new HashMap<String, Object>(); + } else { // copy to avoid modifying the original which might be immutable + aAdditionalParams = new HashMap<String, Object>(aAdditionalParams); } aAdditionalParams.put(Resource.PARAM_RESOURCE_MANAGER, aResourceManager); } @@ -976,6 +978,9 @@ public abstract class UIMAFramework { if (aResourceManager != null) { if (aAdditionalParams == null) { aAdditionalParams = new HashMap<String, Object>(); + } else { + // copy to avoid modifying original, which might be immutable, etc. + aAdditionalParams = new HashMap<String, Object>(aAdditionalParams); } aAdditionalParams.put(Resource.PARAM_RESOURCE_MANAGER, aResourceManager); } Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java?rev=1586121&r1=1586120&r2=1586121&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java (original) +++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java Wed Apr 9 20:05:32 2014 @@ -146,7 +146,8 @@ public class ASB_impl extends Resource_I return false; } - super.initialize(aSpecifier, aAdditionalParams); + // copy the additional parameters, since this method will modify them + super.initialize(aSpecifier, aAdditionalParams = new HashMap<String, Object>(aAdditionalParams)); // save parameters for later mInitParams = aAdditionalParams; Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java?rev=1586121&r1=1586120&r2=1586121&view=diff ============================================================================== --- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java (original) +++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java Wed Apr 9 20:05:32 2014 @@ -179,9 +179,15 @@ public abstract class Resource_ImplBase } if (aAdditionalParams == null) { aAdditionalParams = new HashMap<String, Object>(); - } - if (!aAdditionalParams.containsKey(PARAM_RESOURCE_MANAGER)) { aAdditionalParams.put(PARAM_RESOURCE_MANAGER, mUimaContextAdmin.getResourceManager()); + } else { + if (!aAdditionalParams.containsKey(PARAM_RESOURCE_MANAGER)) { + // copy in case original is shared on multi-threads, or + // is unmodifiable + // and to avoid updating passed - in map + aAdditionalParams = new HashMap<String, Object>(aAdditionalParams); + aAdditionalParams.put(PARAM_RESOURCE_MANAGER, mUimaContextAdmin.getResourceManager()); + } } // initializeExternalResources is synchronized mUimaContextAdmin.getResourceManager().initializeExternalResources(resMgrCfg,