You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2012/06/21 18:23:00 UTC

svn commit: r1352597 - in /uima/uima-as/trunk: uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/ uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/

Author: cwiklik
Date: Thu Jun 21 16:22:59 2012
New Revision: 1352597

URL: http://svn.apache.org/viewvc?rev=1352597&view=rev
Log:
UIMA-2423 Refactored uima-as client process() method to wait until all CASes are accounted for (via exception or successful reply). Added new testcase

Modified:
    uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java
    uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java
    uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java
    uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java

Modified: uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java?rev=1352597&r1=1352596&r2=1352597&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java (original)
+++ uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/TestUimaASExtended.java Thu Jun 21 16:22:59 2012
@@ -60,6 +60,7 @@ import org.apache.uima.aae.monitor.stati
 import org.apache.uima.adapter.jms.JmsConstants;
 import org.apache.uima.adapter.jms.activemq.JmsOutputChannel;
 import org.apache.uima.adapter.jms.activemq.SpringContainerDeployer;
+import org.apache.uima.adapter.jms.client.BaseUIMAAsynchronousEngineCommon_impl;
 import org.apache.uima.adapter.jms.client.BaseUIMAAsynchronousEngine_impl;
 import org.apache.uima.adapter.jms.message.JmsMessageContext;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
@@ -78,6 +79,7 @@ import org.apache.uima.resource.Resource
 import org.apache.uima.resource.metadata.ProcessingResourceMetaData;
 import org.apache.uima.resourceSpecifier.factory.DeploymentDescriptorFactory;
 import org.apache.uima.resourceSpecifier.factory.UimaASDeploymentDescriptor;
+import org.apache.uima.util.Level;
 import org.apache.uima.util.XMLInputSource;
 import org.josql.expressions.IsNullExpression;
 import org.xml.sax.SAXException;
@@ -1050,17 +1052,68 @@ public class TestUimaASExtended extends 
       }
       uimaAsEngine.stop();
   }
-  
+  public void testClientCRProcess() throws Exception {
+	    System.out.println("-------------- testClientCRProcess -------------");
+	    super.resetCASesProcessed();
+	    
+	    // Instantiate Uima AS Client
+	    final BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+//	    UIMAFramework.getLogger(BaseUIMAAsynchronousEngineCommon_impl.class).setLevel(Level.FINEST);
+//	    UIMAFramework.getLogger(BaseUIMAAsynchronousEngine_impl.class).setLevel(Level.FINEST);
+//	    UIMAFramework.getLogger().setLevel(Level.FINEST);
+//	    UIMAFramework.getLogger().setOutputStream(System.out);
+
+	    // Deploy Uima AS Primitive Service
+	    deployService(uimaAsEngine, relativePath + "/Deploy_NoOpAnnotatorWithLongDelay.xml");
+	    Map<String, Object> appCtx = buildContext(String.valueOf(broker.getMasterConnectorURI()),
+	            "NoOpAnnotatorQueueLongDelay");
+	    appCtx.put(UimaAsynchronousEngine.Timeout, 0);
+	    appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+	    appCtx.put(UimaAsynchronousEngine.CasPoolSize,10);
+	    
+	    String collectionReaderDescriptor =
+	    		resourceDirPath + System.getProperty("file.separator") +
+	    		"descriptors"+ System.getProperty("file.separator") +
+	    		"collection_reader"+ System.getProperty("file.separator") +
+	    		"FileSystemCollectionReader.xml";
+	   		  
+         // add Collection Reader if specified
+         try {
+             CollectionReaderDescription collectionReaderDescription = 
+                     UIMAFramework.getXMLParser()
+                             .parseCollectionReaderDescription(new XMLInputSource(collectionReaderDescriptor));
+             collectionReaderDescription.getCollectionReaderMetaData().
+             	getConfigurationParameterSettings().
+             		setParameterValue("InputDirectory", relativeDataPath);
+             CollectionReader collectionReader = UIMAFramework
+                     .produceCollectionReader(collectionReaderDescription);
+             uimaAsEngine.setCollectionReader(collectionReader);	    
+         } catch( Throwable e) {
+        	 e.printStackTrace();
+         }
+	    
+	    initialize(uimaAsEngine, appCtx);
+	    waitUntilInitialized();
+	    
+	    uimaAsEngine.process();
+
+	    Assert.assertEquals(8, getNumberOfCASesProcessed());
+	    System.clearProperty("DefaultBrokerURL");
+	    uimaAsEngine.stop();
+	  }
+
   public void testClientProcess() throws Exception {
     System.out.println("-------------- testClientProcess -------------");
+    
     // Instantiate Uima AS Client
-    BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
+    final BaseUIMAAsynchronousEngine_impl uimaAsEngine = new BaseUIMAAsynchronousEngine_impl();
     // Deploy Uima AS Primitive Service
     deployService(uimaAsEngine, relativePath + "/Deploy_PersonTitleAnnotator.xml");
     Map<String, Object> appCtx = buildContext(String.valueOf(broker.getMasterConnectorURI()),
-            "PersonTitleAnnotatorQueue");
-    appCtx.put(UimaAsynchronousEngine.Timeout, 1100);
+			"PersonTitleAnnotatorQueue");
+    appCtx.put(UimaAsynchronousEngine.Timeout, 0);
     appCtx.put(UimaAsynchronousEngine.CpcTimeout, 1100);
