Author: gatfora
Date: Wed Jul 18 05:38:00 2007
New Revision: 557242

URL: http://svn.apache.org/viewvc?view=rev&rev=557242
Log:
Updates to the architecture guide to match current code base, such as removing 
SequencePropertyBeanMgr and CreateSeqBean references

Modified:
    webservices/sandesha/trunk/java/xdocs/architectureGuide.html
    webservices/sandesha/trunk/java/xdocs/images/storage.jpg

Modified: webservices/sandesha/trunk/java/xdocs/architectureGuide.html
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/xdocs/architectureGuide.html?view=diff&rev=557242&r1=557241&r2=557242
==============================================================================
--- webservices/sandesha/trunk/java/xdocs/architectureGuide.html (original)
+++ webservices/sandesha/trunk/java/xdocs/architectureGuide.html Wed Jul 18 
05:38:00 2007
@@ -3,86 +3,88 @@
        "http://www.w3.org/TR/html4/loose.dtd";>
 <html>
 <head>
-  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
-  <title>Sandesha2 Architecture guide</title>
-  <meta name="generator" content="amaya 9.2.1, see http://www.w3.org/Amaya/";
-  />
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+<title>Sandesha2 Architecture guide</title>
+<meta name="generator"
+       content="amaya 9.2.1, see http://www.w3.org/Amaya/"; />
 </head>
 
-<body xml:lang="en" lang="en">
+<body lang="en">
 <h1>Apache Sandesha2 Architecture Guide</h1>
 
 <h2>Content</h2>
 <ul>
-  <li><a href="#intro">Introduction</a></li>
-  <li><a href="#architecture">Architecture</a></li>
-  <ul>
-      <li><a href="#hnd">Handlers</a>
-        <ul>
-          <li><a href="#in">SandeshaInHandler</a></li>
-          <li><a href="#out">SandeshaOutHandler</a></li>
-          <li><a href="#globalin">SandeshaGlobalInHandler</a></li>
-        </ul>
-      </li>
-      <li><a href="#sender">Sender</a></li>
-      <li><a href="#mp">Message Processors</a></li>
-      <li><a href="#ioi">InOrderInvoker</a></li>
-      <li><a href="#sf">Storage Framework</a></li>
-    </ul>
-  <li><a href="#da">Delivery Assurances</a></li>
-  <li><a href="#es">Example Scenarios</a>
-    <ul>
-      <li><a href="#cs">Client Side</a></li>
-      <li><a href="#ss">Server Side</a></li>
-    </ul>
-  </li>
+       <li><a href="#intro">Introduction</a></li>
+       <li><a href="#architecture">Architecture</a>
+       <ul>
+               <li><a href="#hnd">Handlers</a>
+               <ul>
+                       <li><a href="#globalin">SandeshaGlobalInHandler</a></li>
+                       <li><a href="#in">SandeshaInHandler</a></li>
+                       <li><a href="#out">SandeshaOutHandler</a></li>
+               </ul>
+               </li>
+               <li><a href="#rmm">RMMessageReceiver</a></li>
+               <li><a href="#sender">Sender</a></li>
+               <li><a href="#ioi">Inorder Invoker</a></li>
+               <li>Polling Manager</li>
+               <li><a href="#sf">Storage Framework</a></li>
+       </ul>
+       </li>
+       <li><a href="#da">Delivery Assurances</a></li>
+       <li><a href="#es">Example Scenarios</a>
+       <ul>
+               <li><a href="#cs">Client Side</a></li>
+               <li><a href="#ss">Server Side</a></li>
+       </ul>
+       </li>
 </ul>
 <a name="intro"></a>
 
 <h2>Introduction</h2>
 
