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 ga...@apache.org on 2006/12/04 17:46:21 UTC

svn commit: r482241 - in /webservices/sandesha/trunk/java: src/org/apache/sandesha2/client/ src/org/apache/sandesha2/i18n/ src/org/apache/sandesha2/msgprocessors/ src/org/apache/sandesha2/wsrm/ test/src/org/apache/sandesha2/

Author: gatfora
Date: Mon Dec  4 08:46:20 2006
New Revision: 482241

URL: http://svn.apache.org/viewvc?view=rev&rev=482241
Log:
Applying ack request storing patch for SANDESHA2-58

Modified:
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
    webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java
    webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java?view=diff&rev=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/client/SandeshaClient.java Mon Dec  4 08:46:20 2006
@@ -19,6 +19,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.MissingResourceException;
 
 import javax.xml.namespace.QName;
 
@@ -659,44 +660,61 @@
 		String sequenceID = sequenceIDBean.getValue();
 		return sequenceID;
 	}
-
-	public static void sendAckRequest(ServiceClient serviceClient) throws SandeshaException {
-
-		setUpServiceClientAnonymousOperations (serviceClient);
-		
-		Options options = serviceClient.getOptions();
+	
+	private static SOAPEnvelope configureAckRequest(Options options, ConfigurationContext configurationContext) 
+	
+	throws SandeshaException, MissingResourceException {
 		if (options == null)
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(
 					SandeshaMessageKeys.optionsObjectNotSet));
 
-		ServiceContext serviceContext = serviceClient.getServiceContext();
-		if (serviceContext == null)
+		EndpointReference epr = options.getTo();
+		if (epr == null)
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.serviceContextNotSet));
+					SandeshaMessageKeys.toEPRNotValid, null));
 
-		ConfigurationContext configContext = serviceContext.getConfigurationContext();
+		//first see if the cliet has told us which sequence to terminate
+		String internalSequenceID = 
+			(String)options.getProperty(SandeshaClientConstants.INTERNAL_SEQUENCE_ID);
+		
+		if(internalSequenceID==null){
+			//lookup the internal seq id based on to EPR and sequenceKey
+			String to = epr.getAddress();
+			String sequenceKey = (String) options.getProperty(SandeshaClientConstants.SEQUENCE_KEY);
+			internalSequenceID = SandeshaUtil.getInternalSequenceID(to, sequenceKey);
+		}
+		
+		StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext,configurationContext.getAxisConfiguration());
 
+		// Get a transaction to obtain sequence information
+		Transaction transaction = storageManager.getTransaction();
+		
+		SequencePropertyBean sequenceIDBean = null;
+		
+		try
+		{
+			SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
+			sequenceIDBean = seqPropMgr.retrieve(internalSequenceID,
+					Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID);
+		}
+		finally
+		{
+			transaction.commit();
+		}
+		
+		String sequenceID = null;
+		
+		if (sequenceIDBean != null)
+			sequenceID = sequenceIDBean.getValue();
+		else
+			sequenceID = Sandesha2Constants.TEMP_SEQUENCE_ID;	
+		
 		String rmSpecVersion = (String) options.getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
 		if (rmSpecVersion == null)
-			rmSpecVersion = Sandesha2Constants.SPEC_VERSIONS.v1_0;
-
-		if (Sandesha2Constants.SPEC_VERSIONS.v1_0.equals(rmSpecVersion)) {
-			throw new SandeshaException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.emptyAckRequestSpecLevel, rmSpecVersion));
-		}
-
-		String internalSequenceID = getInternalSequenceIdFromServiceClient(serviceClient);
-
-		SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(internalSequenceID, configContext);
-		if (sequenceReport == null)
-			throw new SandeshaException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.cannotGenerateReport, internalSequenceID));
-		if (sequenceReport.getSequenceStatus() != SequenceReport.SEQUENCE_STATUS_ESTABLISHED)
-			throw new SandeshaException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.cannotSendAckRequestNotActive, internalSequenceID));
-
-		String outSequenceID = getSequenceID(serviceClient);
+			rmSpecVersion = SpecSpecificConstants.getDefaultSpecVersion();
 
