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 2008/12/17 14:59:11 UTC

svn commit: r727382 - in /incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine: asb/impl/ASB_impl.java asb/impl/FlowControllerContainer.java impl/AggregateAnalysisEngine_impl.java

Author: schor
Date: Wed Dec 17 05:59:11 2008
New Revision: 727382

URL: http://svn.apache.org/viewvc?rev=727382&view=rev
Log:
[UIMA-1251] call destroy method if initialization fails for an aggregate component, on the previously (successfully) initialized parts.

Modified:
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/FlowControllerContainer.java
    incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AggregateAnalysisEngine_impl.java

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java?rev=727382&r1=727381&r2=727382&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/ASB_impl.java Wed Dec 17 05:59:11 2008
@@ -164,14 +164,18 @@
    * @see org.apache.uima.resource.Resource#destroy()
    */
   public void destroy() {
-    // destroy component AnalysisEngines
+    // destroy component AnalysisEngines that have been successfully initialized
+    //   unsuccessful initializations are not put into the Map
     Iterator i = mComponentAnalysisEngineMap.entrySet().iterator();
     while (i.hasNext()) {
       Map.Entry entry = (Map.Entry) i.next();
       Resource delegate = (Resource) entry.getValue();
       delegate.destroy();
     }
-    if (mFlowControllerContainer != null) {
+    
+    if (mFlowControllerContainer != null &&
+        // the container might be non-null, but the initialization could have failed
+        mFlowControllerContainer.isInitialized()) {
       mFlowControllerContainer.destroy();
     }
   }

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/FlowControllerContainer.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/FlowControllerContainer.java?rev=727382&r1=727381&r2=727382&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/FlowControllerContainer.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/asb/impl/FlowControllerContainer.java Wed Dec 17 05:59:11 2008
@@ -57,6 +57,8 @@
   private boolean mSofaAware;
 
   private Object mMBeanServer;
+  
+  private boolean initialized = false;
 
   /*
    * (non-Javadoc)
@@ -126,6 +128,7 @@
       // (Java 1.5 only)
       JmxMBeanAgent.registerMBean(getMBean(), mMBeanServer);
 
+      initialized = true;
       return true;
     } catch (ResourceConfigurationException e) {
       throw new ResourceInitializationException(e);
@@ -296,4 +299,8 @@
     }
     return (FlowController) userObject;
   }
+
+  boolean isInitialized() {
+    return initialized;
+  }
 }

Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AggregateAnalysisEngine_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AggregateAnalysisEngine_impl.java?rev=727382&r1=727381&r2=727382&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AggregateAnalysisEngine_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/AggregateAnalysisEngine_impl.java Wed Dec 17 05:59:11 2008
@@ -250,7 +250,7 @@
   public void destroy() {
     if (mASB != null)
       mASB.destroy();
-    getLogger().logrb(Level.CONFIG, CLASS_NAME.getName(), "initialize", LOG_RESOURCE_BUNDLE,
+    getLogger().logrb(Level.CONFIG, CLASS_NAME.getName(), "destroy", LOG_RESOURCE_BUNDLE,
             "UIMA_analysis_engine_destroyed__CONFIG", getMetaData().getName());
     super.destroy();
   }
@@ -364,7 +364,14 @@
     // the component AnalysisEngines and the FlowController. This method also retrieves
     // the component AnalysisEngines' metadata from the ASB, so it can be access via the
     // _getComponentCasProcessorMetaData() method.
-    initASB(aDescription, aAdditionalParams);
+    // If any delegates fail to initialize, must let the successful ones release their resources.
+    // Necessary for JMS sevice adapters that create listener threads.  Jira 1251.
+    try {
+      initASB(aDescription, aAdditionalParams);
+    } catch (ResourceInitializationException e) {
+      destroy();
+      throw e;
+    }
 
     // Do any processing we need to do now that we have this metadata.
     processDelegateAnalysisEngineMetaData();