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 ch...@apache.org on 2006/10/05 07:15:56 UTC

svn commit: r453108 - in /webservices/sandesha/trunk/java/src/org/apache/sandesha2: ./ handlers/ msgprocessors/ polling/ transport/ util/ workers/

Author: chamikara
Date: Wed Oct  4 22:15:55 2006
New Revision: 453108

URL: http://svn.apache.org/viewvc?view=rev&rev=453108
Log:
Did fixes to support secure conversation. Basically there is a new
concept of Retransmittable phases.These will be called in every
retransmission.

Bug fixes.



Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.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/AckRequestedProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/transport/Sandesha2TransportSender.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.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=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/Sandesha2Constants.java Wed Oct  4 22:15:55 2006
@@ -539,6 +539,8 @@
 	
 	String RM_IN_ONLY_OPERATION = "RMInOnlyOperation";
 	
+	String RETRANSMITTABLE_PHASES = "RMRetransmittablePhases";
+	
 	String [] SPEC_NS_URIS = {
 			SPEC_2005_02.NS_URI,
 			SPEC_2006_08.NS_URI

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=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaInHandler.java Wed Oct  4 22:15:55 2006
@@ -122,7 +122,7 @@
 				log.debug(message);
 				throw new AxisFault(message);
 			}
-
+			
 			// validating the message
 			MessageValidator.validateMessage(rmMsgCtx, storageManager);
 

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=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/handlers/SandeshaOutHandler.java Wed Oct  4 22:15:55 2006
@@ -95,6 +95,10 @@
 				return;
 			}
 		}
+		
+		//this will change the execution chain of this message to work correctly in retransmissions.
+		//For e.g. Phases like security will be removed to be called in each retransmission.
+		SandeshaUtil.modifyExecutionChainForStoring(msgCtx);
 
 		String DONE = (String) msgCtx.getProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE);
 		if (null != DONE && "true".equals(DONE)) {
@@ -102,7 +106,7 @@
 				log.debug("Exit: SandeshaOutHandler::invoke, Application processing done");
 			return;
 		}
-
+		
 		msgCtx.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE, "true");
 		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(context, context.getAxisConfiguration());
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java Wed Oct  4 22:15:55 2006
@@ -69,7 +69,7 @@
 
 	private static final Log log = LogFactory.getLog(AckRequestedProcessor.class);
 
