You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ml...@apache.org on 2007/03/13 17:39:04 UTC

svn commit: r517763 - /webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java

Author: mlovett
Date: Tue Mar 13 09:39:02 2007
New Revision: 517763

URL: http://svn.apache.org/viewvc?view=rev&rev=517763
Log:
Use WS-RM anonymous address to piggyback ack messages

Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=517763&r1=517762&r2=517763
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java Tue Mar 13 09:39:02 2007
@@ -68,17 +68,35 @@
 		// If this message is going to an anonymous address, and the inbound sequence has
 		// anonymous acksTo, then we add in an ack for the inbound sequence.
 		EndpointReference target = rmMessageContext.getTo();
-		if(target.hasAnonymousAddress()) {
-			String inboundSequence = (String) rmMessageContext.getProperty(Sandesha2Constants.MessageContextProperties.INBOUND_SEQUENCE_ID);
-			if(inboundSequence != null) {
-				RMDBean inboundBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);
-				if(inboundBean != null) {
-					String acksTo = inboundBean.getAcksToEPR();
-					EndpointReference acksToEPR = new EndpointReference(acksTo);
-					
-					if(acksTo == null || acksToEPR.hasAnonymousAddress()) {
-						if(log.isDebugEnabled()) log.debug("Piggybacking ack for inbound sequence: " + inboundSequence);
-						RMMsgCreator.addAckMessage(rmMessageContext, inboundSequence, inboundBean);
+		if(target == null || target.hasAnonymousAddress()) {
+			if(target != null && SandeshaUtil.isWSRMAnonymous(target.getAddress())) {
+				// Search for any sequences that have an acksTo that matches this target, and add an ack
+				// for each of them.
+				RMDBean findBean = new RMDBean();
+				findBean.setAcksToEPR(target.getAddress());
+				findBean.setTerminated(false);
+				Collection rmdBeans = storageManager.getRMDBeanMgr().find(findBean);
+				Iterator sequences = rmdBeans.iterator();
+				while(sequences.hasNext()) {
+					RMDBean sequence = (RMDBean) sequences.next();
+					if(log.isDebugEnabled()) log.debug("Piggybacking ack for sequence: " + sequence.getSequenceID());
+					RMMsgCreator.addAckMessage(rmMessageContext, sequence.getSequenceID(), sequence);
+				}
+				
+			} else {
+				// We have no good indicator of the identity of the destination, so the only sequence
+				// we can ack is the inbound one that caused us to create this response.
+				String inboundSequence = (String) rmMessageContext.getProperty(Sandesha2Constants.MessageContextProperties.INBOUND_SEQUENCE_ID);
+				if(inboundSequence != null) {
+					RMDBean inboundBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, inboundSequence);
+					if(inboundBean != null) {
+						String acksTo = inboundBean.getAcksToEPR();
+						EndpointReference acksToEPR = new EndpointReference(acksTo);
+						
+						if(acksTo == null || acksToEPR.hasAnonymousAddress()) {
+							if(log.isDebugEnabled()) log.debug("Piggybacking ack for inbound sequence: " + inboundSequence);
+							RMMsgCreator.addAckMessage(rmMessageContext, inboundSequence, inboundBean);
+						}
 					}
 				}
 			}



---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org