-<p>Sandesha2 gives reliable messaging capabilities to Axis2. From the point
-of view of the Axis2 engine, Sandesha2 is a module. When this module is
-engaged to a service, clients have the option of invoking it in a reliable
-manner. In the client side Sandesha2 module can be used to interact with
-existing reliable Web services.</p>
-
-<p>According to the Web service-ReliableMessaging (WS-RM) specification which
-is implemented by Sandesha2, reliable communication happens between two
-endpoints. These endpoints are called the RM Source (RMS) and the RM
-Destination (RMD). Before communication, RMS and RMD perform a message
-exchange to create a relationship called a Sequence between them. A Sequence
-is always identified by a unique Sequence Identifier.</p>
-
-<p>Each message of a sequence is numbered, starting from one. In Sandesha2
-the maximum number of messages a sequence can support is 2 <sup>64</sup>
-(size of <em>long</em> data type). Of course practically this may be limited
-by the memory available for your system . The message number is used by the
-destination to support additional delivery assurances. This will be explained
-later in this tutorial.</p>
-
-<p>The reliability is obtained basically using acknowledgements. RMS is
-required to send each message one or more times to the RMD. RMD sends back
-acknowledgements to notify the successful reception of messages. After
-receiving an acknowledgement for a certain message RMS can stop the
-retransmission of that message.</p>
-
-<p>When all messages of a certain sequence have been successfully transmitted
-to RMD, RMS sends a TerminateSequence message. If RMD receives this message
-it can free any resources allocated for this sequence. Otherwise resource
-de-allocation will happen based on a timeout.</p>
+<p>Sandesha2 gives reliable messaging capabilities to Axis2. From
+the point of view of the Axis2 engine, Sandesha2 is a module. When this
+module is engaged to a service, clients have the option of invoking it
+in a reliable manner. In the client side Sandesha2 module can be used to
+interact with existing reliable Web services.</p>
+
+<p>According to the Web service-ReliableMessaging (WS-RM)
+specification which is implemented by Sandesha2, reliable communication
+happens between two endpoints. These endpoints are called the RM Source
+(RMS) and the RM Destination (RMD). Before communication, RMS and RMD
+perform a message exchange to create a relationship called a Sequence
+between them. A Sequence is always identified by a unique Sequence
+Identifier.</p>
+
+<p>Each message of a sequence is numbered, starting from one. In
+Sandesha2 the maximum number of messages a sequence can support is 2 
<sup>64</sup>
+(size of <em>long</em> data type). Of course practically this may be
+limited by the memory available for your system . The message number is
+used by the destination to support additional delivery assurances. This
+will be explained later in this tutorial.</p>
+
+<p>The reliability is obtained basically using acknowledgements. RMS
+is required to send each message one or more times to the RMD. RMD sends
+back acknowledgements to notify the successful reception of messages.
+After receiving an acknowledgement for a certain message RMS can stop
+the retransmission of that message.</p>
+
+<p>When all messages of a certain sequence have been successfully
+transmitted to RMD, RMS sends a TerminateSequence message. If RMD
+receives this message it can free any resources allocated for this
+sequence. Otherwise resource de-allocation will happen based on a
+timeout.</p>
 
-<p><strong>Following diagram explains operation of the RMS and the
-RMD</strong>.</p>
+<p><strong>Following diagram explains operation of the RMS
+and the RMD</strong>.</p>
 
 <p><img alt="WS-RM Model" src="images/RMModel.jpg" /></p>
-<a>Sandesha2 supports two reliable messaging specifications. It fully
-supports WS-ReliableMessaging February 2005 specification which was created
-by collaborative efforts of several companies. Later this specification was
-submitted to OASIS and currently being standardized under the OASIS WS-RX
-technical committee. Sandesha2 supports up to the revision CD 3 of the
-specification being developed under this technical committee.</a> <a
-name="architecture"></a>
+<a>Sandesha2 supports two reliable messaging specifications. It
+fully supports the WS-ReliableMessaging February 2005 specification and
+February 2007 specification which was created by collaborative efforts
+of several companies. </a>
+<a name="architecture"></a>
 
 <h2>Architecture</h2>
 
@@ -90,276 +92,303 @@
 
 <p></p>
 
-<p>Sandesha2 components are used in a completely symmetric manner, in the
-server side and client as shown in the diagram above. Lets just consider a
-single side for this discussion.</p>
+<p>Sandesha2 components are used in a completely symmetric manner,
+in the server side and client as shown in the diagram above. Lets just
+consider a single side for this discussion.</p>
 <a name="hnd"></a>
 
 <h3>Handlers</h3>
 
