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

Reply via email to