-	public void processAckRequestedHeaders(MessageContext message) throws SandeshaException {
+	public void processAckRequestedHeaders(MessageContext message) throws AxisFault {
 		if (log.isDebugEnabled())
 			log.debug("Enter: AckRequestedProcessor::processAckRequestHeaders");
 
@@ -95,7 +95,7 @@
 			log.debug("Exit: AckRequestedProcessor::processAckRequestHeaders");
 	}
 
-	public void processAckRequestedHeader(MessageContext msgContext, OMElement soapHeader, AckRequested ackRequested) throws SandeshaException {
+	public void processAckRequestedHeader(MessageContext msgContext, OMElement soapHeader, AckRequested ackRequested) throws AxisFault {
 		if (log.isDebugEnabled())
 			log.debug("Enter: AckRequestedProcessor::processAckRequestedHeader " + soapHeader);
 
@@ -281,25 +281,14 @@
 			ackBean.setTimeToSend(timeToSend);
 
 			storageManager.storeMessageContext(key, ackMsgCtx);
-
+			msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
+			
 			// inserting the new ack.
 			retransmitterBeanMgr.insert(ackBean);
 
 			// passing the message through sandesha2sender
 
-			ackMsgCtx.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, ackMsgCtx.getTransportOut());
-			ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
-
-			ackMsgCtx.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, key);
-
-			ackMsgCtx.setTransportOut(new Sandesha2TransportOutDesc());
-
-			AxisEngine engine = new AxisEngine(configurationContext);
-			try {
-				engine.send(ackMsgCtx);
-			} catch (AxisFault e) {
-				throw new SandeshaException(e.getMessage());
-			}
+			SandeshaUtil.executeAndStore(ackRMMsgCtx, key);
 
 			SandeshaUtil.startSenderForTheSequence(configurationContext, sequenceId);
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AcknowledgementProcessor.java Wed Oct  4 22:15:55 2006
@@ -40,8 +40,10 @@
 import org.apache.sandesha2.security.SecurityManager;
 import org.apache.sandesha2.security.SecurityToken;
 import org.apache.sandesha2.storage.StorageManager;
+import org.apache.sandesha2.storage.beanmanagers.CreateSeqBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.SenderBeanMgr;
 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
+import org.apache.sandesha2.storage.beans.CreateSeqBean;
 import org.apache.sandesha2.storage.beans.SenderBean;
 import org.apache.sandesha2.storage.beans.SequencePropertyBean;
 import org.apache.sandesha2.util.AcknowledgementManager;
@@ -63,7 +65,7 @@
 
 	private static final Log log = LogFactory.getLog(AcknowledgementProcessor.class);
 
-	public void processAckHeaders(MessageContext message) throws SandeshaException {
+	public void processAckHeaders(MessageContext message) throws AxisFault {
 		if (log.isDebugEnabled())
 			log.debug("Enter: AcknowledgementProcessor::processAckHeaders");
 
@@ -91,8 +93,7 @@
 	}
 	
 	private void processAckHeader(MessageContext msgCtx, OMElement soapHeader, SequenceAcknowledgement sequenceAck)
-	throws SandeshaException
-	{
+		throws AxisFault {
 		if (log.isDebugEnabled())
 			log.debug("Enter: AcknowledgementProcessor::processAckHeader " + soapHeader);
 		
@@ -245,9 +246,15 @@
 				boolean complete = AcknowledgementManager.verifySequenceCompletion(sequenceAck
 						.getAcknowledgementRanges().iterator(), highestOutMsgNo);
 
-				if (complete)
+				if (complete) {
+					
+					//using create sequence message as the reference message.
+//					CreateSeqBeanMgr createSeqBeanMgr = storageManager.getCreateSeqBeanMgr();
+//					CreateSeqBean createSeqBean = createSeqBeanMgr.retrieve(msgId);
+//					
 					TerminateManager.addTerminateSequenceMessage(rmMsgCtx, outSequenceId, sequencePropertyKey,
 							storageManager);
+				}
 			}
 		}
 

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=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/ApplicationMsgProcessor.java Wed Oct  4 22:15:55 2006
@@ -378,14 +378,12 @@
 
 		RMMsgContext ackRMMessage = AcknowledgementManager.generateAckMessage(rmMsgCtx, sequencePropertyKey ,sequenceId, storageManager);
 
-		AxisEngine engine = new AxisEngine(configCtx);
-
-		try {
+		//if the ack is anonymous send it right now.
+		
+		EndpointReference to = ackRMMessage.getTo();
+		if (to!=null && SandeshaUtil.isAnonymousURI(to.getAddress())) {
+			AxisEngine engine = new AxisEngine(configCtx);
 			engine.send(ackRMMessage.getMessageContext());
-		} catch (AxisFault e) {
-			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendAck, sequenceId, e
-					.toString());
-			throw new SandeshaException(message, e);
 		}
 
 		if (log.isDebugEnabled())
@@ -896,38 +894,18 @@
 			createSeqEntry.setToAddress(to.getAddress());
 
 		createSeqMsg.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
-		createSeqEntry.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ);
+		storageManager.storeMessageContext(createSequenceMessageStoreKey, createSeqMsg); // storing the message
+		
 		retransmitterMgr.insert(createSeqEntry);
 
-		storageManager.storeMessageContext(createSequenceMessageStoreKey, createSeqMsg); // storing the
-																// message.
-
-		// message will be stored in the Sandesha2TransportSender
-		createSeqMsg.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, createSequenceMessageStoreKey);
-
-		TransportOutDescription transportOut = createSeqMsg.getTransportOut();
-
-		createSeqMsg.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, transportOut);
-		createSeqMsg.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
-		createSeqMsg.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, createSequenceMessageStoreKey);
-
-		Sandesha2TransportOutDesc sandesha2TransportOutDesc = new Sandesha2TransportOutDesc();
-		createSeqMsg.setTransportOut(sandesha2TransportOutDesc);
-
-		// sending the message once through Sandesha2TransportSender.
-		AxisEngine engine = new AxisEngine(createSeqMsg.getConfigurationContext());
-		try {
-			engine.resumeSend(createSeqMsg);
-		} catch (AxisFault e) {
-			throw new SandeshaException(e.getMessage());
-		}
-
+		SandeshaUtil.executeAndStore(createSeqRMMessage, createSequenceMessageStoreKey);
+		
 		if (log.isDebugEnabled())
 			log.debug("Exit: ApplicationMsgProcessor::addCreateSequenceMessage");
 	}
 
 	private void processResponseMessage(RMMsgContext rmMsg, String internalSequenceId, long messageNumber,
-			String storageKey, StorageManager storageManager) throws SandeshaException {
+			String storageKey, StorageManager storageManager) throws AxisFault {
 		if (log.isDebugEnabled())
 			log.debug("Enter: ApplicationMsgProcessor::processResponseMessage, " + internalSequenceId);
 
@@ -966,14 +944,11 @@
 
 		String newToStr = null;
 		if (msg.isServerSide()) {
-			try {
-				MessageContext requestMsg = msg.getOperationContext().getMessageContext(
-						OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
-				if (requestMsg != null) {
-					newToStr = requestMsg.getReplyTo().getAddress();
-				}
-			} catch (AxisFault e) {
-				throw new SandeshaException(e.getMessage());
+
+			MessageContext requestMsg = msg.getOperationContext().getMessageContext(
+					OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
+			if (requestMsg != null) {
+				newToStr = requestMsg.getReplyTo().getAddress();
 			}
 		}
 
@@ -1001,12 +976,8 @@
 		if (msg.isServerSide()) {
 			MessageContext requestMsg = null;
 
-			try {
-				requestMsg = msg.getOperationContext()
-						.getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
-			} catch (AxisFault e) {
-				throw new SandeshaException(e.getMessage());
-			}
+			requestMsg = msg.getOperationContext()
+					.getMessageContext(OperationContextFactory.MESSAGE_LABEL_IN_VALUE);
 
 			RMMsgContext reqRMMsgCtx = MsgInitializer.initializeMessage(requestMsg);
 			Sequence requestSequence = (Sequence) reqRMMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
@@ -1072,11 +1043,9 @@
 			rmMsg.setMessagePart(Sandesha2Constants.MessageParts.ACK_REQUEST, ackRequested);
 		}
 
-		try {
-			rmMsg.addSOAPEnvelope();
-		} catch (AxisFault e1) {
-			throw new SandeshaException(e1.getMessage());
-		}
+
+		rmMsg.addSOAPEnvelope();
+
 
 		// Retransmitter bean entry for the application message
 		SenderBean appMsgEntry = new SenderBean();
@@ -1094,38 +1063,22 @@
 			// Send will be set to true at the sender.
 			msg.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
 		}
+		
 		EndpointReference to = rmMsg.getTo();
 		if (to!=null)
 			appMsgEntry.setToAddress(to.getAddress());
 		
 		appMsgEntry.setInternalSequenceID(internalSequenceId);
 		storageManager.storeMessageContext(storageKey, msg);
-		retransmitterMgr.insert(appMsgEntry);
-		msg.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
-
-		// changing the sender. This will set send to true.
-		TransportSender sender = msg.getTransportOut().getSender();
 
-		if (sender != null) {
-			Sandesha2TransportOutDesc sandesha2TransportOutDesc = new Sandesha2TransportOutDesc();
-			msg.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, storageKey);
-			msg.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, msg.getTransportOut());
-			msg.setTransportOut(sandesha2TransportOutDesc);
-
-		}
+		msg.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
+		retransmitterMgr.insert(appMsgEntry);
 
 		// increasing the current handler index, so that the message will not be
 		// going throught the SandeshaOutHandler again.
 		msg.setCurrentHandlerIndex(msg.getCurrentHandlerIndex() + 1);
 
-		// sending the message through, other handlers and the
-		// Sandesha2TransportSender so that it get dumped to the storage.
-		AxisEngine engine = new AxisEngine(msg.getConfigurationContext());
-		try {
-			engine.resumeSend(msg);
-		} catch (AxisFault e) {
-			throw new SandeshaException(e);
-		}
+		SandeshaUtil.executeAndStore(rmMsg, storageKey);
 
 		if (log.isDebugEnabled())
 			log.debug("Exit: ApplicationMsgProcessor::processResponseMessage");

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqMsgProcessor.java Wed Oct  4 22:15:55 2006
@@ -18,6 +18,9 @@
 package org.apache.sandesha2.msgprocessors;
 
 import java.util.Collection;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMElement;
 import org.apache.axis2.AxisFault;
@@ -126,6 +129,8 @@
 																										// created
 																										// sequnceID.
 
+
+			
 			RMMsgContext createSeqResponse = RMMsgCreator.createCreateSeqResponseMsg(createSeqRMMsg, outMessage,
 					newSequenceId, storageManager); // converting the blank out
 													// message in to a create

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqMsgProcessor.java Wed Oct  4 22:15:55 2006
@@ -258,7 +258,7 @@
 	}
 
 	private void addTerminateSequenceResponse(RMMsgContext terminateSeqRMMsg, String sequencePropertyKey,String sequenceId,
-			StorageManager storageManager) throws SandeshaException {
+			StorageManager storageManager) throws AxisFault {
 
 		if (log.isDebugEnabled())
 			log.debug("Enter: TerminateSeqMsgProcessor::addTerminateSequenceResponse, " + sequenceId);
@@ -305,16 +305,11 @@
 
 		AxisEngine engine = new AxisEngine(terminateSeqMsg.getConfigurationContext());
 
-		try {
-			engine.send(outMessage);
-		} catch (AxisFault e) {
-			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.couldNotSendTerminateResponse, e
-					.toString());
-			throw new SandeshaException(message, e);
-		}
+		engine.send(outMessage);
 
 		String addressingNamespaceURI = SandeshaUtil.getSequenceProperty(sequencePropertyKey,
 				Sandesha2Constants.SequenceProperties.ADDRESSING_NAMESPACE_VALUE, storageManager);