-<p>Sandesha2 adds three handlers to the execution chain of Axis2. Two of
-these handlers are added to a special user phase called 'RMPhase' of in and
-out flows. The other handler is added to the predispatch phase of the inFlow.
-These handlers and their functions are given below.</p>
+<p>Sandesha2 adds three handlers to the execution chain of Axis2.
+Two of these handlers are added to a special user phase called 'RMPhase'
+of in and out flows. The other handler is added to the predispatch phase
+of the inFlow. These handlers and their functions are given below.</p>
 <p><img alt="Storage" src="images/handlers.jpg" /></p>
 
+<a name="globalin"></a>
+
+<h4>SandeshaGlobalInHandler</h4>
+
+<p>This handler is added to the predispatch phase of the inFlow.
+Since this is a global phase, this handler will be called for each and
+every message that comes to the Axis2 system. To maximize performance,
+the very first function of this handler is to identify whether the
+current message can be processed by it. It checks whether the message is
+intended for a RM enabled service, and if so, check the message type to
+further verify whether it should be processed globally. This handler was
+placed to perform functions that should be done before the instance
+dispatching level of Axis2.</p>
+
+<p><strong>Some of these functions are given below:</strong></p>
+<ul>
+       <li>Detecting duplicate messages.</li>
+       <li>Detecting faults that occur due to RM control messages and
+       reporting them.</li>
+</ul>
+
 <a name="in"></a>
 
 <h4>SandeshaInHandler</h4>
 
-<p>This is added to the RMPhase of the inFlow. Since RMPhase is a user phase,
-this handler will only be invoked for messages that are aimed at RM enabled
-service. This handler will identify the type of this message. The type can be
-an application message (a message that has to be delivered to the service) or
-a RM control message. Sandesha2 has a special set of classes called message
-processors which are capable of processing each type of message. Depending on
-the type, the message is send through the 'processInMessage' method of the
-message processor which will do the further processing of it.</p>
+<p>This is added to the RMPhase of the inFlow. Since RMPhase is a
+user phase, this handler will only be invoked for messages that are
+aimed at RM enabled service. This handler processes the SOAP header of
+the message. Acknowledgement headers, Acknowledgement requests and
+sequence processing headers are processed by this handler. Sandesha2 has
+a special set of classes called message processors which are capable of
+processing each type of message. Depending on the type, the message is
+send through the 'processInMessage' method of the message processor
+which will do the further processing of it.</p>
 <a name="out"></a>
 
 <h4>SandeshaOutHandler</h4>
 
-<p>This handler is responsible for doing the basic outFlow processing. This
-will first generate an ID called the Internal Sequence ID which is used to
-identify the sequence this message should belongs to. All the messages having
-the same Internal Sequence ID will be sent within a single sequence. An
-Internal Sequence ID will have a corresponding Sequence ID which would be
-obtained after the Create Sequence message exchange. In the client side the
-Internal Sequence ID is the combination of the wsa:To address and a special
-value given by the client called Sequence Key. In the server side the
-Internal Sequence ID is a derivation of the Sequence ID value of the messages
-of the incoming sequence.</p>
-
-<p>Before sending the message through other handlers the SandeshaOutHandler
-will send it through the 'processOutMessage' method of the respective message
-processor.</p>
-<a name="globalin"></a>
-
-<h4>SandeshaGlobalInHandler</h4>
-
-<p>This handler is added to the predispatch phase of the inFlow. Since this
-is a global phase, this handler will be called for each and every message
-that comes to the Axis2 system. To maximize performance, the very first
-function of this handler is to identify whether the current message can be
-processed by it. It checks whether the message is intended for a RM enabled
-service, and if so, check the message type to further verify whether it
-should be processed globally. This handler was placed to perform functions
-that should be done before the instance dispatching level of Axis2.</p>
+<p>This handler is responsible for doing the basic outFlow
+processing. This will first generate an ID called the Internal Sequence
+ID which is used to identify the sequence this message should belongs
+to. All the messages having the same Internal Sequence ID will be sent
+within a single sequence. An Internal Sequence ID will have a
+corresponding Sequence ID which would be obtained after the Create
+Sequence message exchange. In the client side the Internal Sequence ID
+is the combination of the wsa:To address and a special value given by
+the client called Sequence Key. In the server side the Internal Sequence
+ID is a derivation of the Sequence ID value of the messages of the
+incoming sequence.</p>
+
+<p>Before sending the message through other handlers the
+SandeshaOutHandler will send it through the 'processOutMessage' method
+of the respective message processor.</p>
+
+<a name="rmm"></a>
+
+<h4>RMMessageReceiver</h4>
+
+<p>All the Reliable messaging operations
+(CreateSequence/CloseSequence etc) have the RMMessageReceiver as the
+ultimate receiver for the message. The RMMessageReceiver will identify
+the type of RM control message. Sandesha2 has a special set of classes
+called message processors which are capable of processing each type of
+message. Depending on the type, the message is send through the
+'processInMessage' method of the message processor which will do the
+further processing of it.</p>
 