+		options.setAction(SpecSpecificConstants.getAckRequestAction(rmSpecVersion));
+		
 		String soapNamespaceURI = options.getSoapVersionURI();
 		SOAPFactory factory = null;
 		SOAPEnvelope dummyEnvelope = null;
@@ -712,17 +730,47 @@
 
 		AckRequested ackRequested = new AckRequested(rmNamespaceValue);
 		Identifier identifier = new Identifier(rmNamespaceValue);
-		identifier.setIndentifer(outSequenceID);
+		identifier.setIndentifer(sequenceID);
 		ackRequested.setIdentifier(identifier);
 
 		ackRequested.toSOAPEnvelope(dummyEnvelope);
 
+		return dummyEnvelope;
+	}
+
+	public static void sendAckRequest(ServiceClient serviceClient) throws SandeshaException {
+
+		setUpServiceClientAnonymousOperations (serviceClient);
+		
+		Options options = serviceClient.getOptions();
+		if (options == null)
+			throw new SandeshaException(SandeshaMessageHelper.getMessage(
+					SandeshaMessageKeys.optionsObjectNotSet));
+
+		ServiceContext serviceContext = serviceClient.getServiceContext();
+		if (serviceContext == null)
+			throw new SandeshaException(SandeshaMessageHelper.getMessage(
+					SandeshaMessageKeys.serviceContextNotSet));
+
+		ConfigurationContext configContext = serviceContext.getConfigurationContext();
+
+		String rmSpecVersion = (String) options.getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
+		if (rmSpecVersion == null)
+			rmSpecVersion = Sandesha2Constants.SPEC_VERSIONS.v1_0;
+
+		if (Sandesha2Constants.SPEC_VERSIONS.v1_0.equals(rmSpecVersion)) {
+			throw new SandeshaException(SandeshaMessageHelper.getMessage(
+					SandeshaMessageKeys.emptyAckRequestSpecLevel, rmSpecVersion));
+		}
+		
+		String rmNamespaceValue = SpecSpecificConstants.getRMNamespaceValue(rmSpecVersion);
+
+		SOAPEnvelope dummyEnvelope = configureAckRequest(options, configContext);
+		
 		OMElement ackRequestedHeaderBlock = dummyEnvelope.getHeader().getFirstChildWithName(
 				new QName(rmNamespaceValue, Sandesha2Constants.WSRM_COMMON.ACK_REQUESTED));
 
 		String oldAction = options.getAction();
-
-		options.setAction(SpecSpecificConstants.getAckRequestAction(rmSpecVersion));
 
 		serviceClient.addHeader(ackRequestedHeaderBlock);
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java?view=diff&rev=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/SandeshaMessageKeys.java Mon Dec  4 08:46:20 2006
@@ -102,6 +102,8 @@
 	public static final String couldNotSendFault="couldNotSendFault";
 	public static final String cannotSendAckRequestNotActive="cannotSendAckRequestNotActive";
 	public static final String cannotSendAckRequestException="cannotSendAckRequestException";
+	public static final String ackRequestMultipleParts="ackRequestMultipleParts";
+	public static final String noAckRequestPartFound="noAckRequestPartFound";
 	public static final String cannotCloseSequenceNotActive="cannotCloseSequenceNotActive";
 	public static final String noSequenceEstablished="noSequenceEstablished";
 	public static final String invalidInternalSequenceID="invalidInternalSequenceID";
@@ -245,21 +247,21 @@
 	public static final String replyToBeanNotSet = "replyToBeanNotSet";
 	    
     
-    public final static String errorRetrievingSecurityToken = "errorRetrievingSecurityToken";
+	public final static String errorRetrievingSecurityToken = "errorRetrievingSecurityToken";
 	public final static String proofOfPossessionNotVerified = "proofOfPossessionNotVerified";
-    public final static String noSecurityResults = "noSecurityResults";
-    public final static String noSecConvTokenInPolicy = "noSecConvTokenInPolicy";
-    public final static String noServicePolicy = "noServicePolicy";
-    
-    public final static String elementMustForSpec = "elementMustForSpec";
-    public final static String addressingNamespaceNotSet = "addressingNamespaceNotSet";
-    public final static String couldNotSendCreateSeqResponse = "couldNotSendCreateSeqResponse";
-    public final static String invalidOfferNoResponseEndpoint = "invalidOfferNoResponseEndpoint";
-    public final static String invalidElementFoundWithinElement = "invalidElementFoundWithinElement";
-    public final static String invokerNotFound="invokerNotFound";
-    
-    public final static String couldNotSendAckRequestSeqNotFound="couldNotSendAckRequestSeqNotFound";
-    public final static String couldNotSendCloseResponse="couldNotSendCloseResponse";
-    public final static String couldNotSendCloseSeqNotFound="couldNotSendCloseSeqNotFound";
+	public final static String noSecurityResults = "noSecurityResults";
+	public final static String noSecConvTokenInPolicy = "noSecConvTokenInPolicy";
+	public final static String noServicePolicy = "noServicePolicy";
+	    
+	public final static String elementMustForSpec = "elementMustForSpec";
+	public final static String addressingNamespaceNotSet = "addressingNamespaceNotSet";
+	public final static String couldNotSendCreateSeqResponse = "couldNotSendCreateSeqResponse";
+	public final static String invalidOfferNoResponseEndpoint = "invalidOfferNoResponseEndpoint";
+	public final static String invalidElementFoundWithinElement = "invalidElementFoundWithinElement";
+	public final static String invokerNotFound="invokerNotFound";
+	    
+	public final static String couldNotSendAckRequestSeqNotFound="couldNotSendAckRequestSeqNotFound";
+	public final static String couldNotSendCloseResponse="couldNotSendCloseResponse";
+	public final static String couldNotSendCloseSeqNotFound="couldNotSendCloseSeqNotFound";
     
 }

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties?view=diff&rev=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/i18n/resource.properties Mon Dec  4 08:46:20 2006
@@ -127,6 +127,8 @@
 couldNotSendFault=Could not send the fault message due to an exception: {0}
 cannotSendAckRequestNotActive=Cannot send the ackRequest message since the sequence with internal ID {0} is not active.
 cannotSendAckRequestException=Could not send the ackRequest message on sequence {0} due to an exception: {1}
