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;
}