-<p><strong>Some of these functions are given below:</strong></p>
-<ul>
-  <li>Detecting duplicate messages and dropping them.</li>
-  <li>Detecting faults that occur due to RM control messages and reporting
-    them.</li>
-  <li>Answering to acknowledgement requests of the dropped application
-    messages.</li>
-</ul>
 <a name="sender"></a>
 
 <h3>Sender</h3>
 
-<p>Sender is responsible for transmission and retransmission of messages. The
-Sender is a separate thread that keeps running all the time. At each
-iteration Sender checks whether there is any messages to be sent. If there is
-any, it is sent to the destination. Sender also identifies messages that has
-to be retransmitted and keep re-sending them until a maximum limit decided by
-<a href="userGuide.html#cs" target="_blank">Sandesha2 policies</a> is 
exceeded.</p>
-<a name="mp"></a>
-
-<h3>Message Processors</h3>
-
-<p>Sandesha2 have a set of classes called message processors, each
-implementing the MessageProcessor interface. Each message processor is
-responsible for processing a certain type of message. For example,
-CreateSequenceProcessor will process CreateSequence messages and
-AcknowledgementProcessor will process Acknowledgement messages. The message
-processor interface defines two methods for processing incoming messages and
-outgoing messages. (namely 'processInMessage' and 'processOutMessage')</p>
+<p>Sender is responsible for transmission and retransmission of
+messages. The Sender is a separate thread that keeps running all the
+time. At each iteration Sender checks whether there is any messages to
+be sent. If there is any, it is sent to the destination. Sender also
+identifies messages that has to be retransmitted and keep re-sending
+them until a maximum limit decided by <a href="userGuide.html#cs"
+       target="_blank">Sandesha2 policies</a> is exceeded.</p>
+
 <a name="ioi"></a>
 
-<h3>InOrderInvoker</h3>
+<h3>In Order Invoker</h3>
 
-<p>InOrderInvoker is another separate thread that is started by the Sandesha2
-system. This is started only if Sadesha2 has been configured to support
-in-order delivery assurance. InOrderInvoker makes sure that it invokes
-messages of a sequence only in the order of message numbers.</p>
+<p>InOrderInvoker is another separate thread that is started by the
+Sandesha2 system. This is started only if Sadesha2 has been configured
+to support in-order delivery assurance. InOrderInvoker makes sure that
+it invokes messages of a sequence only in the order of message numbers.</p>
 <a name="sf"></a>
 
 <h3>Storage Framework</h3>
 
-<p>Sandesha2 storage framework is one of the most important parts of the
-Sandesha2 system. This was designed to support the RM message exchange while
-being independent of the storage implementation used. The storage framework
-defines a set of interfaces and abstract classes that can be implemented by a
-particular storage implementation. Sandesha2 system comes with an in-memory
-storage implementation. There can be other implementations based on different
-databases and persistence mechanisms.</p>
+<p>Sandesha2 storage framework is one of the most important parts of
+the Sandesha2 system. This was designed to support the RM message
+exchange while being independent of the storage implementation used. The
+storage framework defines a set of interfaces and abstract classes that
+can be implemented by a particular storage implementation. Sandesha2
+system comes with an in-memory storage implementation. There can be
+other implementations based on different databases and persistence
+mechanisms.</p>
 