+ackRequestMultipleParts=Passed message has more than one AckRequest. You can have only one.
+noAckRequestPartFound=No AckRequested part was present in the message.
 cannotCloseSequenceNotActive=Cannot close the sequence with internal ID {0} since it is not active.
 noSequenceEstablished=A sequence with the given sequence ID {0} has not been established, has been terminated or could not be found.
 invalidInternalSequenceID=Sandesha2 Internal Error: The internal sequence ID {0} is not valid.

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=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/AckRequestedProcessor.java Mon Dec  4 08:46:20 2006
@@ -33,7 +33,6 @@
 import org.apache.axis2.client.Options;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.context.MessageContext;
-import org.apache.axis2.context.MessageContextConstants;
 import org.apache.axis2.context.OperationContext;
 import org.apache.axis2.description.AxisOperation;
 import org.apache.axis2.engine.AxisEngine;
@@ -51,6 +50,7 @@
 import org.apache.sandesha2.storage.StorageManager;
 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.MsgInitializer;
@@ -309,15 +309,36 @@
 
 		String toAddress = ackRequestRMMsg.getTo().getAddress();
 		String sequenceKey = (String) options.getProperty(SandeshaClientConstants.SEQUENCE_KEY);
-		String internalSeqenceID = SandeshaUtil.getInternalSequenceID(toAddress, sequenceKey);
+		String internalSequenceID = SandeshaUtil.getInternalSequenceID(toAddress, sequenceKey);
 