+
 		String anonymousURI = SpecSpecificConstants.getAddressingAnonymousURI(addressingNamespaceURI);
 
 		if (anonymousURI.equals(toEPR.getAddress())) {
@@ -327,7 +322,7 @@
 			log.debug("Exit: TerminateSeqMsgProcessor::addTerminateSequenceResponse");
 	}
 
-	public void processOutMessage(RMMsgContext rmMsgCtx) throws SandeshaException {
+	public void processOutMessage(RMMsgContext rmMsgCtx) throws AxisFault {
 
 		if (log.isDebugEnabled())
 			log.debug("Enter: TerminateSeqMsgProcessor::processOutMessage");
@@ -363,28 +358,29 @@
 		// TODO do processing of terminateMessagesCorrectly., create a new
 		// message instead of sendign the one given by the serviceClient
 		// TODO important
-		try {
-			AxisOperation oldOPeration = msgContext.getAxisOperation();
-			AxisOperation outInAxisOp = new OutInAxisOperation(new QName("temp"));
-			
-			AxisOperation referenceInOutOperation = msgContext.getAxisService().getOperation(new QName (Sandesha2Constants.RM_IN_OUT_OPERATION_NAME));
-			if (referenceInOutOperation==null) {
-				String messge = "Cant find the recerence RM InOut operation";
-				throw new SandeshaException (messge);
-			}
-			
-			// setting flows
-			outInAxisOp.setRemainingPhasesInFlow(referenceInOutOperation.getRemainingPhasesInFlow());
-//			outInAxisOp.setRemainingPhasesInFlow(oldOPeration.getRemainingPhasesInFlow());
-
-			OperationContext opcontext = OperationContextFactory.createOperationContext(
-					WSDL20_2004Constants.MEP_CONSTANT_OUT_IN, outInAxisOp);
-			opcontext.setParent(msgContext.getServiceContext());
-			configurationContext.registerOperationContext(rmMsgCtx.getMessageId(), opcontext);
-		} catch (AxisFault e1) {
-			throw new SandeshaException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.axisOperationRegisterError, e1.toString()));
-		}
+
+		AxisOperation outInAxisOp = new OutInAxisOperation(new QName("temp"));
+
+		AxisOperation referenceInOutOperation = msgContext.getAxisService()
+				.getOperation(
+						new QName(Sandesha2Constants.RM_IN_OUT_OPERATION_NAME));
+		if (referenceInOutOperation == null) {
+			String messge = "Cant find the recerence RM InOut operation";
+			throw new SandeshaException(messge);
+		}
+
+		// setting flows
+		// outInAxisOp.setRemainingPhasesInFlow(referenceInOutOperation.getRemainingPhasesInFlow());
+		outInAxisOp.setRemainingPhasesInFlow(referenceInOutOperation
+				.getRemainingPhasesInFlow());
+
+		OperationContext opcontext = OperationContextFactory
+				.createOperationContext(
+						WSDL20_2004Constants.MEP_CONSTANT_OUT_IN, outInAxisOp);
+		opcontext.setParent(msgContext.getServiceContext());
+		configurationContext.registerOperationContext(rmMsgCtx.getMessageId(),
+				opcontext);
+
 
 		if (terminated != null && "true".equals(terminated)) {
 			String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.terminateAddedPreviously);