-<p><strong>Following diagram gives a brief view of the Sandesha2 storage
-framework.</strong></p>
+<p><strong>Following diagram gives a brief view of the
+Sandesha2 storage framework.</strong></p>
 
 <p><img alt="Storage" src="images/storage.jpg" /></p>
 <a name="RMbeans"></a>
 
-<p>Storage framework defines several beans that extend the RMBean abstract
-class. They are given below:</p>
+<p>Storage framework defines several beans that extend the RMBean
+abstract class. They are given below:</p>
 <ol>
-  <li>RMSBean (fields - internalSequenceID, createSequenceMsgID,
-    sequenceID, createSequenceMsgStoreKey, referenceMsgStoreKey, 
securityTokenData)</li>
-  <li>SenderBean (fields - messageContextRefKey, internalSequenceID,
-    messageNumber, messageID, messageType, send, resent,
-  sentCount,timeToSend)</li>
-  <li>RMDBean (fields - sequenceID, nextMsgToProcess, pollingMode, 
referenceMessageKey)</li>
-  <li>InvokerBean (fields - invoked,messageContextRefKey, sequenceID,
-  msgNo)</li>
-  <li>SequencePropertyBean (fields - sequencePropertyKey, name, value)</li>
+       <li>RMSBean (fields - internalSequenceID, createSeqMsgID,
+       sequenceID, createSequenceMsgStoreKey, referenceMessageStoreKey,
+       securityTokenData, clientCompletedMessages, toEPR, soapVersion,
+       replyToEPR, rMVersion, acksToEPR, terminated, serviceName, 
pollingMode)</li>
+       <li>SenderBean (fields - messageContextRefKey, internalSequenceID,
+       messageNumber, messageID, messageType, send, resend,
+       sentCount,timeToSend)</li>
+       <li>RMDBean (fields - sequenceID, nextMsgToProcess, pollingMode,
+       referenceMessageKey, toEPR, replyToEPR, rMVersion, acksToEPR,
+       terminated, serviceName, pollingMode)</li>
+       <li>InvokerBean (fields - invoked,messageContextRefKey,
+       sequenceID, msgNo)</li>
 </ol>
 
-<p>There are five bean manager interfaces corresponding to each of above
-beans.They are as follows:</p>
+<p>There are four bean manager interfaces corresponding to each of
+above beans.They are as follows:</p>
 <ol>
-  <li>RMSBeanMgr</li>
-  <li>InvokerBeanMgr</li>
-  <li>RMDBeanMgr</li>
-  <li>SenderBeanMgr</li>
-  <li>SequencePropertyBeanMgr</li>
+       <li>RMSBeanMgr</li>
+       <li>InvokerBeanMgr</li>
+       <li>RMDBeanMgr</li>
+       <li>SenderBeanMgr</li>
 </ol>
 
-<p>Sandesha2 also defines a StorageManager interface that defines methods to
-create each of these bean managers and to create a Transaction object which
-should implement the Transaction interface. Transaction interface defines
-commit and rollback methods.</p>
+<p>Sandesha2 also defines a StorageManager interface that defines
+methods to create each of these bean managers and to create a
+Transaction object which should implement the Transaction interface.
+Transaction interface defines commit and rollback methods. The
+StorageManager interface is also responsible for storing, updating,
+retrieving and deleting of MessageContext instances for a sequence.</p>
 
-<p>Collectively each Sandesha2 storage implementation should have following
-classes:</p>
+<p>Collectively each Sandesha2 storage implementation should have
+following classes:</p>
 <ol>
-  <li>An implementation of the StorageManager interface.</li>
-  <li>Implementations of five Bean Manager interfaces.</li>
-  <li>An implementation of a Transaction interface.</li>
+       <li>An implementation of the StorageManager interface.</li>
+       <li>Implementations of the four Bean Manager interfaces.</li>
+       <li>An implementation of the Transaction interface.</li>
 </ol>
 
-<p>These classes can be packed as a jar archive and added to the classpath.
-The name of the StorageManager implementation class has to be mentioned in
-Sandesha2 policy configurations. This will be picked up after a restart of
-the the Axis2 engine.</p>
+<p>These classes can be packed as a jar archive and added to the
+classpath. The name of the StorageManager implementation class must be
+mentioned in Sandesha2 policy configurations. This will be picked up
+after a restart of the the Axis2 engine.</p>
 <a name="da"></a>
 
 <h2>Delivery Assurances</h2>
 
