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