@@ -457,20 +453,9 @@
 
 		seqPropMgr.insert(terminateAdded);
 
-		// This should be dumped to the storage by the sender
-		TransportOutDescription transportOut = msgContext.getTransportOut();
-		rmMsgCtx.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, transportOut);
-		rmMsgCtx.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, key);
 		rmMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
-		rmMsgCtx.getMessageContext().setTransportOut(new Sandesha2TransportOutDesc());
-		// / addTerminateSeqTransaction.commit();
 
-		AxisEngine engine = new AxisEngine(configurationContext);
-		try {
-			engine.send(msgContext);
-		} catch (AxisFault e) {
-			throw new SandeshaException(e.getMessage());
-		}
+		SandeshaUtil.executeAndStore(rmMsgCtx, key);
 
 		if (log.isDebugEnabled())
 			log.debug("Exit: TerminateSeqMsgProcessor::processOutMessage");

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/TerminateSeqResponseMsgProcessor.java Wed Oct  4 22:15:55 2006
@@ -54,6 +54,7 @@
 		
 		TerminateSequenceResponse tsResponse = (TerminateSequenceResponse)
 		  terminateResRMMsg.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ_RESPONSE);
+		
 		String sequenceId = tsResponse.getIdentifier().getIdentifier();
 		String sequencePropertyKey = SandeshaUtil.getSequencePropertyKey(terminateResRMMsg);
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/polling/PollingManager.java Wed Oct  4 22:15:55 2006
@@ -149,20 +149,9 @@
 				//this message should not be sent until it is qualified. I.e. till it is sent through the Sandesha2TransportSender.
 				makeConnectionRMMessage.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
 				