-<p>Sandesha2 can provide an in-order exactly-once delivery assurance. The
-ordering (in-order) is optional. You can disable it using Sandesha2 policy
-configurations. The ordering is done using the <a href="#ioi">InOrderInvoker
-thread</a> that was introduced earlier.</p>
-
-<p><strong>If ordering (in-order) is enabled</strong>, SandeshaInHandler
-pauses the execution of an incoming application message. As a result of this,
-the message will not go through rest of the handler chain in the first
-invocation. Note that it also starts the InOrderInvoker thread if it is
-stopped. This thread goes through the paused messages and resume each of them
-in the order of message numbers.</p>
+<p>Sandesha2 can provide an in-order exactly-once delivery
+assurance. The ordering (in-order) is optional. You can disable it using
+Sandesha2 policy configurations. The ordering is done using the <a
+       href="#ioi">InOrderInvoker thread</a> that was introduced earlier.</p>
+
+<p><strong>If ordering (in-order) is enabled</strong>,
+SandeshaInHandler pauses the execution of an incoming application
+message. As a result of this, the message will not go through rest of
+the handler chain in the first invocation. Note that it also starts the
+InOrderInvoker thread if it is stopped. This thread goes through the
+paused messages and resume each of them in the order of message numbers.</p>
 
 <p><strong>If in-order invocation is not enabled</strong> the
-SandeshaInHandler will not pause the messages and they will go in their full
-execution path in one go.</p>
+SandeshaInHandler will not pause the messages and they will go in their
+full execution path in one go.</p>
 
-<p>The delivery assurance to be used depends on your requirements. If you
-want the invocation to be as fast as possible, and you do not care about
-ordering, disable in order invocation. But if you want message to be invoked
-in the order they were sent by the client, you have to enable it. There could
-be a considerable performance improvements if this feature is disabled.
-Specially if majority of the messages come out of order.</p>
-
-<p>In the current implementation, each message (identified by sequenceID and
-message number) will be invoked only once. So exactly once delivery assurance
-is guaranteed. You cannot ask Sandesha2 to invoke the same message more than
-once.</p>
+<p>The delivery assurance to be used depends on your requirements.
+If you want the invocation to be as fast as possible, and you do not
+care about ordering, disable in order invocation. But if you want
+message to be invoked in the order they were sent by the client, you
+have to enable it. There could be a considerable performance
+improvements if this feature is disabled. Specially if majority of the
+messages come out of order.</p>
+
+<p>In the current implementation, each message (identified by
+sequenceID and message number) will be invoked only once. So exactly
+once delivery assurance is guaranteed. You cannot ask Sandesha2 to
+invoke the same message more than once.</p>
 <a name="es"></a>
 <h2>Example Scenario</h2>
 
-<p>This part explains how Sandesha2 framework works internally for the most
-common RM scenario, which is the sending of a couple of Ping messages from a
-client to the server. We will mainly look at how Sandesha2 uses its storage
-to do the RM message exchange correctly. While going through the following,
-keep the <a href="#RMbeans">RM Beans and their fields</a> which were
-mentioned earlier, in mind.</p>
+<p>This part explains how Sandesha2 framework works internally for
+the most common RM scenario, which is the sending of a couple of Ping
+messages from a client to the server. We will mainly look at how
+Sandesha2 uses its storage to do the RM message exchange correctly.
+While going through the following, keep the <a href="#RMbeans">RM
+Beans and their fields</a> which were mentioned earlier, in mind.</p>
 <a name="cs"></a>
 
 <h3>Client Side</h3>
 <ul>
