You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ml...@apache.org on 2007/02/02 13:48:23 UTC

svn commit: r502591 - in /webservices/sandesha/trunk/java/src/org/apache/sandesha2: ./ handlers/ msgprocessors/ storage/beans/

Author: mlovett
Date: Fri Feb  2 04:48:22 2007
New Revision: 502591

URL: http://svn.apache.org/viewvc?view=rev&rev=502591
Log:
Refactor sync-2-way with RM 1.0 so that is is treated as a very specific poll

Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java Fri Feb  2 04:48:22 2007
@@ -481,8 +481,6 @@
 	
 	static final String MSG_NO_OF_IN_MSG = "MsgNoOfInMsg";
 	
-	static final String DUPLICATE_MESSAGE = "DuplicateMessage";
-	
 	static final String MAKE_CONNECTION_RESPONSE = "MakeConnectionResponse";
 	
 	//In RM 1.1 AnonRMURI case we may not be terminating a request sequence unless the response side create sequence 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaGlobalInHandler.java Fri Feb  2 04:48:22 2007
@@ -33,11 +33,14 @@
 import org.apache.sandesha2.SandeshaException;
 import org.apache.sandesha2.i18n.SandeshaMessageHelper;
 import org.apache.sandesha2.i18n.SandeshaMessageKeys;
+import org.apache.sandesha2.msgprocessors.MakeConnectionProcessor;
 import org.apache.sandesha2.msgprocessors.SequenceProcessor;
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.Transaction;
 import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
+import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.RMDBean;
+import org.apache.sandesha2.storage.beans.SenderBean;
 import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.Range;
 import org.apache.sandesha2.util.RangeString;
@@ -105,26 +108,48 @@
 			transaction = storageManager.getTransaction();
 
 			RMMsgContext rmMessageContext = MsgInitializer.initializeMessage(msgContext);
-			
-			//checking weather the Message belongs to the WSRM 1.0 Anonymous InOut scenario.
-			//If so instead of simply dropping duplicates we will have to attach the corresponding response,
-			//as long as the Message has not been acked.			
-			
 			EndpointReference replyTo = msgContext.getReplyTo();
 			String specVersion = rmMessageContext.getRMSpecVersion();
 				
 			boolean duplicateMessage = isDuplicateMessage (rmMessageContext, storageManager);
-			if (duplicateMessage)
-				msgContext.setProperty(Sandesha2Constants.DUPLICATE_MESSAGE, Boolean.TRUE);
 
-			boolean dropDuplicates = true;
-			if ((replyTo!=null && replyTo.hasAnonymousAddress()) &&
-					(specVersion!=null && specVersion.equals(Sandesha2Constants.SPEC_VERSIONS.v1_0)))
-					dropDuplicates = false;
+			//checking weather the Message belongs to the WSRM 1.0 Anonymous InOut scenario.
+			//If so instead of simply dropping duplicates we will have to attach the corresponding response,
+			//as long as the Message has not been acked.			
+			if (duplicateMessage &&
+					(replyTo==null || replyTo.hasAnonymousAddress()) &&
+					(specVersion!=null && specVersion.equals(Sandesha2Constants.SPEC_VERSIONS.v1_0))) {
+
+				// Treat the duplicate message as a special kind of poll
+				Sequence sequence = (Sequence) rmMessageContext.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
+				
+			    SenderBeanMgr senderBeanMgr = storageManager.getSenderBeanMgr();
+			    SenderBean findSenderBean = new SenderBean ();
+			    findSenderBean.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
+			    findSenderBean.setInboundSequenceId(sequence.getIdentifier().getIdentifier());
+			    findSenderBean.setInboundMessageNumber(sequence.getMessageNumber().getMessageNumber());
+			    findSenderBean.setSend(true);
+		
+			    SenderBean replyMessageBean = senderBeanMgr.findUnique(findSenderBean);
+			    
+			    // this is effectively a poll for the replyMessage, wo re-use the logic in the MakeConnection
+			    // processor. This will use this thread to re-send the reply, writing it into the transport.
+			    // As the reply is now written we do not want to continue processing, or suspend, so we abort.
+			    if(replyMessageBean != null) {
+			    	if(log.isDebugEnabled()) log.debug("Found matching reply for replayed message");
+			    	MakeConnectionProcessor.replyToPoll(rmMessageContext, replyMessageBean, storageManager, false, null);
+			    } else {
+			    	if(log.isDebugEnabled()) log.debug("No matching reply for replayed message");
+			    }
+			    
+			    returnValue = InvocationResponse.ABORT;
+				if (log.isDebugEnabled()) log.debug("Exit: SandeshaGlobalInHandler::invoke " + returnValue);
+				return returnValue;
+			}
 			
 			boolean shouldMessageBeDropped = shouldMessageBeDropped (rmMessageContext, storageManager);
 			