-				makeConnectionRMMessage.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, makeConnectionMsgStoreKey);
-				
 				senderBeanMgr.insert(makeConnectionSenderBean);
 				
-				TransportOutDescription transportOut = makeConnectionRMMessage.getMessageContext().getTransportOut();
-				makeConnectionRMMessage.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, transportOut);
-
-				Sandesha2TransportOutDesc sandesha2TransportOutDesc = new Sandesha2TransportOutDesc();
-				makeConnectionRMMessage.getMessageContext().setTransportOut(sandesha2TransportOutDesc);
-
-				// sending the message once through Sandesha2TransportSender.
-				AxisEngine engine = new AxisEngine(configurationContext);
-				engine.resumeSend(makeConnectionRMMessage.getMessageContext());
-				
+				SandeshaUtil.executeAndStore(makeConnectionRMMessage, makeConnectionMsgStoreKey);
 			} catch (SandeshaStorageException e) {
 				e.printStackTrace();
 			} catch (SandeshaException e) {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/transport/Sandesha2TransportSender.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/transport/Sandesha2TransportSender.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/transport/Sandesha2TransportSender.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/transport/Sandesha2TransportSender.java Wed Oct  4 22:15:55 2006
@@ -65,11 +65,10 @@
 		AxisConfiguration axisConfiguration = configurationContext.getAxisConfiguration();
 		
 		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext,axisConfiguration);
-
+		
 		msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING,Sandesha2Constants.VALUE_TRUE);
 		
 		storageManager.updateMessageContext(key,msgContext);
-		
 
 	}
 

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=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/AcknowledgementManager.java Wed Oct  4 22:15:55 2006
@@ -210,7 +210,7 @@
 	}
 
 	public static RMMsgContext generateAckMessage(RMMsgContext referenceRMMessage, String sequencePropertyKey ,String sequenceId,
-			StorageManager storageManager) throws SandeshaException {
+			StorageManager storageManager) throws AxisFault {
 		if (log.isDebugEnabled())
 			log.debug("Enter: AcknowledgementManager::generateAckMessage");
 
@@ -231,12 +231,7 @@
 
 		AxisOperation ackOperation = null;
 
-		try {
-			ackOperation = AxisOperationFactory.getOperationDescription(WSDL20_2004Constants.MEP_URI_IN_ONLY);
-		} catch (AxisFault e) {
-			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.axisOperationError, e
-					.toString()), e);
-		}
+		ackOperation = AxisOperationFactory.getOperationDescription(WSDL20_2004Constants.MEP_URI_IN_ONLY);
 
 		AxisOperation rmMsgOperation = referenceRMMessage.getMessageContext().getAxisOperation();
 		if (rmMsgOperation != null) {
@@ -268,11 +263,8 @@
 
 		// Setting new envelope
 		SOAPEnvelope envelope = factory.getDefaultEnvelope();
-		try {
-			ackMsgCtx.setEnvelope(envelope);
-		} catch (AxisFault e3) {
-			throw new SandeshaException(e3.getMessage());
-		}
+
+		ackMsgCtx.setEnvelope(envelope);
 
 		ackMsgCtx.setTo(acksTo);
 
@@ -297,14 +289,11 @@
 			if (referenceRMMessage.getMessageContext().getOperationContext() == null) {
 				// operation context will be null when doing in a GLOBAL
 				// handler.
-				try {
-					AxisOperation op = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_IN_OUT);
-					OperationContext opCtx = new OperationContext(op);
-					referenceRMMessage.getMessageContext().setAxisOperation(op);
-					referenceRMMessage.getMessageContext().setOperationContext(opCtx);
-				} catch (AxisFault e2) {
-					throw new SandeshaException(e2.getMessage());
-				}
+
+				AxisOperation op = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_IN_OUT);
+				OperationContext opCtx = new OperationContext(op);
+				referenceRMMessage.getMessageContext().setAxisOperation(op);
+				referenceRMMessage.getMessageContext().setOperationContext(opCtx);
 			}
 
 			referenceRMMessage.getMessageContext().getOperationContext().setProperty(
@@ -373,17 +362,18 @@
 			ackBean.setTimeToSend(timeToSend);
 			storageManager.storeMessageContext(key, ackMsgCtx);
 
+			ackMsgCtx.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
+			
 			// inserting the new ack.
 			retransmitterBeanMgr.insert(ackBean);
 			// / asyncAckTransaction.commit();
 
 			// passing the message through sandesha2sender
-			ackMsgCtx.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, ackMsgCtx.getTransportOut());
 			ackMsgCtx.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
