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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to