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 2016/11/23 14:50:13 UTC

svn commit: r1770980 - /uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/MultiprocessingAnalysisEngine_impl.java

Author: schor
Date: Wed Nov 23 14:50:13 2016
New Revision: 1770980

URL: http://svn.apache.org/viewvc?rev=1770980&view=rev
Log:
[UIMA-5191] fix MultiprocessingAnalysisEngine_impl for the processAndOutputNewCASes API so it waits to return a checked-out analysis engine until the hasNext method returns false. This allows proper operation of CAS Multipliers.

Modified:
    uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/MultiprocessingAnalysisEngine_impl.java

Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/MultiprocessingAnalysisEngine_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/MultiprocessingAnalysisEngine_impl.java?rev=1770980&r1=1770979&r2=1770980&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/MultiprocessingAnalysisEngine_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/analysis_engine/impl/MultiprocessingAnalysisEngine_impl.java Wed Nov 23 14:50:13 2016
@@ -175,17 +175,29 @@ public class MultiprocessingAnalysisEngi
   }
   
   public CasIterator processAndOutputNewCASes(CAS aCAS) throws AnalysisEngineProcessException {
-    enterProcess(); // start timer for collecting performance stats
-    AnalysisEngine ae = null;
-    try {
-      ae = getAeFromPool();
-      return ae.processAndOutputNewCASes(aCAS);
-    } finally {
-      if (ae != null) {
-        mPool.releaseAnalysisEngine(ae);
-      }
-      exitProcess(); // stop timer for collecting performance stats
-    }
+    // https://issues.apache.org/jira/browse/UIMA-5191
+    final long startTime = System.currentTimeMillis();    
+    final AnalysisEngine ae = getAeFromPool();
+    final CasIterator it_inner = ae.processAndOutputNewCASes(aCAS);
+    final AnalysisEnginePool localMPool = mPool;
+    CasIterator it_outer = new CasIterator() {
+
+      @Override
+      public boolean hasNext() throws AnalysisEngineProcessException {
+        boolean r = it_inner.hasNext();
+        if (!r) {
+          localMPool.releaseAnalysisEngine(ae);
+          getMBean().reportAnalysisTime(System.currentTimeMillis() - startTime);
+        }
+        return r;      }
+
+      @Override
+      public CAS next() throws AnalysisEngineProcessException { return it_inner.next(); }
+      @Override
+      public void release() { it_inner.release(); }
+    };
+    
+    return it_outer;
   }
 
   /* (non-Javadoc)
@@ -263,17 +275,29 @@ public class MultiprocessingAnalysisEngi
    */
   @Override
   public JCasIterator processAndOutputNewCASes(JCas aJCas) throws AnalysisEngineProcessException {
-    enterProcess(); // start timer for collecting performance stats
-    AnalysisEngine ae = null;
-    try {
-      ae = getAeFromPool();
-      return ae.processAndOutputNewCASes(aJCas);
-    } finally {
-      if (ae != null) {
-        mPool.releaseAnalysisEngine(ae);
-      }
-      exitProcess(); // stop timer for collecting performance stats
-    }
+    // https://issues.apache.org/jira/browse/UIMA-5191
+    final long startTime = System.currentTimeMillis();    
+    final AnalysisEngine ae = getAeFromPool();
+    final JCasIterator it_inner = ae.processAndOutputNewCASes(aJCas);
+    final AnalysisEnginePool localMPool = mPool;
+    JCasIterator it_outer = new JCasIterator() {
+      
+      @Override
+      public boolean hasNext() throws AnalysisEngineProcessException {
+        boolean r = it_inner.hasNext();
+        if (!r) {
+          localMPool.releaseAnalysisEngine(ae);
+          getMBean().reportAnalysisTime(System.currentTimeMillis() - startTime);
+        }
+        return r;
+      }
+
+      @Override
+      public JCas next() throws AnalysisEngineProcessException { return it_inner.next(); }
+      @Override
+      public void release() { it_inner.release(); }
+    };
+    return it_outer;
   }