-			ackMsgCtx.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, key);
-			ackMsgCtx.setTransportOut(new Sandesha2TransportOutDesc());
 			ackRMMsgCtx = MsgInitializer.initializeMessage(ackMsgCtx);
-
+			
+			SandeshaUtil.executeAndStore(ackRMMsgCtx, key);
+			
 			SandeshaUtil.startSenderForTheSequence(configurationContext, sequenceId);
 		}
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/FaultManager.java Wed Oct  4 22:15:55 2006
@@ -415,8 +415,11 @@
 
 			// end hack
 
+			AxisOperation operation = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_OUT_ONLY);
+
+			
 			//TODO this fails when the in message is in only. Fault is thrown at the InOnlyAxisOperation
-			MessageContext faultMsgContext = Utils.createOutMessageContext(referenceMessage);
+			MessageContext faultMsgContext = SandeshaUtil.createNewRelatedMessageContext(referenceRMMsgContext, operation); //Utils.createOutMessageContext(referenceMessage);
 
 			// setting contexts.
 			faultMsgContext.setAxisServiceGroup(referenceMessage.getAxisServiceGroup());
@@ -427,7 +430,6 @@
 			faultMsgContext.setServiceContext(referenceMessage.getServiceContext());
 			faultMsgContext.setServiceContextID(referenceMessage.getServiceContextID());
 
-			AxisOperation operation = AxisOperationFactory.getAxisOperation(WSDL20_2004Constants.MEP_CONSTANT_OUT_ONLY);
 
 			OperationContext operationContext = new OperationContext(operation);
 
@@ -465,6 +467,8 @@
 					.getRMNamespaceValue());
 
 			RMMsgContext faultRMMsgCtx = MsgInitializer.initializeMessage(faultMsgContext);
+			
+			faultRMMsgCtx.setAction(SpecSpecificConstants.getFaultAction (addressingNamespaceURI));
 
 			if (log.isDebugEnabled())
 				log.debug("Exit: FaultManager::getFault");

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/RMMsgCreator.java Wed Oct  4 22:15:55 2006
@@ -408,13 +408,16 @@
 																								// messages
 																								// correctly.
 
-		AxisOperation teferenceMsgOperation = referenceMessage.getAxisOperation();
+		//using the Sandesha2 RMOutInOperation as the reference operation.
+		AxisOperation referenceOperation = referenceMessage.getAxisService()
+					.getOperation(new QName (Sandesha2Constants.RM_IN_OUT_OPERATION_NAME));
+		
 		AxisOperation terminateMsgOperation = terminateMessage.getAxisOperation();
-		if (teferenceMsgOperation != null) {
-			terminateMsgOperation.setPhasesOutFlow(teferenceMsgOperation.getPhasesOutFlow());
-			terminateMsgOperation.setPhasesOutFaultFlow(teferenceMsgOperation.getPhasesOutFaultFlow());
-			terminateMsgOperation.setPhasesInFaultFlow(teferenceMsgOperation.getPhasesInFaultFlow());
-			terminateMsgOperation.setRemainingPhasesInFlow(teferenceMsgOperation.getRemainingPhasesInFlow());
+		if (referenceOperation != null) {
+			terminateMsgOperation.setPhasesOutFlow(referenceOperation.getPhasesOutFlow());
+			terminateMsgOperation.setPhasesOutFaultFlow(referenceOperation.getPhasesOutFaultFlow());
+			terminateMsgOperation.setPhasesInFaultFlow(referenceOperation.getPhasesInFaultFlow());
+			terminateMsgOperation.setRemainingPhasesInFlow(referenceOperation.getRemainingPhasesInFlow());
 		}
 
 		String rmVersion = SandeshaUtil.getRMVersion(sequencePropertyKey, storageManager);

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SandeshaUtil.java Wed Oct  4 22:15:55 2006
@@ -51,7 +51,9 @@
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.description.Parameter;
+import org.apache.axis2.description.TransportOutDescription;
 import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.engine.Handler;
 import org.apache.axis2.util.UUIDGenerator;
 import org.apache.commons.logging.Log;
@@ -68,6 +70,7 @@
 import org.apache.sandesha2.storage.StorageManager;
 import org.apache.sandesha2.storage.beanmanagers.SequencePropertyBeanMgr;
 import org.apache.sandesha2.storage.beans.SequencePropertyBean;
+import org.apache.sandesha2.transport.Sandesha2TransportOutDesc;
 import org.apache.sandesha2.workers.Invoker;
 import org.apache.sandesha2.workers.Sender;
 import org.apache.sandesha2.wsrm.AckRequested;
@@ -1044,4 +1047,75 @@
 		
 		return false;
 	}
