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