-		String outSequenceID = SandeshaUtil.getSequenceProperty(internalSeqenceID,
-				Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID, storageManager);
-		if (outSequenceID == null)
+		// Does the sequence exist ?
+		boolean sequenceExists = false;
+		String outSequenceID = null;
+		
+		// Get the Create sequence bean with the matching internal sequenceid 
+		CreateSeqBean createSeqFindBean = new CreateSeqBean();
+		createSeqFindBean.setInternalSequenceID(internalSequenceID);
+
+		CreateSeqBean createSeqBean = storageManager.getCreateSeqBeanMgr().findUnique(createSeqFindBean);
+		
+		if (createSeqBean == null)
+		{
+			if (log.isDebugEnabled())
+				log.debug("Exit: AckRequestedProcessor::processOutMessage Sequence doesn't exist");
+			
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(
-					SandeshaMessageKeys.couldNotSendAckRequestSeqNotFound, internalSeqenceID));
+					SandeshaMessageKeys.couldNotSendCloseSeqNotFound, internalSequenceID));			
+		}
+		
+		if (createSeqBean.getSequenceID() != null)
+		{
+			sequenceExists = true;		
+			outSequenceID = createSeqBean.getSequenceID();
+		}
+		else
+			outSequenceID = Sandesha2Constants.TEMP_SEQUENCE_ID;			
 
-		String rmVersion = SandeshaUtil.getRMVersion(internalSeqenceID, storageManager);
+		String rmVersion = SandeshaUtil.getRMVersion(internalSequenceID, storageManager);
 		if (rmVersion == null)
 			throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotDecideRMVersion));
 
@@ -340,38 +361,35 @@
 		}
 		
 		if (iterator.hasNext()) {
-			String message = "Passed message has more than one AckRequest. You can have only one";
-			throw new SandeshaException (message);
+			throw new SandeshaException (SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackRequestMultipleParts));
 		}
 		
 		if (ackRequested==null) {
-			String message = "No AckRequested part was present in the message";
-			throw new SandeshaException (message);
+			throw new SandeshaException (SandeshaMessageHelper.getMessage(SandeshaMessageKeys.noAckRequestPartFound));
 		}
 		
 		ackRequested.getIdentifier().setIndentifer(outSequenceID);
 		
 		msgContext.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE, "true");
 
-
 		ackRequestRMMsg.setWSAAction(SpecSpecificConstants.getAckRequestAction (rmVersion));
 		ackRequestRMMsg.setSOAPAction(SpecSpecificConstants.getAckRequestSOAPAction (rmVersion));
 
-		String transportTo = SandeshaUtil.getSequenceProperty(internalSeqenceID,
+		String transportTo = SandeshaUtil.getSequenceProperty(internalSequenceID,
 				Sandesha2Constants.SequenceProperties.TRANSPORT_TO, storageManager);
 		if (transportTo != null) {
-			ackRequestRMMsg.setProperty(MessageContextConstants.TRANSPORT_URL, transportTo);
+			ackRequestRMMsg.setProperty(Constants.Configuration.TRANSPORT_URL, transportTo);
 		}
 		
 		//setting msg context properties
 		ackRequestRMMsg.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID, outSequenceID);
-		ackRequestRMMsg.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID, internalSeqenceID);
+		ackRequestRMMsg.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID, internalSequenceID);
 		ackRequestRMMsg.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_PROPERTY_KEY , sequenceKey);
 
 		ackRequestRMMsg.addSOAPEnvelope();
 		
 		// Ensure the outbound message us secured using the correct token
