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 2014/04/04 15:52:14 UTC

svn commit: r1584692 - /uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.java

Author: schor
Date: Fri Apr  4 13:52:14 2014
New Revision: 1584692

URL: http://svn.apache.org/r1584692
Log:
[UIMA-3694] make uima context fields final

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/UIMAFramework.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=1584692&r1=1584691&r2=1584692&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 Fri Apr  4 13:52:14 2014
@@ -1070,7 +1070,12 @@ public abstract class UIMAFramework {
   public static ConfigurationManager newConfigurationManager() {
     return getInstance()._newConfigurationManager();
   }
-
+  
+  // ugly way to pass vars to 0-arg constructors
+  //    for root uima context
+  public static final ThreadLocal<ResourceManager> newContextResourceManager = new ThreadLocal<ResourceManager>();
+  public static final ThreadLocal<ConfigurationManager> newContextConfigManager = new ThreadLocal<ConfigurationManager>();
+  
   /**
    * Gets a new instance of a {@link UimaContext}. Applications do not generally need to call this
    * method.
@@ -1088,7 +1093,17 @@ public abstract class UIMAFramework {
    */
   public static UimaContextAdmin newUimaContext(Logger aLogger, ResourceManager aResourceManager,
           ConfigurationManager aConfigManager) {
-    UimaContextAdmin context = getInstance()._newUimaContext();
+    // We use an ugly trick to make the 3 values available to the new UIMA context during its initialization - 
+    //   we put them in threadlocals for this class (UIMAFramework).
+    UimaContextAdmin context; 
+    try {
+      newContextResourceManager.set(aResourceManager);
+      newContextConfigManager.set(aConfigManager);     
+      context = getInstance()._newUimaContext();
+    } finally {
+      newContextResourceManager.set(null);
+      newContextConfigManager.set(null);
+    }
     context.initializeRoot(aLogger, aResourceManager, aConfigManager);
     return context;
   }