You are viewing a plain text version of this content. The canonical link for it is here.
Posted to sandesha-dev@ws.apache.org by ga...@apache.org on 2006/12/04 12:53:04 UTC
svn commit: r482147 - in /webservices/sandesha/trunk/java:
src/org/apache/sandesha2/client/ src/org/apache/sandesha2/msgprocessors/
test/src/org/apache/sandesha2/
Author: gatfora
Date: Mon Dec 4 03:52:59 2006
New Revision: 482147
URL: http://svn.apache.org/viewvc?view=rev&rev=482147
Log:
Applying close 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/msgprocessors/CloseSequenceProcessor.java
webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CreateSeqResponseMsgProcessor.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=482147&r1=482146&r2=482147
==============================================================================
--- 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 03:52:59 2006
@@ -832,15 +832,6 @@
internalSequenceID = SandeshaUtil.getInternalSequenceID(to, sequenceKey);
}
- SequenceReport sequenceReport = SandeshaClient.getOutgoingSequenceReport(internalSequenceID,
- configurationContext);
- if (sequenceReport == null)
- throw new SandeshaException(SandeshaMessageHelper.getMessage(
- SandeshaMessageKeys.cannotGenerateReport, internalSequenceID));
- if (sequenceReport.getSequenceStatus() != SequenceReport.SEQUENCE_STATUS_ESTABLISHED)
- throw new SandeshaException(SandeshaMessageHelper.getMessage(
- SandeshaMessageKeys.cannotCloseSequenceNotActive, internalSequenceID));
-
StorageManager storageManager = SandeshaUtil.getSandeshaStorageManager(configurationContext,configurationContext.getAxisConfiguration());
// Get a transaction for getting the sequence properties
@@ -853,20 +844,18 @@
SequencePropertyBeanMgr seqPropMgr = storageManager.getSequencePropertyBeanMgr();
sequenceIDBean = seqPropMgr.retrieve(internalSequenceID,
Sandesha2Constants.SequenceProperties.OUT_SEQUENCE_ID);
- if (sequenceIDBean == null)
- throw new SandeshaException(SandeshaMessageHelper.getMessage(
- SandeshaMessageKeys.sequenceIdBeanNotSet));
}
finally
{
transaction.commit();
}
- String sequenceID = sequenceIDBean.getValue();
+ String sequenceID = null;
- if (sequenceID == null)
- throw new SandeshaException(SandeshaMessageHelper.getMessage(
- SandeshaMessageKeys.cannotFindSequenceID, sequenceIDBean.toString()));
+ if (sequenceIDBean != null)
+ sequenceID = sequenceIDBean.getValue();
+ else
+ sequenceID = Sandesha2Constants.TEMP_SEQUENCE_ID;
String rmSpecVersion = (String) options.getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
@@ -1158,10 +1147,11 @@
}
String sequenceID = null;
+
if (sequenceIDBean != null)
- sequenceID = sequenceIDBean.getValue();
+ sequenceID = sequenceIDBean.getValue();
else
- sequenceID = Sandesha2Constants.TEMP_SEQUENCE_ID;
+ sequenceID = Sandesha2Constants.TEMP_SEQUENCE_ID;
String rmSpecVersion = (String) options.getProperty(SandeshaClientConstants.RM_SPEC_VERSION);
if (rmSpecVersion == null)
Modified: webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java
URL: http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java?view=diff&rev=482147&r1=482146&r2=482147
==============================================================================
--- webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java (original)
+++ webservices/sandesha/trunk/java/src/org/apache/sandesha2/msgprocessors/CloseSequenceProcessor.java Mon Dec 4 03:52:59 2006
@@ -23,11 +23,11 @@
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axis2.AxisFault;
+import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
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;
@@ -45,6 +45,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.AcknowledgementManager;
@@ -170,9 +171,8 @@
}
public boolean processOutMessage(RMMsgContext rmMsgCtx) throws AxisFault {
- if (log.isDebugEnabled()) {
+ if (log.isDebugEnabled())
log.debug("Enter: CloseSequenceProcessor::processOutMessage");
- }
MessageContext msgContext = rmMsgCtx.getMessageContext();
ConfigurationContext configurationContext = msgContext.getConfigurationContext();
@@ -183,17 +183,38 @@
String toAddress = rmMsgCtx.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: CloseSequenceProcessor::processOutMessage Sequence doesn't exist");
+
throw new SandeshaException(SandeshaMessageHelper.getMessage(
- SandeshaMessageKeys.couldNotSendCloseSeqNotFound, internalSeqenceID));
+ SandeshaMessageKeys.couldNotSendCloseSeqNotFound, internalSequenceID));
+ }
+
+ if (createSeqBean.getSequenceID() != null)
+ {
+ sequenceExists = true;
+ outSequenceID = createSeqBean.getSequenceID();
+ }
+ else
+ outSequenceID = Sandesha2Constants.TEMP_SEQUENCE_ID;
//write into the sequence proeprties that the client is now closed
SequencePropertyBean sequenceClosedBean = new SequencePropertyBean();
- sequenceClosedBean.setSequencePropertyKey(internalSeqenceID);
+ sequenceClosedBean.setSequencePropertyKey(internalSequenceID);
sequenceClosedBean.setName(Sandesha2Constants.SequenceProperties.SEQUENCE_CLOSED_CLIENT);
sequenceClosedBean.setValue(Sandesha2Constants.VALUE_TRUE);
storageManager.getSequencePropertyBeanMgr().insert(sequenceClosedBean);
@@ -221,28 +242,28 @@
msgContext.setProperty(Sandesha2Constants.APPLICATION_PROCESSING_DONE, "true");
- String rmVersion = SandeshaUtil.getRMVersion(internalSeqenceID, storageManager);
+ String rmVersion = SandeshaUtil.getRMVersion(internalSequenceID, storageManager);
if (rmVersion == null)
throw new SandeshaException(SandeshaMessageHelper.getMessage(SandeshaMessageKeys.cannotDecideRMVersion));
rmMsgCtx.setWSAAction(SpecSpecificConstants.getCloseSequenceAction(rmVersion));
rmMsgCtx.setSOAPAction(SpecSpecificConstants.getCloseSequenceAction (rmVersion));
- String transportTo = SandeshaUtil.getSequenceProperty(internalSeqenceID,
+ String transportTo = SandeshaUtil.getSequenceProperty(internalSequenceID,
Sandesha2Constants.SequenceProperties.TRANSPORT_TO, storageManager);
if (transportTo != null) {
- rmMsgCtx.setProperty(MessageContextConstants.TRANSPORT_URL, transportTo);
+ rmMsgCtx.setProperty(Constants.Configuration.TRANSPORT_URL, transportTo);
}
//setting msg context properties
rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_ID, outSequenceID);
- rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID, internalSeqenceID);
+ rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.INTERNAL_SEQUENCE_ID, internalSequenceID);
rmMsgCtx.setProperty(Sandesha2Constants.MessageContextProperties.SEQUENCE_PROPERTY_KEY , sequenceKey);
rmMsgCtx.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) {
@@ -254,6 +275,8 @@
String key = SandeshaUtil.getUUID();
SenderBean closeBean = new SenderBean();
+ // Indicate that this is a close sequence message
+ closeBean.setMessageType(Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE);
closeBean.setMessageContextRefKey(key);
closeBean.setTimeToSend(System.currentTimeMillis());
@@ -265,7 +288,10 @@
closeBean.setToAddress(to.getAddress());
// this will be set to true at the sender.
- closeBean.setSend(true);
+ if (sequenceExists)
+ closeBean.setSend(true);
+ else
+ closeBean.setSend(false);
msgContext.setProperty(Sandesha2Constants.QUALIFIED_FOR_SENDING, Sandesha2Constants.VALUE_FALSE);
@@ -274,8 +300,10 @@
SenderBeanMgr retramsmitterMgr = storageManager.getRetransmitterBeanMgr();
// Add the sequence id and internal sequenceid to the closeBean
- closeBean.setSequenceID(outSequenceID);
- closeBean.setInternalSequenceID(internalSeqenceID);
+ if (sequenceExists)
+ closeBean.setSequenceID(outSequenceID);
+
+ closeBean.setInternalSequenceID(internalSequenceID);
SandeshaUtil.executeAndStore(rmMsgCtx, 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=482147&r1=482146&r2=482147
==============================================================================
--- 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 03:52:59 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.CloseSequence;
import org.apache.sandesha2.wsrm.CreateSequenceResponse;
import org.apache.sandesha2.wsrm.Identifier;
import org.apache.sandesha2.wsrm.Sequence;
@@ -311,6 +312,20 @@
} else if (tempBean.getMessageType() == Sandesha2Constants.MessageTypes.TERMINATE_SEQ) {
TerminateSequence sequencePart = (TerminateSequence) applicaionRMMsg.getMessagePart(Sandesha2Constants.MessageParts.TERMINATE_SEQ);
+ if (sequencePart == null) {
+ String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.seqPartIsNull);
+ log.debug(message);
+ throw new SandeshaException(message);
+ }
+
+ Identifier identifier = new Identifier(assumedRMNamespace);
+ identifier.setIndentifer(newOutSequenceId);
+
+ sequencePart.setIdentifier(identifier);
+
+ } else if (tempBean.getMessageType() == Sandesha2Constants.MessageTypes.CLOSE_SEQUENCE) {
+
+ CloseSequence sequencePart = (CloseSequence) applicaionRMMsg.getMessagePart(Sandesha2Constants.MessageParts.CLOSE_SEQUENCE);
if (sequencePart == null) {
String message = SandeshaMessageHelper.getMessage(SandeshaMessageKeys.seqPartIsNull);
log.debug(message);
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=482147&r1=482146&r2=482147
==============================================================================
--- 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 03:52:59 2006
@@ -213,6 +213,80 @@
//
// }
//
+ /**
+ * Checks the following scenario
+ *
+ * Don't start the server
+ * 1) send an application message (will generate the create sequence)
+ * 2) close the sequence
+ * 3) send another application message (this should fail)
+ * 4) start the server
+ * 5) wait a bit then terminate sequence
+ * 6) Issue wait until sequence completed (with a wait time)
+ * 7) Ensure that the sequence was terminated
+ *
+ */
+ public void testCloseSequenceWithWait () 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) Close the sequence
+ SandeshaClient.closeSequence(serviceClient);
+
+ // 3) Send the second application message (this should fail)
+ try{
+ serviceClient.fireAndForget(getPingOMBlock("ping2"));
+ fail(); //this should have failed
+ }
+ catch(Exception e){
+ //good
+ }
+
+ // 4) Start the server
+ startServer(server_repoPath, server_axis2_xml);
+
+ // 5) Wait a bit then terminate
+ Thread.sleep(10000);
+ SandeshaClient.terminateSequence(serviceClient);
+
+ // 6) wait for the sequence completion (30 second wait)
+ SandeshaClient.waitUntilSequenceCompleted(serviceClient, 30000);
+
+ // 7) 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
*
---------------------------------------------------------------------
To unsubscribe, e-mail: sandesha-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: sandesha-dev-help@ws.apache.org