-		String tokenData = SandeshaUtil.getSequenceProperty(internalSeqenceID,
+		String tokenData = SandeshaUtil.getSequenceProperty(internalSequenceID,
 				Sandesha2Constants.SequenceProperties.SECURITY_TOKEN,
 				storageManager);
 		if(tokenData != null) {
@@ -383,12 +401,9 @@
 		String key = SandeshaUtil.getUUID();
 
 		SenderBean ackRequestBean = new SenderBean();
+		ackRequestBean.setMessageType(Sandesha2Constants.MessageTypes.ACK_REQUEST);
 		ackRequestBean.setMessageContextRefKey(key);
 
-		// Set a retransmitter lastSentTime so that terminate will be send with
-		// some delay.
-		// Otherwise this get send before return of the current request (ack).
-		// TODO: refine the terminate delay.
 		ackRequestBean.setTimeToSend(System.currentTimeMillis());
 
 		ackRequestBean.setMessageID(msgContext.getMessageID());
@@ -398,7 +413,10 @@
 			ackRequestBean.setToAddress(to.getAddress());
 		
 		// this will be set to true at the sender.
-		ackRequestBean.setSend(true);
+		if (sequenceExists)
+		  ackRequestBean.setSend(true);
+		else
+			ackRequestBean.setSend(false);
 
 		msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
 
@@ -407,8 +425,9 @@
 		SenderBeanMgr retramsmitterMgr = storageManager.getRetransmitterBeanMgr();
 
 		// Set the sequence id and internal sequence id in the SenderBean
-		ackRequestBean.setInternalSequenceID(internalSeqenceID);
-		ackRequestBean.setSequenceID(outSequenceID);
+		ackRequestBean.setInternalSequenceID(internalSequenceID);
+		if (sequenceExists)
+			ackRequestBean.setSequenceID(outSequenceID);
 		
 		SandeshaUtil.executeAndStore(ackRequestRMMsg, key);
 

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java?view=diff&rev=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.java Mon Dec  4 08:46:20 2006
@@ -50,6 +50,7 @@
 import org.apache.sandesha2.util.SequenceManager;
 import org.apache.sandesha2.util.SpecSpecificConstants;
 import org.apache.sandesha2.wsrm.Accept;
+import org.apache.sandesha2.wsrm.AckRequested;
 import org.apache.sandesha2.wsrm.CloseSequence;
 import org.apache.sandesha2.wsrm.CreateSequenceResponse;
 import org.apache.sandesha2.wsrm.Identifier;
@@ -336,6 +337,28 @@
 				identifier.setIndentifer(newOutSequenceId);
 	
 				sequencePart.setIdentifier(identifier);
+				
+			} else if (tempBean.getMessageType() == Sandesha2Constants.MessageTypes.ACK_REQUEST) {
+
+				Iterator headerIterator = applicaionRMMsg.getMessageParts(Sandesha2Constants.MessageParts.ACK_REQUEST);
+								
+				AckRequested sequencePart = null;
+				while (headerIterator.hasNext()) {
+					sequencePart = (AckRequested) headerIterator.next(); 
+				}
+				
+				if (headerIterator.hasNext()) {
+					throw new SandeshaException (SandeshaMessageHelper.getMessage(SandeshaMessageKeys.ackRequestMultipleParts));
+				}
+				
+				if (sequencePart == null) {
+					String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.seqPartIsNull);
+					log.debug(message);
+					throw new SandeshaException(message);
+				}
+				
+				sequencePart.getIdentifier().setIndentifer(newOutSequenceId);
+					
 			}
 
 			try {

Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java?view=diff&rev=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/wsrm/AckRequested.java Mon Dec  4 08:46:20 2006
@@ -91,7 +91,8 @@
 			if (identifierElement!=null)
 				identifierVal = identifierElement.getText();
 			
-			if (identifierVal!=null && identifierVal.equals(identifier.getIdentifier()))
+			if (identifierVal!=null && 
+					(identifierVal.equals(identifier.getIdentifier()) || identifierVal.equals(Sandesha2Constants.TEMP_SEQUENCE_ID)))
 				ackRequestedElement.detach();
 			
 		}

Modified: webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java?view=diff&rev=482241&r1=482240&r2=482241
==============================================================================
--- webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java (original)
+++ webservices/sandesha/trunk/java/test/src/org/apache/sandesha2/SandeshaClientTest.java Mon Dec  4 08:46:20 2006
@@ -213,6 +213,88 @@
 //		
 //	}
 //
