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/05/21 11:48:02 UTC
svn commit: r540091 -
/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
Author: mlovett
Date: Mon May 21 02:48:01 2007
New Revision: 540091
URL: http://svn.apache.org/viewvc?view=rev&rev=540091
Log:
Piggyback acks on Terminate messages, to help end sequences cleanly.
Modified:
webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
Modified: webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java?view=diff&rev=540091&r1=540090&r2=540091
==============================================================================
--- webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java (original)
+++ webservices/sandesha/trunk/java/modules/core/src/main/java/org/apache/sandesha2/util/AcknowledgementManager.java Mon May 21 02:48:01 2007
@@ -18,7 +18,9 @@
package org.apache.sandesha2.util;
import java.util.Collection;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Set;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
@@ -108,6 +110,7 @@
// From here on, we must be dealing with a real address. Piggyback all sequences that have an
// acksTo that matches the To address, and that have an ackMessage queued up for sending.
+ Set acked = new HashSet();
SenderBean findBean = new SenderBean();
findBean.setMessageType(Sandesha2Constants.MessageTypes.ACK);
findBean.setSend(true);
@@ -131,6 +134,30 @@
RMDBean rmdBean = SandeshaUtil.getRMDBeanFromSequenceId(storageManager, sequenceId);
if(rmdBean != null && !rmdBean.isTerminated()) {
RMMsgCreator.addAckMessage(rmMessageContext, sequenceId, rmdBean);
+ }
+ acked.add(sequenceId);
+ }
+ }
+
+ // As a special case, if this is a terminate sequence message then add in ack messages for
+ // any sequences that have an acksTo that matches the target address. This helps to ensure
+ // that request-response sequence pairs end cleanly.
+ if(rmMessageContext.getMessageType() == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
+ if(log.isDebugEnabled()) log.debug("Adding extra acks, as this is a terminate");
+
+ RMDBean findRMDBean = new RMDBean();
+ findRMDBean.setAcksToEPR(target.getAddress());
+ findRMDBean.setTerminated(false);
+ Collection rmdBeans = storageManager.getRMDBeanMgr().find(findRMDBean);
+ Iterator sequences = rmdBeans.iterator();
+ while(sequences.hasNext()) {
+ RMDBean sequence = (RMDBean) sequences.next();
+ String sequenceId = sequence.getSequenceID();
+
+ if(!acked.contains(sequenceId) && sequence.getHighestInMessageNumber() > 0) {
+ if(log.isDebugEnabled()) log.debug("Piggybacking ack for sequence: " + sequenceId);
+ RMMsgCreator.addAckMessage(rmMessageContext, sequenceId, sequence);
+ acked.add(sequenceId);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org