-  <li>Client does the first fireAndForget method invocation of a
-    serviceClient after setting necessary properties.</li>
-  <li>Message reaches the SandeshaOutHandler which detects it as an
-    application message. The processing is delegated to the processOutMessage
-    method of the Application Message Processor.</li>
-  <li>Application Message Processor generates the Internal Sequence ID as
-    explained earlier. It understands that this is a new sequence and
-    generates a Create Sequence Message for it. The Application Message gets
-    paused.</li>
-  <li>SandeshaOutHandler adds an entry to the CreateSequence bean manager
-    representing the newly created Create Sequence message. This entry has
-    three properties.The sequenceID property is initially null. The
-    createSeqMsgID is the message ID of the created CreateSequence message.
-    The internalSequenceID property gets the generated Internal Sequence ID
-    value.</li>
-  <li>SandeshaOutHandler adds two entries to the SenderBeanManager. One which
-    has the send property to 'false' represents the application message,
-    other which has the send property to 'true' represents the CreateSequence
-    message. The Sender thread sends (and retransmits) only the
-    CreateSequence message.</li>
-  <li>After some time the client side would receive a Create Sequence
-    Response message from the server. The SandeshaInHandler delegates the
-    processing to the CreateSequenceResponse message processor. It finds the
-    correct CreateSequence manager entry using the createSequenceMessageID
-    property (which is in the relatesTo entry of the response message).</li>
-  <li>Client updates the sequenceID property of the CreateSequence bean
-    manager entry. Also the send value of the application message entries are
-    set to 'true'. The sender starts transmitting and retransmitting
-    application messages.</li>
-  <li>When the client receives acknowledgements for the messages it send,
-    they are delivered to the Acknowledgement Processor which removes the
-    corresponding application message entries from the Sender bean
-  manager.</li>
-  <li>If an acknowledgement says that all the sent messages (up to last
-    message) was successfully received, the Acknowledgement Processor creates
-    a Terminate Sequence message and adds a corresponding entry to the Sender
-    bean manager.</li>
+       <li>Client does the first fireAndForget method invocation of a
+       serviceClient after setting necessary properties.</li>
+       <li>Message reaches the SandeshaOutHandler which detects it as an
+       application message. The processing is delegated to the
+       processOutMessage method of the Application Message Processor.</li>
+       <li>Application Message Processor generates the Internal Sequence
+       ID as explained earlier. It understands that this is a new sequence and
+       generates a Create Sequence Message for it. The Application Message
+       gets paused.</li>
+       <li>Application Message Processor adds an entry to the RMS bean
+       manager representing the newly created Create Sequence message. This
+       entry has three properties. The sequenceID property is initially null.
+       The createSeqMsgID is the message ID of the created CreateSequence
+       message. The internalSequenceID property gets the generated Internal
+       Sequence ID value.</li>
+       <li>Application Message Processor adds two entries to the
+       SenderBeanManager. One which has the send property to 'false'
+       represents the application message, other which has the send property
+       to 'true' represents the CreateSequence message. The Sender thread
+       sends (and retransmits) only the CreateSequence message.</li>
+       <li>Application Message Processor stores three MessageContext
+       instances inside the StoreManager. The first is the CreateSequence
+       message, the second a "reference message", which is a copy of the
+       CreateSequence message. The third is the application message.</li>
+       <li>After some time the client side would receive a Create
+       Sequence Response message from the server. The SandeshaInHandler
+       delegates the processing to the CreateSequenceResponse message
+       processor. It finds the correct CreateSequence manager entry using the
+       createSequenceMessageID property (which is in the relatesTo entry of
+       the response message).</li>
+       <li>Client updates the sequenceID property of the RMS bean manager
+       entry. Also the send value of the application message entries are set
+       to 'true'. The sender starts transmitting and retransmitting
+       application messages.</li>
+       <li>When the client receives acknowledgements for the messages it
+       send, they are delivered to the Acknowledgement Processor which removes
+       the corresponding application message entries from the Sender bean
+       manager.</li>
+       <li>If an acknowledgement says that all the sent messages (up to
+       last message) was successfully received, the Acknowledgement Processor
+       creates a Terminate Sequence message and adds a corresponding entry to
+       the Sender bean manager.</li>
 </ul>
 <a name="ss"></a>
 
 <h3>Server Side</h3>
 <ul>
