You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ea...@apache.org on 2008/10/27 18:48:16 UTC

svn commit: r708248 - /incubator/uima/sandbox/trunk/uima-as/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java

Author: eae
Date: Mon Oct 27 10:48:16 2008
New Revision: 708248

URL: http://svn.apache.org/viewvc?rev=708248&view=rev
Log:
UIMA-1216 applied uimaj-as-jms-UIMA-1216-patch.txt

Modified:
    incubator/uima/sandbox/trunk/uima-as/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java

Modified: incubator/uima/sandbox/trunk/uima-as/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/sandbox/trunk/uima-as/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java?rev=708248&r1=708247&r2=708248&view=diff
==============================================================================
--- incubator/uima/sandbox/trunk/uima-as/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java (original)
+++ incubator/uima/sandbox/trunk/uima-as/uimaj-as-jms/src/main/java/org/apache/uima/adapter/jms/client/BaseUIMAAsynchronousEngineCommon_impl.java Mon Oct 27 10:48:16 2008
@@ -823,9 +823,18 @@
 		{
 			payload = ((Integer) message.getIntProperty(AsynchAEMessage.Payload)).intValue();
 		}
-		if (AsynchAEMessage.Exception == payload)
+    //  Fetch entry from the client cache for a cas id returned from the service
+    //  The client cache maintains an entry for every outstanding CAS sent to the
+    //  service.
+    ClientRequest cachedRequest = null;
+    
+    if ( casReferenceId != null ) {
+      cachedRequest = (ClientRequest)clientCache.get(casReferenceId);
+    }
+
+    if (AsynchAEMessage.Exception == payload)
 		{
-			handleException(message, true);
+			handleException(message, cachedRequest, true);
 			return;
 		}
 		//	If the Cas Reference id not in the message check if the message contains an
@@ -840,10 +849,6 @@
 		}
 		  
 
-		//	Fetch entry from the client cache for a cas id returned from the service
-		//	The client cache maintains an entry for every outstanding CAS sent to the
-		//	service.
-		ClientRequest cachedRequest = (ClientRequest)clientCache.get(casReferenceId);
 		if ( cachedRequest != null )
 		{
 			//	Store the total latency for this CAS. The departure time is set right before the CAS
@@ -965,7 +970,7 @@
 		}
 		return false;
 	}
-	private void handleException( Message message, boolean doNotify )
+	private void handleException( Message message, ClientRequest cachedRequest, boolean doNotify )
 	throws Exception
 	{
 		if ( !isShutdownException(message))
@@ -986,30 +991,51 @@
       UIMAFramework.getLogger(CLASS_NAME).logrb(Level.FINEST, CLASS_NAME.getName(), "handleProcessReply", JmsConstants.JMS_LOG_RESOURCE_BUNDLE, "UIMAJMS_received_exception_msg_INFO",
 				new Object[] { message.getStringProperty(AsynchAEMessage.MessageFrom), message.getStringProperty(AsynchAEMessage.CasReference), exception });
     }
-		if ( doNotify )
-		{
-			ProcessTrace pt = new ProcessTrace_impl();
-			UimaASProcessStatusImpl status = null; //  new UimaASProcessStatusImpl(pt);
-			String casReferenceId = message.getStringProperty(AsynchAEMessage.CasReference);
-			if ( casReferenceId != null && casReferenceId.trim().length() > 0)
-			{
-				//	Add Cas reference Id to enable matching replies with requests
-				status = new UimaASProcessStatusImpl(pt, casReferenceId);
-			}
-			else
-			{
-				status = new UimaASProcessStatusImpl(pt);
-			}
-			status.addEventStatus("Process", "Failed", exception);
-			notifyListeners(null, status, AsynchAEMessage.Process);
-			//	 Done here
-			return;
-		}
-		else
-		{
-			throw new ResourceProcessException(exception);
-		}
-
+    String casReferenceId = null;
+    try {
+      if ( doNotify )
+      {
+        ProcessTrace pt = new ProcessTrace_impl();
+        UimaASProcessStatusImpl status = null; //  new UimaASProcessStatusImpl(pt);
+        casReferenceId = message.getStringProperty(AsynchAEMessage.CasReference);
+        if ( casReferenceId != null && casReferenceId.trim().length() > 0)
+        {
+          //  Add Cas reference Id to enable matching replies with requests
+          status = new UimaASProcessStatusImpl(pt, casReferenceId);
+        }
+        else
+        {
+          status = new UimaASProcessStatusImpl(pt);
+        }
+        status.addEventStatus("Process", "Failed", exception);
+        notifyListeners(null, status, AsynchAEMessage.Process);
+        //   Done here
+        return;
+      }
+      else
+      {
+        throw new ResourceProcessException(exception);
+      }
+    } catch ( Exception e) {
+      throw e;
+    }
+    finally {
+      //  Dont release the CAS if the application uses synchronous API
+      if ( cachedRequest != null && 
+           !cachedRequest.isSynchronousInvocation() && 
+           cachedRequest.getCAS() != null )
+      {
+         cachedRequest.getCAS().release();
+      }
+      removeFromCache(casReferenceId);
+      if (howManyRecvd == howManySent)
+      {
+        synchronized (cpcGate)
+        {
+          cpcGate.notifyAll();
+        }
+      }
+    }
 	}
 	private void completeProcessingReply( CAS cas, String casReferenceId, int payload, boolean doNotify, Message message, ClientRequest cachedRequest, ProcessTrace pt  )
 	throws Exception