-			if ((duplicateMessage && dropDuplicates) || shouldMessageBeDropped) {
+			if (duplicateMessage || shouldMessageBeDropped) {
 
 				returnValue = InvocationResponse.ABORT; // the msg has been
 														// dropped

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java Fri Feb  2 04:48:22 2007
@@ -24,8 +24,6 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.handlers.AbstractHandler;
-import org.apache.axis2.transport.RequestResponseTransport;
-import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004Constants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.sandesha2.MessageValidator;
@@ -224,19 +222,8 @@
 				String acksToAddress = rmdBean.getAcksToEPR();
 				
 				EndpointReference acksTo = new EndpointReference (acksToAddress);
-				EndpointReference replyTo = msgContext.getReplyTo();
 				
-				String mep = msgContext.getAxisOperation().getMessageExchangePattern();
-				String specVersion = rmMsgContext.getRMSpecVersion();
-				
-				if (replyTo!=null && replyTo.hasAnonymousAddress() && 
-					!WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(mep)){
-					
-					//for RM 1.0 this is done to attach a sync response using the RequestResponseTransport
-					if (specVersion!=null && specVersion.equals(Sandesha2Constants.SPEC_VERSIONS.v1_0))
-						msgContext.setProperty(RequestResponseTransport.HOLD_RESPONSE, Boolean.TRUE);
-					
-				} else if (acksTo!=null && acksTo.hasAnonymousAddress()) {
+				if (acksTo!=null && acksTo.hasAnonymousAddress()) {
 					
 					Object responseWritten = msgContext.getOperationContext().getProperty(Constants.RESPONSE_WRITTEN);
 					if (responseWritten==null || !Constants.VALUE_TRUE.equals(responseWritten)) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java Fri Feb  2 04:48:22 2007
@@ -120,7 +120,8 @@
                                     .getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
                     if (sequencePart != null) {
             			String incomingSeqId = sequencePart.getIdentifier().getIdentifier();
-            			msgProcessor = new ApplicationMsgProcessor(incomingSeqId);// a rm intended message
+            			long incomingMessageNumber = sequencePart.getMessageNumber().getMessageNumber();
+            			msgProcessor = new ApplicationMsgProcessor(incomingSeqId, incomingMessageNumber);
                     }
                 } else // if client side.
                     msgProcessor = new ApplicationMsgProcessor();

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Fri Feb  2 04:48:22 2007
@@ -66,13 +66,15 @@
 	private static final Log log = LogFactory.getLog(ApplicationMsgProcessor.class);
 
 	private String inboundSequence = null;
+	private long   inboundMessageNumber;
 	
 	public ApplicationMsgProcessor() {
 		// Nothing to do
 	}
 	
-	public ApplicationMsgProcessor(String inboundSequenceId) {
+	public ApplicationMsgProcessor(String inboundSequenceId, long inboundMessageNumber) {
 		this.inboundSequence = inboundSequenceId;
+		this.inboundMessageNumber = inboundMessageNumber;
 	}
 	
 	public boolean processInMessage(RMMsgContext rmMsgCtx) {
@@ -634,6 +636,8 @@
 		appMsgEntry.setMessageNumber(messageNumber);
 		appMsgEntry.setLastMessage(lastMessage);
 		appMsgEntry.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
+		appMsgEntry.setInboundSequenceId(inboundSequence);
+		appMsgEntry.setInboundMessageNumber(inboundMessageNumber);
 		if (outSequenceID == null) {
 			appMsgEntry.setSend(false);
 		} else {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/MakeConnectionProcessor.java Fri Feb  2 04:48:22 2007
@@ -104,28 +104,40 @@
 			if(log.isDebugEnabled()) log.debug("Exit: MakeConnectionProcessor::processInMessage, no matching message found");
 			return false;
 		}
-			
-		TransportOutDescription transportOut = rmMsgCtx.getMessageContext().getTransportOut();
+		
+		replyToPoll(rmMsgCtx, senderBean, storageManager, pending, makeConnection.getNamespaceValue());
+		
+		return false;
+	}
+	
+	public static void replyToPoll(RMMsgContext pollMessage,
+			SenderBean matchingMessage,
+			StorageManager storageManager,
+			boolean pending,
+			String namespace)
+	throws AxisFault
+	{
+		TransportOutDescription transportOut = pollMessage.getMessageContext().getTransportOut();
 		if (transportOut==null) {
 			String message = SandeshaMessageHelper.getMessage(
 					SandeshaMessageKeys.cantSendMakeConnectionNoTransportOut);
 			throw new SandeshaException (message);
 		}
 			
-		String messageStorageKey = senderBean.getMessageContextRefKey();
-		MessageContext returnMessage = storageManager.retrieveMessageContext(messageStorageKey,configurationContext);
+		String messageStorageKey = matchingMessage.getMessageContextRefKey();
+		MessageContext returnMessage = storageManager.retrieveMessageContext(messageStorageKey,pollMessage.getConfigurationContext());
 		if (returnMessage==null) {
 			String message = "Cannot find the message stored with the key:" + messageStorageKey;
 			throw new SandeshaException (message);
 		}
 		
-		if(pending) addMessagePendingHeader(returnMessage, makeConnection.getNamespaceValue());
+		if(pending) addMessagePendingHeader(returnMessage, namespace);
 		
 		RMMsgContext returnRMMsg = MsgInitializer.initializeMessage(returnMessage);
-		setTransportProperties (returnMessage, rmMsgCtx);
+		setTransportProperties (returnMessage, pollMessage);
 		
 		// Link the response to the request
-		OperationContext context = rmMsgCtx.getMessageContext().getOperationContext();
+		OperationContext context = pollMessage.getMessageContext().getOperationContext();
 		context.addMessageContext(returnMessage);
 		returnMessage.setOperationContext(context);
 		
@@ -135,15 +147,13 @@
 		//This will allow Sandesha2 to consider both of following senarios equally.
 		//	1. A message being sent by the Sender thread.
 		//  2. A message being sent as a reply to an MakeConnection.
-		SenderWorker worker = new SenderWorker (configurationContext, senderBean);
+		SenderWorker worker = new SenderWorker (pollMessage.getConfigurationContext(), matchingMessage);
 		worker.setMessage(returnRMMsg);
 
 		worker.run();
-		
-		return false;
 	}
 	
-	private void addMessagePendingHeader (MessageContext returnMessage, String namespace) throws SandeshaException {
+	private static void addMessagePendingHeader (MessageContext returnMessage, String namespace) throws SandeshaException {
 		MessagePending messagePending = new MessagePending(namespace);
 		messagePending.setPending(true);
 		messagePending.toSOAPEnvelope(returnMessage.getEnvelope());
@@ -153,7 +163,7 @@
 		return false;
 	}
 
-	private void setTransportProperties (MessageContext returnMessage, RMMsgContext makeConnectionMessage) {
+	private static void setTransportProperties (MessageContext returnMessage, RMMsgContext makeConnectionMessage) {
         returnMessage.setProperty(MessageContext.TRANSPORT_OUT,makeConnectionMessage.getProperty(MessageContext.TRANSPORT_OUT));
         returnMessage.setProperty(Constants.OUT_TRANSPORT_INFO,makeConnectionMessage.getProperty(Constants.OUT_TRANSPORT_INFO));
         

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/SequenceProcessor.java Fri Feb  2 04:48:22 2007
@@ -17,9 +17,6 @@
 
 package org.apache.sandesha2.msgprocessors;
 
-import java.util.Iterator;
-import java.util.List;
-
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMElement;
@@ -29,9 +26,7 @@
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.engine.Handler.InvocationResponse;
-import org.apache.axis2.wsdl.WSDLConstants;
 import org.apache.axis2.wsdl.WSDLConstants.WSDL20_2004Constants;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -46,14 +41,10 @@
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.beanmanagers.InvokerBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.RMDBeanMgr;
-import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beans.InvokerBean;
 import org.apache.sandesha2.storage.beans.RMDBean;
-import org.apache.sandesha2.storage.beans.RMSBean;
-import org.apache.sandesha2.storage.beans.SenderBean;
 import org.apache.sandesha2.util.AcknowledgementManager;
 import org.apache.sandesha2.util.FaultManager;
-import org.apache.sandesha2.util.MsgInitializer;
 import org.apache.sandesha2.util.Range;
 import org.apache.sandesha2.util.RangeString;
 import org.apache.sandesha2.util.SandeshaUtil;
@@ -162,97 +153,8 @@
 			bean.setLastInMessageId(msgCtx.getMessageID());
 		}
 		
-		//Check weather this is a duplicate message. Normally duplicate messages get dropped at the SandeshaGlobalInHandler
-		//But they can reach here if they belonged to the WSRM 1.0 Anonymous InOut Scenario
 		EndpointReference replyTo = rmMsgCtx.getReplyTo();
-		String specVersion = rmMsgCtx.getRMSpecVersion();
-		Boolean duplicateMessage = (Boolean) rmMsgCtx.getProperty(Sandesha2Constants.DUPLICATE_MESSAGE);
 		String mep = msgCtx.getAxisOperation().getMessageExchangePattern();
-		boolean syncReply = replyTo == null || replyTo.hasAnonymousAddress();
-		
-		if (syncReply && !WSDL20_2004Constants.MEP_URI_IN_ONLY.equals(mep) && 
-			(specVersion!=null && specVersion.equals(Sandesha2Constants.SPEC_VERSIONS.v1_0)) &&
-			(duplicateMessage!=null && duplicateMessage.equals(Boolean.TRUE))){
-			
-		    String outgoingSideInternalSequenceId = SandeshaUtil.getOutgoingSideInternalSequenceID(sequenceId);
-		    RMSBean rmsBean = SandeshaUtil.getRMSBeanFromInternalSequenceId(storageManager, outgoingSideInternalSequenceId);
-		    if (rmsBean==null) {
-		    	String message = "Cannot find a entries for the response side sequence";
-		    	throw new SandeshaException (message);
-		    }
-		    
-		    String outgoingSideSequenceId = rmsBean.getSequenceID();
-		    if (outgoingSideSequenceId==null) {
-		    	String message = "Outgoing side SequenceId has not been set";
-		    	throw new SandeshaException (message);
-		    }
-		    
-		    SenderBeanMgr senderBeanMgr = storageManager.getSenderBeanMgr();
-		    SenderBean findSenderBean = new SenderBean ();
-		    findSenderBean.setSequenceID(outgoingSideSequenceId);
-		    findSenderBean.setMessageType(Sandesha2Constants.MessageTypes.APPLICATION);
-		    findSenderBean.setSend(true);
-		    
-		    List senderBeanList = senderBeanMgr.find(findSenderBean);
-		    for (Iterator it=senderBeanList.iterator();it.hasNext();) {
-		    	SenderBean senderBean = (SenderBean) it.next();
-		    	String messageContextKey = senderBean.getMessageContextRefKey();
-		    	MessageContext outMessageContext = storageManager.retrieveMessageContext(messageContextKey, configCtx);
-		    	
-		    	Long msgNoOfInMsg = (Long) outMessageContext.getProperty(Sandesha2Constants.MSG_NO_OF_IN_MSG);
-		    	if (msgNoOfInMsg == null) {
-					MessageContext inMsgContextOfOutMessage = outMessageContext.getOperationContext()
-															  .getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
-					RMMsgContext inRMMsgContextOfOutMessage = MsgInitializer.initializeMessage(inMsgContextOfOutMessage);
-
-					if (inMsgContextOfOutMessage != null) {
-						Sequence sequenceOfInMsg = (Sequence) inRMMsgContextOfOutMessage.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
-						if (sequenceOfInMsg == null) {
-							String message = "Sender has an invalid application message. No sequence part";
-							throw new SandeshaException(message);
-						}
-
-						long lng = sequenceOfInMsg.getMessageNumber().getMessageNumber();
-						msgNoOfInMsg = new Long(lng);
-						outMessageContext.setProperty(Sandesha2Constants.MSG_NO_OF_IN_MSG, msgNoOfInMsg);
-
-						// storing again will make sure that this new property get persisted.
-						storageManager.storeMessageContext(messageContextKey, outMessageContext);
-					}
-				}
-		    	
-		    	if (msgNoOfInMsg != null) {
-					
-					//if this message has being processed before, attaching the previous response instead of invoking it again.
-					if (msgNoOfInMsg.longValue()==sequence.getMessageNumber().getMessageNumber()) {
-						OperationContext operationContext = msgCtx.getOperationContext();
-						operationContext.addMessageContext(outMessageContext);
-						
-						outMessageContext.setOperationContext(operationContext);
-						outMessageContext.setProperty(MessageContext.TRANSPORT_OUT, msgCtx.getProperty(MessageContext.TRANSPORT_OUT));
-						
-						// pausing the thread, causing the transport to wait.
-						// Sender will send the outMessage correctly, using
-						// RequestResponseTransportListner.
-						
-						result = InvocationResponse.SUSPEND;
-						if (log.isDebugEnabled())
-							log.debug("Exit: SequenceProcessor::processReliableMessage" + result);
-						return result;
-					}
-				}
-		    }
-
-		    String message = "Cant process the message. Cant find a suitable out message context for the duplicate message";
-			throw new SandeshaException (message);
-		    
-		} else if (duplicateMessage!=null && duplicateMessage.equals(Boolean.TRUE)) {
-			// Abort processing this duplicate
-			result = InvocationResponse.ABORT;
-			if (log.isDebugEnabled())
-				log.debug("Exit: SequenceProcessor::processReliableMessage, dropping duplicate: " + result);
-			return result;
-		}		
 		
 		String key = SandeshaUtil.getUUID(); // key to store the message.
 		// updating the Highest_In_Msg_No property which gives the highest

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java?view=diff&rev=502591&r1=502590&r2=502591
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/storage/beans/SenderBean.java Fri Feb  2 04:48:22 2007
@@ -59,6 +59,12 @@
 	private String toAddress;
 	
 	/**
+	 * If this sender bean is handling a response message, then we record the sequence id
+	 * of the inbound message that generated this response.
+	 */
+	private String inboundSequence;
+	
+	/**
 	 * Comment for <code>send</code>
 	 * The sender will not send the message unless this property is true.
 	 */
@@ -101,6 +107,12 @@
 	private boolean lastMessage = false;
 	
 	/**
+	 * If this sender bean is handling a response message, then we record the message number
+	 * of the inbound message that generated this response.
+	 */
+	private long inboundMessageNumber;
+	
+	/**
 	 * Flags that are used to check if the primitive types on this bean
 	 * have been set. If a primitive type has not been set then it will
 	 * be ignored within the match method.
@@ -113,6 +125,7 @@
 	private static final int TIME_TO_SEND_FLAG = 0x00010000;
 	private static final int MSG_TYPE_FLAG     = 0x00100000;
 	private static final int LAST_MSG_FLAG     = 0x01000000;
+	private static final int IN_MSG_NUM_FLAG   = 0x10000000;
 
 	public SenderBean() {
 
@@ -232,6 +245,23 @@
 		this.flags |= LAST_MSG_FLAG;
 	}
 	
+	public long getInboundMessageNumber() {
+		return inboundMessageNumber;
+	}
+
+	public void setInboundMessageNumber(long inboundMessageNumber) {
+		this.inboundMessageNumber = inboundMessageNumber;
+		this.flags |= IN_MSG_NUM_FLAG;
+	}
+
+	public String getInboundSequenceId() {
+		return inboundSequence;
+	}
+
+	public void setInboundSequenceId(String inboundSequence) {
+		this.inboundSequence = inboundSequence;
+	}
+
 	public String toString() {
 		StringBuffer result = new StringBuffer();
 		// There is a lot of data in this bean, so we don't trace it all.
@@ -266,6 +296,9 @@
 
 		else if(bean.getToAddress() != null && !bean.getToAddress().equals(this.getToAddress()))
 			match = false;
+
+		else if(bean.getInboundSequenceId() != null && !bean.getInboundSequenceId().equals(this.getInboundSequenceId()))
+			match = false;
 		
 		else if((bean.flags & SEND_FLAG) != 0 && bean.isSend() != this.isSend())
 			match = false;
@@ -287,6 +320,9 @@
 			match = false;
 		
 		else if((bean.flags & LAST_MSG_FLAG) != 0 && bean.isLastMessage() != this.isLastMessage())
+			match = false;
+
+		else if((bean.flags & IN_MSG_NUM_FLAG) != 0 && bean.getInboundMessageNumber() != this.getInboundMessageNumber())
 			match = false;
 
 		return match;



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