+
+    /**
+		 * Checks the following scenario
+		 * 
+		 * Don't start the server
+		 * 1) send an application message (will generate the create sequence)
+		 * 2) Send ACK Request (should not be rejected)
+		 * 3) start the server
+		 * 4) wait a bit then terminate sequence
+		 * 5) Issue wait until sequence completed (with a wait time)
+		 * 6) Ensure that the sequence was terminated
+		 * 
+		 */
+		public void testAckRequestWithWait () throws Exception {
+			String to = "http://127.0.0.1:" + serverPort + "/axis2/services/RMSampleService";
+			
+			String repoPath = "target" + File.separator + "repos" + File.separator + "client";
+			String axis2_xml = "target" + File.separator + "repos" + File.separator + "client" + File.separator + "client_axis2.xml";
+			
+			ConfigurationContext configContext = ConfigurationContextFactory.createConfigurationContextFromFileSystem(repoPath,axis2_xml);
+			
+			Options clientOptions = new Options ();
+			clientOptions.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+		   clientOptions.setProperty(SandeshaClientConstants.RM_SPEC_VERSION, 
+		       Sandesha2Constants.SPEC_VERSIONS.v1_1);
+			clientOptions.setTo(new EndpointReference (to));
+			
+			ServiceClient serviceClient = new ServiceClient (configContext,null);
+			
+			String acksTo = serviceClient.getMyEPR(Constants.TRANSPORT_HTTP).getAddress();
+			clientOptions.setProperty(SandeshaClientConstants.AcksTo,acksTo);
+			clientOptions.setTransportInProtocol(Constants.TRANSPORT_HTTP);
+				//serviceClient.
+			serviceClient.setOptions(clientOptions);
+				
+			try{
+				// 1) Send the application message
+				serviceClient.fireAndForget(getPingOMBlock("ping1"));
+				
+				// 2) Send Ack request for the sequence
+				SandeshaClient.sendAckRequest(serviceClient);
+								
+				// 3) Start the server			
+				startServer(server_repoPath, server_axis2_xml);
+
+				// 4) Wait a bit then terminate
+				long limit = System.currentTimeMillis() + waitTime;
+				Error lastError = null;
+				while(System.currentTimeMillis() < limit) {
+					Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+					
+					try {
+						//now check the sequence is running
+						SequenceReport report = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+						assertEquals(report.getSequenceStatus(), SequenceReport.SEQUENCE_STATUS_ESTABLISHED);
+
+						lastError = null;
+						break;
+					} catch(Error e) {
+						lastError = e;
+					}
+				}
+				if(lastError != null) throw lastError;
+				
+				SandeshaClient.terminateSequence(serviceClient);
+				
+				// 5) wait for the sequence completion (30 second wait)
+				SandeshaClient.waitUntilSequenceCompleted(serviceClient, 30000);
+				
+				// 6) Check that the sequence has terminated
+				SequenceReport report = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+				assertNotNull(report);
+				assertEquals(SequenceReport.SEQUENCE_STATUS_TERMINATED, report.getSequenceStatus());
+
+			}
+			finally {
+				configContext.getListenerManager().stop();
+				serviceClient.cleanup();			
+			}
+			
+		}
+
 		/**
 		 * Checks the following scenario
 		 * 
@@ -268,7 +350,23 @@
 				startServer(server_repoPath, server_axis2_xml);
 
 				// 5) Wait a bit then terminate
-				Thread.sleep(10000);
+				long limit = System.currentTimeMillis() + waitTime;
+				Error lastError = null;
+				while(System.currentTimeMillis() < limit) {
+					Thread.sleep(tickTime); // Try the assertions each tick interval, until they pass or we time out
+					
+					try {
+						//now check the sequence is running
+						SequenceReport report = SandeshaClient.getOutgoingSequenceReport(serviceClient);
+						assertEquals(report.getSequenceStatus(), SequenceReport.SEQUENCE_STATUS_ESTABLISHED);
+
+						lastError = null;
+						break;
+					} catch(Error e) {
+						lastError = e;
+					}
+				}
+				if(lastError != null) throw lastError;
 				SandeshaClient.terminateSequence(serviceClient);
 				
 				// 6) wait for the sequence completion (30 second wait)
@@ -287,7 +385,7 @@
 			
 		}
 
-	/**
+  /**
 	 * Checks the following scenario
 	 * 
 	 * Don't start the server



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