+	
+	public static void executeAndStore (RMMsgContext rmMsgContext, String storageKey) throws AxisFault {
+		
+		MessageContext msgContext = rmMsgContext.getMessageContext();
+		ConfigurationContext configurationContext = msgContext.getConfigurationContext();
+		
+		rmMsgContext.setMessageType(Sandesha2Constants.MessageTypes.CREATE_SEQ);
+
+
+		// message will be stored in the Sandesha2TransportSender
+		msgContext.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, storageKey);
+
+		TransportOutDescription transportOut = msgContext.getTransportOut();
+
+		msgContext.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, transportOut);
+		msgContext.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
+		msgContext.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, storageKey);
+
+		Sandesha2TransportOutDesc sandesha2TransportOutDesc = new Sandesha2TransportOutDesc();
+		msgContext.setTransportOut(sandesha2TransportOutDesc);
+
+ 		// sending the message once through Sandesha2TransportSender.
+ 		AxisEngine engine = new AxisEngine(configurationContext);
+
+		if (msgContext.isPaused())
+			engine.resumeSend(msgContext);
+		else
+			engine.send(msgContext);
+
+
+	}
+	
+	public static void modifyExecutionChainForStoring (MessageContext message) {
+		
+		Object property = message.getProperty(Sandesha2Constants.RETRANSMITTABLE_PHASES);
+		if (property!=null)
+			return; //Phases are already set. Dont hv to redo.
+		
+		TransportOutDescription transportOutDescription = message.getTransportOut();
+		if (!(transportOutDescription instanceof Sandesha2TransportOutDesc))
+			return; //This message is aimed to be stored only if, Sandesha2TransportOutDescription is set.
+		
+		ArrayList executionChain = message.getExecutionChain();
+		ArrayList retransmittablePhaseNames = getRetransmittablePhaseNameList();
+		ArrayList retransmittablePhases = new ArrayList ();
+		
+		for (Iterator it=executionChain.iterator();it.hasNext();) {
+			Handler handler = (Handler) it.next();
+			
+			if (retransmittablePhaseNames.contains(handler.getName())) {
+				retransmittablePhases.add(handler);
+				
+				it.remove();
+			}
+		}
+		
+		message.setProperty(Sandesha2Constants.RETRANSMITTABLE_PHASES, retransmittablePhases);
+	}
+	
+	private static ArrayList getRetransmittablePhaseNameList () {
+		
+		//TODO get this phase list from a property
+		
+		String security = "Security";
+		
+		ArrayList phases = new ArrayList ();
+		phases.add(security);
+		
+		return phases;
+	}
+	
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/SpecSpecificConstants.java Wed Oct  4 22:15:55 2006
@@ -314,5 +314,13 @@
 		return null;
 	}
 
+	public static String getFaultAction (String addressingNamespace) {
+		if (AddressingConstants.Final.WSA_NAMESPACE.equals(addressingNamespace))
+			return AddressingConstants.Final.WSA_FAULT_ACTION;
+		else if (AddressingConstants.Submission.WSA_NAMESPACE.equals(addressingNamespace))
+			return AddressingConstants.Submission.WSA_FAULT_ACTION;
+		
+		return null;
+	}
 
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/util/TerminateManager.java Wed Oct  4 22:15:55 2006
@@ -357,7 +357,7 @@
 	}
 
 	public static void addTerminateSequenceMessage(RMMsgContext referenceMessage, String outSequenceId,
-			String sequencePropertyKey, StorageManager storageManager) throws SandeshaException {
+			String sequencePropertyKey, StorageManager storageManager) throws AxisFault {
 
 		ConfigurationContext configurationContext = referenceMessage.getMessageContext().getConfigurationContext();
 
@@ -414,11 +414,7 @@
 			terminateRMMessage.setProperty(MessageContextConstants.TRANSPORT_URL, transportToBean.getValue());
 		}
 
-		try {
-			terminateRMMessage.addSOAPEnvelope();
-		} catch (AxisFault e) {
-			throw new SandeshaException(e.getMessage());
-		}
+		terminateRMMessage.addSOAPEnvelope();
 
 		String key = SandeshaUtil.getUUID();
 
@@ -458,20 +454,10 @@
 
 		seqPropMgr.insert(terminateAdded);
 
-		// This should be dumped to the storage by the sender
-		TransportOutDescription transportOut = terminateRMMessage.getMessageContext().getTransportOut();
-		terminateRMMessage.setProperty(Sandesha2Constants.ORIGINAL_TRANSPORT_OUT_DESC, transportOut);
-		terminateRMMessage.setProperty(Sandesha2Constants.MESSAGE_STORE_KEY, key);
 		terminateRMMessage.setProperty(Sandesha2Constants.SET_SEND_TO_TRUE, Sandesha2Constants.VALUE_TRUE);
-		terminateRMMessage.getMessageContext().setTransportOut(new Sandesha2TransportOutDesc());
+		
 		// / addTerminateSeqTransaction.commit();