-  <li>Server receives a CreateSequence message. It generates a new sequence
-    ID and creates a new Create Sequence Response message containing this
-  ID.</li>
-  <li>Server adds an entry to the NextMessage Bean Manager. The initial value
-    for nextMessageToInvoke property is 1.</li>
-  <li>Server adds an entry to the SenderBeanManager (of server side)
-    representing the application message. The send value is'true'. The
-    CreateSequenceResponse message is sent by the Sender.</li>
-  <li>After some time the server receives an application message. The server
-    side SandeshaInHandler delegates this to the ApplicationMessageProcessor
-    which creates an acknowledgement and sends it. If in-order invocation is
-    enabled, an entry is added to the InvokerBeanManager representing this
-    new application message.
-    <p><em>Lets assume that the message number of this message is 2.</em></p>
-  </li>
-  <li>The InOrderInvoker which keeps looking at the InvokerBeanManager
-    entries sees that there are entries to be invoked.</li>
-  <li>The InOrderInvoker checks the entry of the NextMessageBeanManager of
-    the relevant sequence and sees that it is 1. But since only message
-    number 2 is present in the invokerBeanManager entries, the invocation is
-    not done.</li>
-  <li>After some time, application message 1 also comes. Now the Invoker sees
-    this entry and invokes the message. It also updates the
-    nextMessageToInvoke property of NextMessageBeanManagerto 2. The invoker
-    again checks whether the new entry for the NextMessageToInvoke (2) is
-    present in the InvokerBeanManager entries. Since this is present it is
-    also invoked. The value is again updated (to 3) but no invocation is done
-    since an entry is not found.</li>
-  <li>Some time later the server may receive a TerminateSequence message. It
-    can partly remove the resources allocated for the sequence. The other
-    part of resources (which is required by the InOrderInvoker) is removed
-    after the invocation of the last message.</li>
+       <li>Server receives a CreateSequence message. It generates a new
+       sequence ID and creates a new Create Sequence Response message
+       containing this ID.</li>
+       <li>CreateSequence message processor processInMessage creates an
+       RMD bean representing the server side of the sequence. The sequence
+       identifier for this sequence is stored in the RMD bean and the bean is
+       added to the RMD bean manager. The initial value for nextMsgNoToProcess
+       property is 1.</li>
+       <li>The CreateSequence message processor starts the "worker"
+       threads for the sequence. This includes the Sender thread for response
+       messages and the Invoker thread if the StorageManager returns one.</li>
+       <li>The CreateSequenceResponse message is created and sent
+       immediately by the CreateSequence message processor.</li>
+       <li>After some time the server receives an application message.
+       The SandeshaGlobalInHandler retrieves the RMD bean which matches the
+       inbound sequence. A check is made to ensure this is not a duplicate
+       message before processing is allowed to continue.</li>
+       <li>The server side SandeshaInHandler delegates this to the
+       RMMessageReceiver which creates an acknowledgement message and sends
+       it. If in-order invocation is enabled, an entry is added to the
+       InvokerBeanManager representing this new application message.
+       <p><em>Lets assume that the message number of this message is
+       2.</em></p>
+       </li>
+       <li>The InOrderInvoker which keeps looking at the
+       InvokerBeanManager entries sees that there are entries to be 
invoked.</li>
+       <li>The InOrderInvoker checks the entry of the RMDBean manager of
+       the relevant sequence and sees that it is 1. But since only message
+       number 2 is present in the invokerBeanManager entries, the invocation
+       is not done.</li>
+       <li>After some time, application message 1 also comes. Now the
+       Invoker sees this entry and invokes the message. It also updates the
+       nextMsgNoToProcess property of RMD Bean to 2. The Invoker again checks
+       whether the new entry for the nextMsgNoToProcess (2) is present in the
+       InvokerBeanManager entries. Since this is present it is also invoked.
+       The value is again updated (to 3) but no invocation is done since an
+       entry is not found.</li>
+       <li>Some time later the server may receive a TerminateSequence
+       message. It can partly remove the resources allocated for the sequence.
+       The other part of resources (which is required by the InOrderInvoker)
+       is removed after the invocation of the last message.</li>
 </ul>
 </body>
 </html>

Modified: webservices/sandesha/trunk/java/xdocs/images/storage.jpg
URL: 
http://svn.apache.org/viewvc/webservices/sandesha/trunk/java/xdocs/images/storage.jpg?view=diff&rev=557242&r1=557241&r2=557242
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to