+    appCtx.put(UimaAsynchronousEngine.CasPoolSize,2);
     initialize(uimaAsEngine, appCtx);
     waitUntilInitialized();
 

Modified: uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java?rev=1352597&r1=1352596&r2=1352597&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java (original)
+++ uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/ActiveMQSupport.java Thu Jun 21 16:22:59 2012
@@ -68,6 +68,9 @@ public class ActiveMQSupport extends Tes
           + "test" + System.getProperty("file.separator") + "resources"
           + System.getProperty("file.separator") + "deployment";
 
+  protected static final String resourceDirPath = "src" + System.getProperty("file.separator")
+          + "test" + System.getProperty("file.separator") + "resources";
+ 
   protected static final String relativeDataPath = "src" + System.getProperty("file.separator")
           + "test" + System.getProperty("file.separator") + "resources"
           + System.getProperty("file.separator") + "data";

Modified: uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java?rev=1352597&r1=1352596&r2=1352597&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java (original)
+++ uima/uima-as/trunk/uimaj-as-activemq/src/test/java/org/apache/uima/ee/test/utils/BaseTestSupport.java Thu Jun 21 16:22:59 2012
@@ -639,7 +639,9 @@ public abstract class BaseTestSupport ex
   public long getNumberOfCASesProcessed() {
     return responseCounter;
   }
-
+  public void resetCASesProcessed() {
+	  responseCounter = 0;
+  }
   protected class UimaAsTestCallbackListener extends UimaAsBaseCallbackListener {
 
     private String casSent = null;

Modified: uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java
URL: http://svn.apache.org/viewvc/uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java?rev=1352597&r1=1352596&r2=1352597&view=diff
==============================================================================
--- uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java (original)
+++ uima/uima-as/trunk/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java Thu Jun 21 16:22:59 2012
@@ -780,13 +780,26 @@ public abstract class BaseUIMAAsynchrono
          }
       } catch (Exception e) {
         e.printStackTrace();
-        try {
-        } catch( Exception ex){} 
-        //  throw new ResourceProcessException(e);
+		throw new ResourceProcessException(e);
       }
     }
-    if (hasNext == false) {
-        collectionProcessingComplete();
+    //	If the CR is done, enter a polling loop waiting for outstanding CASes to return
+    //  from a service
+    if (hasNext == false ) {
+    	Object mObject = new Object();
+    	//	if client is running and there are outstanding CASe go sleep for awhile and
+    	//  try again, until all CASes come back from a service
+    	while ( running && serviceDelegate.getCasPendingReplyListSize() > 0 ) {
+    		synchronized(mObject) {
+    			try {
+        			mObject.wait(100);
+    			} catch( Exception e) {
+    		        e.printStackTrace();
+    				throw new ResourceProcessException(e);
+    			}
+    		}
+    	}
+    	collectionProcessingComplete();
     }
   }