-
-		AxisEngine engine = new AxisEngine(configurationContext);
-		try {
-			engine.send(terminateRMMessage.getMessageContext());
-		} catch (AxisFault e) {
-			throw new SandeshaException(e.getMessage());
-		}
+		SandeshaUtil.executeAndStore(terminateRMMessage, key);
 	}
 
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java?view=diff&rev=453108&r1=453107&r2=453108
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/workers/SenderWorker.java Wed Oct  4 22:15:55 2006
@@ -104,6 +104,7 @@
 			updateMessage(msgCtx);
 
 			int messageType = senderBean.getMessageType();
+			
 //			if (messageType == Sandesha2Constants.MessageTypes.APPLICATION) {
 //				Sequence sequence = (Sequence) rmMsgCtx.getMessagePart(Sandesha2Constants.MessageParts.SEQUENCE);
 //				String sequenceID = sequence.getIdentifier().getIdentifier();
@@ -119,59 +120,66 @@
 				// sequence.
 				// TODO do piggybacking based on wsa:To
 					
-					
-					
 				AcknowledgementManager.piggybackAcksIfPresent(rmMsgCtx, storageManager);
 			}
 
 			// sending the message
-			TransportOutDescription transportOutDescription = msgCtx.getTransportOut();
 			
 			//if a different TransportOutDesc hs already been set, it will be used instead
 			//of the one from te MessageContext.
 			
 			if (transportOut!=null)
-				transportOutDescription = transportOut;
+				msgCtx.setTransportOut(transportOut);
 			
-			TransportSender transportSender = transportOutDescription.getSender();
 
 			boolean successfullySent = false;
-			if (transportSender != null) {
-
-				// have to commit the transaction before sending. This may
-				// get changed when WS-AT is available.
-				transaction.commit();
-				msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION, Sandesha2Constants.VALUE_FALSE);
-				
-				try {
 
-					// had to fully build the SOAP envelope to support
-					// retransmissions.
-					// Otherwise a 'parserAlreadyAccessed' exception could
-					// get thrown in retransmissions.
-					// But this has a performance reduction.
-					msgCtx.getEnvelope().build();
-
-					if (log.isDebugEnabled())
-						log.debug("Invoking using transportSender " + transportSender + ", msgCtx="
-								+ msgCtx.getEnvelope().getHeader());
-					// TODO change this to cater for security.
-					transportSender.invoke(msgCtx);
-					successfullySent = true;
-				} catch (Exception e) {
-					// TODO Auto-generated catch block
-					String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.sendMsgError, e
-							.toString());
-					log.error (message, e);
-
-				} finally {
-					transaction = storageManager.getTransaction();
-					msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION, Sandesha2Constants.VALUE_TRUE);
+			// have to commit the transaction before sending. This may
+			// get changed when WS-AT is available.
+			transaction.commit();
+			msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,
+					Sandesha2Constants.VALUE_FALSE);
+
+			try {
+
+				// had to fully build the SOAP envelope to support
+				// retransmissions.
+				// Otherwise a 'parserAlreadyAccessed' exception could
+				// get thrown in retransmissions.
+				// But this has a performance reduction.
+				msgCtx.getEnvelope().build();
+
+				ArrayList retransmittablePhases = (ArrayList) msgCtx.getProperty(Sandesha2Constants.RETRANSMITTABLE_PHASES);
+				if (retransmittablePhases!=null) {
+					msgCtx.setExecutionChain(retransmittablePhases);
+				} else {
+					ArrayList emptyExecutionChain = new ArrayList ();
+					msgCtx.setExecutionChain(emptyExecutionChain);
 				}
+				
+				msgCtx.setCurrentHandlerIndex(0);
+				msgCtx.setCurrentPhaseIndex(0);
+				msgCtx.setPaused(false);
+			
+				AxisEngine engine = new AxisEngine (msgCtx.getConfigurationContext());
+				engine.resumeSend(msgCtx);
+				
+				successfullySent = true;
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				String message = SandeshaMessageHelper.getMessage(
+						SandeshaMessageKeys.sendMsgError, e.toString());
+				log.error(message, e);
+
+			} finally {
+				transaction = storageManager.getTransaction();
+				msgCtx.setProperty(Sandesha2Constants.WITHIN_TRANSACTION,
+						Sandesha2Constants.VALUE_TRUE);
 			}
 
 			// update or delete only if the object is still present.
-			SenderBean bean1 = senderBeanMgr.retrieve(senderBean.getMessageID());
+			SenderBean bean1 = senderBeanMgr
+					.retrieve(senderBean.getMessageID());
 			if (bean1 != null) {
 				if (senderBean.isReSend()) {
 					bean1.setSentCount(senderBean.getSentCount());



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