Sign In to Follow Application
View All Documents & Correspondence

"Reliably Transferring Queued Application Messages"

Abstract: The present invention extends to methods, systems, and computer program products for reliably and securely transferring queued application messages. Application messages are (e.g.,. binary or text) encoded and then encapsulated in transfer messages, enqueue messages, and dequeue responses such that composable protocol elements used in application messages can be reused in the transfer messages, enqueue messages, and dequeue responses. Transfer message headers are encoded and then encapsulated along with encoded application messages such that composable protocol elements used in transfer headers and application messages can be reused in the store and forward messages. Application messages, transfer messages, enqueue messages, dequeue responses, and store and forward messages can all be configured in accordance with the same messaging protocol, such as, for example, Simple Object Access Protocol. Since encapsulated elements are encoded, the encapsulated elements do not interfere with configuration of wrapping messages.

Get Free WhatsApp Updates!
Notices, Deadlines & Correspondence

Patent Information

Application #
Filing Date
31 October 2005
Publication Number
31/2009
Publication Type
INA
Invention Field
COMMUNICATION
Status
Email
Parent Application
Patent Number
Legal Status
Grant Date
2019-09-30
Renewal Date

Applicants

MICROSOFT CORPORATION
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.

Inventors

1. ALAN S. GELLER
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.
2. CRAIG A CRITCHLEY
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.
3. DAVID O. DRIVER
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.
4. KRISHNAN SRINIVASAN
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.
5. RICHARD D. HILL
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.
6. RODNEY T. LIMPRECHT
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.
7. UDAY S. HEGDE
ONE MICROSOFT WAY, REDMOND, WASHINGTON 98052, USA.

Specification

RELIABLY TRANSFERRING QUEUED APPLICATION MESSAGES CROSS-REFERENCE TO RELATED APPLICATIONS
[0001] Not applicable.
BACKGROUND OF THE INVENTION
[0002] 1. The Field of the Invention
[0003] The present invention relates to electronic messaging and, more particularly, to
reliably transferring queued application messages.
[0004] 2. Background and Relevant Art
[0005] Computer systems and related technology affect many aspects of society.
Indeed, the computer system's ability to process information has transformed the way we
live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, and database management) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data. As a result, many tasks performed at a computer system (e.g, voice communication, accessing electronic mail, controlling home electronics, Web browsing, and printing documents) include the exchange of electronic messages between a number of computer systems and/or other electronic devices via wired and/or wireless computer networks.
[0006] Networks have in fact become so prolific that a simple network-enabled computing system may communicate with any one of millions of other computing systems spread throughout the globe over a conglomeration of networks often referred to as the "Internet". Such computing systems may include desktop, laptop, or tablet personal
computers; Personal Digital Assistants (PDAs); telephones; or any other computer or device capable of communicating over a digital network.
[0007] In order to communicate over a network, one computing system (referred to herein as a "sending computing system") constructs or otherwise accesses an electronic message and transmits the electronic message over a network to another computing system (referred to herein as a "receiving computing system"). The electronic message may be read by a human user as when the electronic message is an e-mail or instant message, or may be read, instead, by an application running on the receiving computing system. The electronic message may be constructed by an application running on the sending computing system with the possible assistance of a human user.
[0008] In some environments, applications communicate with one another using queued communication. Queued communication includes mechanisms for a sending application to write a message into a queue and for a receiving application to read the message from the queue. The queue maintains communication state outside of the communicating parties, and provides a level of indirection between them. Queued communication is beneficial since it can increase fault tolerance.
[0009] For example, queued communication mechanisms can provide failure isolation allowing communicating applications to fail and restart independently, without losing communication state. That is, a sending application or receiving application can fail and restart without losing communication state related to communication between the sending application and the receiving application. Further, queued communication mechanisms can provide connectivity isolation allowing communicating applications to come and go as needed. Thus, after writing a message to a queue, a sending application can go down without affecting the receiving applications ability to read the queued message.
[0010] To mcrease availability, some queue mechanisms implement a distributed queue model. For example, a sending application writes to a queue near the sending application and a receiving application reads from a (potentially different) queue near the receiving application. In distributed queue environments, the queues can transfer messages to and from other queues such that, for example, a message written to a sending queue (corresponding top a sending application) is delivered to a receiving queue (corresponding to a receiving application).
[0011] Unfortunately, most message queuing systems use proprietary protocols that limit interoperability. In some environments, such as, for example, relatively larger distributed networks, various queuing systems may be owned by different entities. Thus, in these environments there may be no way to ensure that all queuing systems implement a protocol that is compatible with other queuing systems. Accordingly, queuing systems can be limited to communicating only with other queuing systems that implement the same proprietary protocol.
[0012] Additionally, queuing environments (both single queue and distributed queue) have limited, if any, mechanisms for ensuring secured, reliable transfer of application messages from a sending application to a receiving application. For example, an application or queue failure can cause a message to be lost. Further, there is typically limited, if any, mechanism to store and forward messages at intermediaries and to recover from a failure at a store and forward intermediary. Additionally, it is difficult to guarantee that intermediaries ensure security constraints on messages and meet the reliable assurances specified for messages. Therefore systems, methods, and computer program products for reliably transferring queued application messages would be advantageous.
BRIEF SUMMARY OF THE INVENTION
[0013] The foregoing problems with the prior state of the art are overcome by the principles of the present invention, which are directed towards methods, systems, and computer program products for reliably transferring queued apphcation messages. A queue channel receives an application message configured in accordance with a messaging protocol, such as, for example, Simple Object Access Protocol ("SOAP")- The queue channel configures an enqueue message in accordance with the messaging protocol (e.g., SOAP). The enqueue message identifies a message queue that is to queue the application message and possibly a message session corresponding to the application message. The queue channel encodes the application message into a corresponding encoded application message. The queue channel encapsulates the encoded application message in the enqueue message. The queue channel sends the enqueue message to a queue manager that controls the identified queue such that the application message can be queued for delivery to a receiving computer system.
[0014] A sending transfer layer dequeues the encoded application message. The sending transfer layer configures a transfer message in accordance with the messaging protocol (e.g., SOAP). The sending transfer message identifies the receiving computer system and, when appropriate, a corresponding message session. The sending transfer layer encapsulates the encoded apphcation message in the transfer message. The sending transfer layer sends the transfer message for delivery to the receiving computer system.
[0015] A sending store and forward layer accesses the transfer message. The sending store and forward layer encodes a transfer header from the transfer message into a corresponding encoded transfer header. The sending store and forward layer configures a store and forward message in accordance with the messaging protocol (e.g., SOAP). The
sending store and forward message is for delivery to a next store and forward service (an intermediary or a receiving computer system), based on the position of the sending store and forward layer system relative to a receiving computer system that is to receive the application message. The sending store and forward layer encapsulates the encoded transfer header and the encoded application message into the store and forward message. The sending store and forward service forwards the store and forward message to the next store and forward service.
[0016] In some embodiments, one or more intermediary store and forward services process store and forward messages that encapsulate an encoded transfer header and an encoded application message. An intermediate store and forward service accesses a store and forward message configured in accordance with a messaging protocol (e.g., SOAP). The intermediate store and forward service identifies a next store and forward service (another intermediate store and forward service or a receiving computer system) that is to receive the encapsulated encoded transfer header and encapsulated encoded application message, based on the location of the store and forward service relative to the receiving computer system. The intermediate store and forward service configures a new store and forward message m accordance with the messaging protocol. The intermediate store and forward service copies the body of the store and forward message into the body of the new store and forward message. The store and forward service forwards the new store and forward message to the next store and forward service.
[0017] A receiving store and forward layer receives a store and forward message configured in accordance with a messaging protocol (e.g., SOAP). The receiving store and forward layer decodes the encoded transfer header into a corresponding transfer header. The receiving store and forward layer configures a transfer message in accordance with the
messaging protocol (e.g., SOAP) The receiving store and forward layer includes the transfer header in the transfer message to indicate how the transfer message is to be transferred to an application. The store and forward layer encapsulates the encoded application message in the transfer message and sends the transfer message to a receiving transfer layer.
[0018] The receiving transfer layer processes the transfer message. The transfer layer enqueues the encoded application message for delivery to an application. The transfer layer sends a message available message to indicate that the application message has been queued. A queue listener receives the message available message and sends a dequeue message to the receiving transfer layer. The receiving transfer layer receives the dequeued message and configures a dequeue response in accordance with the message protocol (e.g., SOAP). The receiving transfer layer encapsulates the encoded application message in the dequeued response.
[0019] The receiving transfer layer sends the dequeue response to the application. The queue listener receives the dequeue response. The queue listener decodes the encoded application message into the application message and sends the application message to the application. These and other objects and features of the present invention will become more fully apparent from the following description and appended claims, or may be learned by the practice of the invention as set forth hereinafter.
BRIEF DESCRIPTION OF THE DRAWINGS
[0020] To further clarify the above and other advantages and features of the present invention, a more particular description of the invention will be rendered by reference to specific embodiments thereof which are illustrated in the appended drawings. It is appreciated that these drawings depict only typical embodiments of the invention and are therefore not to be considered limiting of its scope. The invention will be described and explained with additional specificity and detail through the use of the accompanying drawings m which:
[0021] Figures 1A and IB illustrate an example of a computer architecture that facilitates reliable transfer of queued application messages.
[0022] Figure 2 illustrates an example flow chart of a method of reliably sending a queued application message.
[0023] Figure 3 illustrates an example flow chart of a method of reliably forwarding a queued application message.
[0024] Figure 4 illustrates an example flow chart of a method of reliably receiving a queued application message.
[0025] Figure 5 illustrates an example state diagram of different reliable messaging . -States_at asending computer system. [0026] Figure 6 illustrates an example state diagram of different reliable messaging states at a receiving computer system
[0027] Figure 7 illustrates a suitable operating environment for the principles of the present invention.
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0028] The principles of the present invention provide for reliably transferring queued application messages. A queue channel receives an application message configured in accordance with a messaging protocol, such as, for example, Simple Object Access Protocol ("SOAP"). The queue channel configures an enqueue message in accordance with the messaging protocol (e.g., SOAP). The enqueue message identifies a message queue that is to queue the application message and possibly a message session corresponding to the application message. The queue channel encodes the application message into a corresponding encoded application message. The queue channel encapsulates the encoded application message in the enqueue message. The queue channel sends the enqueue message to a queue manager that controls the identified queue such that the application message can be queued for delivery to a receiving computer system.
[0029] A sending transfer layer dequeues the encoded application message. The sending transfer layer configures a transfer message in accordance with the messaging protocol (e.g., SOAP). The sending transfer message identifies the receiving computer system and, wen appropriate, a corresponding the message session. The sending transfer layer encapsulates the encoded application message m the transfer message. The sending transfer layer sends the transfer message for delivery to the receiving computer system.
[0030] A sending store and forward layer accesses the transfer message. The sending store and forward layer encodes a transfer header from the transfer message into a corresponding encoded transfer header. The sending store and forward layer configures a store and forward message in accordance with the messaging protocol (e.g., SOAP). The sending store and forward message is for delivery to a next store and forward service (an intermediary or a receiving computer system), based on the position of the sending store and
forward layer system relative to a receiving computer system that is to receive the application message. The sending store and forward layer encapsulates the encoded transfer header and the encoded application message into the store and forward message. The sending store and forward service forwards the store and forward message to the next store and forward service.
[0031] In some embodiments, one or more intermediary store and forward services process store and forward messages that encapsulate an encoded transfer header and encoded application message. An intermediate store and forward service accessing a store and forward message configured in accordance with a messaging protocol (e.g., SOAP). The intermediate store and forward service identifies a next store and forward service (another intermediate store and forward service or a receiving computer system) that is to receive the encapsulated encoded transfer header and an encapsulated encoded application message, based on the location of the store and forward service relative to the receiving computer system. The intermediate store and forward service configures a new store and forward message in accordance with the messaging protocol. The intermediate store and forward service copies the body of the store and forward message into the body of the new store and forward message. The store and forward service forwards the new store and forward message to the next store and forward service.
[0032] A receiving store and forward layer receives a store and forward message configured in accordance with a messaging protocol (e.g., SOAP). The receiving store and forward layer decodes the encoded transfer header into a corresponding transfer header. The receiving store and forward layer configures a transfer message in accordance with the messaging protocol (e.g., SOAP). The receiving store and forward layer includes the transfer header in the transfer message to indicate how the transfer message is to be
transferred to an application. The store and forward layer encapsulates the encoded application message in the transfer message and sends the transfer message to a receiving transfer layer
[0033] The receiving transfer layer processes the transfer message. The transfer layer enqueues the encoded application message for delivery to an application. The transfer layer sends a message available message to indicate that the application message has been queued. A queue listener receives the message available message and sends a dequeue message to the receiving transfer layer. The receiving transfer layer receives the dequeued message and configures a dequeue response in accordance with the message protocol (e.g., SOAP). The receiving transfer layer encapsulates the encoded application message in the dequeued response.
[0034] The receiving transfer layer sends the dequeue response to the application. The queue listener receives the dequeue response. The queue listener decodes the encoded application message into the application message and sends the application message to the application.
[0035] Embodiments within the scope of the present invention include computer-readable media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable media may be any available media, which is accessible by a general-purpose or special-purpose computer system. By way of example, and not limitation, such computer-readable media can comprise physical storage media such as RAM, ROM, EPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, or any other media which can be used to carry or store desired program code means in the form of computer-executable instructions, computer-
readable instructions, or data structures and which may be accessed by a general-purpose or special-purpose computer system.
[0036] In this description and in the following claims, a "network" is defined as one or more data links that enable the transport of electronic data between computer systems and/or modules. When information is transferred or provided over a network or another communications connection (either hardwired, wireless, or a combination of hardwired or wireless) to a computer system, the connection is properly viewed as a computer-readable medium. Thus, any such connection is properly termed a computer-readable medium. Combinations of the above should also be included within the scope of computer-readable media. Computer-executable instructions comprise, for example, instructions and data which cause a general-purpose computer system or special-purpose computer system to perform a certam function or group of functions. The computer executable mstructions may be, for example, binaries, intermediate format instructions such as assembly language, or' even source code.
[0037] In this description and in the following claims, a "computer system" is defined as one or more software modules, one or more hardware modules, or combinations thereof, that work together to perform operations on electronic data. For example, the definition of computer system includes the hardware components of a personal computer, as well as software modules, such as the operating system of the personal computer. The physical layout of the modules is not important. A computer system may include one or more computers coupled via a network. Likewise, a computer system may include a single physical device (such as a mobile phone or Personal Digital Assistant "PDA") where internal modules (such as a memory and processor) work together to perform operations on electronic data.
[0038] Those skilled in the art will appreciate that the invention maybe practiced in network computing environments with many types of computer system configurations, including, personal computers, laptop computers, hand-held devices, multi-processor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, mobile telephones, PDAs, pagers, and the like. The invention may also be practiced in distributed system environments where local and remote computer systems, which are linked (either by hardwired data links, wireless data links, or by a combination of hardwired and wireless data links) through a network, both perform tasks. In a distributed system environment, program modules may be located in both local and remote memory storage devices.
[0039] Figures 1A and IB illustrate an example of a computer architecture 100 that facilitates reliable transfer of queued application messages. Depicted in computer architecture 100 are computer system 101, store and forward services 121 and 122, and computer system 111. Each of the computer systems and store and forward services can be connected to a network, such as, for example, a Local Area Network ("LAN"), Wide Area Network ("WAN"), or even the Internet. Computer systems and store and forwards services connected to the network and can receive data from and send data to other computer systems and store and forward services connected to the network. Accordingly, computer systems 101 and 111 and store and forward services 121 and 122, as well as other connected computer systems and store and forward services (not shown), can create message related data and exchange message related data (e.g., Internet Protocol ("IP") datagrams and other higher layer protocols that utilize IP datagrams, such as, Transmission Control Protocol ("TCP"), Hypertext Transfer Protocol ("HTTP"), Simple Mail Transfer Protocol ("SMTP"), etc.) over the network. For example, computer systems 101 and 111 and store and forward
services 121 and 122 can create SOAP envelopes, exchange SOAP envelopes over the network, and receive SOAP envelopes.
[0040] In Figure 1A, Computer system 101 includes application 102, queue channel 103, and queue manager 108. Application 102 can be a portion of a distributed application, such as, for example, a client proxy corresponding to application 112. Thus, from time to time, application 102 can have application messages to deliver to application 112. Queue channel 103 enqueues application messages for storage in queues controlled by queue manager 108. Queue channel 103 can include Application Program Interfaces ("APIs") that are called to enqueue a message. Accordingly, application 102 can call an API subroutine to enqueue an application message in message queue 107.
[0041] Queue manager 108 includes messages queue 107, transfer layer 104, and store and forward layer 106. Message queue 107 is configured to queue application messages sent from applications at computer system 101 (e.g., application 102) to other computer systems and to queue application messages from other computer systems that are sent to applications at computer system 101. Transfer layer 104 is configured to send transfer messages to and receive transfer messages from other queue managers (e.g., queue manager 118). Store and forward layer 106 is configured to send store and forward messages to and receive store and forward messages from other store and forward layers (e.g., store and forward layer 116) and store and forward services (e.g., store and forward services 121 and 122).
[0042] Within computer architecture 100, queue manager 108 and application 102 are both depicted as residing at computer system 101. However, it would be apparent to one skilled in the art, after having reviewed this description, that a queue manager and application that utilizes the queue manager can reside at different computer systems. For
example, queue manager 108 can reside at some other computer system that is network connectable to computer system 101. In some embodiments, applications at a plurality of different computer systems read messages from a single queue to provide load-balancing. [0043] Store and forward services 121 and 122 are intermediate store and forward services that send store and forward messages to other store and forward services and store and forward layers and receive store and forward messages from other store and forward services and store and forward layers.
[0044] In Figure IB, computer system 111 includes application 112, queue listener 113, and queue manager 118. Application 112 can be a portion of a distributed application, such as, for example, a service corresponding to application 112. Thus, from time to time, application 112 can have application messages that are received from application 102. Queue listener 113 dequeues application messages from queues controlled by queue manager 118. Accordingly, queue listener 133 can dequeue application messages from message queue 117. Queue listener 113 can also accept sessions from other queue managers, register interest in application messages corresponding to a specified session, and send wake up notifications to interested applications,
[0045] Queue manage 118 includes messages queue 117, transfer layer 114, and store and forward layer 116. Message queue 117 is configured to queue application messages sent from applications at computer system 111 (e.g., application 112) to other computer systems and to queue application messages from other computer systems that are sent to applications at computer system 101. Transfer layer 114 is configured to send transfer messages to and receive transfer messages from other queue managers (e.g., queue manager 108). Store and forward layer 116 is configured to send store and forward messages to and receive store and forward messages from other store and forward layers (e.g., store and
forward layer 106) and store and forward services (e.g., store and forward services 121 and 122)
[0046] Within computer architecture 100, queue manager 118 and application 112 are both depicted as residing at computer system 111. However, it would be apparent to one skilled in the art, after having reviewed this description, that a queue manager and application that utilizes the queue manager can reside at different computer systems. For example, queue manager 118 can reside at some other computer system that is network connectable to computer system 111. As previously described, applications at a plurality of different servers read messages from a single queue to provide load-balancing. [0047] Generally, the modules in computer architecture 100 can interoperate to facilitate reliable transfer of queued application messages. Embodiments of the present invention can utilize a variety of different protocols to implement reliable transfer of queued application messages.
[0048] An application session management protocol can be implemented to establish and tear down queued sessions between applications (e.g., between application 102 and application 112). All messages within a session share associated assurances such as exactly once and in order delivery to the target application. Applications can use a queued channel API implemented in a client library to send and receive messages on a queued session. Queued session state can be persisted in a corresponding queue, whereas queued channels used for capture and delivery are maintained in the application address space and are transient. Session attachment and detachment mechanisms can be used to decouple the lifetime of the queued channels and the session in the queue (e.g., as part of the capture/dehvery protocol).
[0049] An acknowledgement process can send store/forward acks, transfer acks, and delivery acks, and the sender takes various actions on these. For example, a queue manager can stop attempting to forward messages after receiving a store/forward acknowledgement. Also, errors may be returned during transfer or delivery, which cause messages to move to a dead queue immediately without waiting for expiration.
[0050] Generally, queued sessions are used to correlate a set of messages. The application writer defines a set of messages as part of a queued session. Queued sessions can be long running and are uniquely identified by an identifier in the queue. Thus, queued sessions can outlive the lifetime of the applications that read from or write to the queued sessions. Queued sessions are also recoverable. That is, applications can fail, recover and reattach to the queued session to continue its operation on the session.
[0051] Applications using queued communication set reliability requirements for the transfer of messages via a message expiration and message request for delivery acknowledgements. Messages can expire based on expiration time set by the user. When messages expire, the sending side queue moves the message to a dead queue. Delivery acknowledgements are generated by a corresponding receiving side queue manager when the receiving side application successfully consumes a message. The delivery acknowledgement is an indication to the sending side queue manager (e.g., queue manager 108) that the message was delivered successfully to the application (e.g., application 112). [0052] A queue capture protocol can be implemented between a queue channel (e.g., queue channel 103) and queue manager (e.g., queue manager 108) to provide a very high likelihood of synchronous reliable transfer of an application message (e.g., application message 131) from a sending side application (.e.g., application 102) to a sending side message queue (e.g., message queue 107). A queue capture protocol can utilize message
encapsulation to tunnel an application message in an enqueue message request (e.g., enqueue message 141) to a queue manager. When an encapsulated application message is successfully written to a message queue, the queue manager returns an enqueue response (e.g., enqueue response 142) to the queue channel. An enqueue message request and corresponding enqueue response can be part of a two-phase commit protocol. An enqueue message request can include an atomic transaction context that facilitates coordination of an enqueue operation with other application state changes.
[0053] A transfer protocol can be implemented between a sending queue manager (e.g., queue manager 108) and a receiving queue manager (e.g., queue manager 118). A transfer protocol can utilize message encapsulation to tunnel an application message in a transfer message (e.g., transfer message 151) sent from one queue manager to another queue manager. A sending side queue manager facilitates initiation of a secure and reliable transfer session with a corresponding receiving side queue manager, the correlation and sequencing of messages with a session, and the processing of transfer acknowledgements from the receiving side queue manager. The receive side queue manager facilitates acceptance of transfer sessions, receiving messages on the session, and sending transfer acknowledgments.
[0054] A transfer protocol can also include mechanisms for detecting holes in a message sequence. Generally, exchanged messages are numbered and expired messages will cause holes in the message sequence. Accordingly, a sending side queue can send transfer cancel message to a receiving side queue to close holes in its acknowledgement range. [0055] A store and forward protocol can be implemented to transfer messages between store and forward layers (e.g., between store and forward layers 106 and 116), between a store and forward intermediate and a store and forward layer (e.g., between store and
forward layers 106 and store and forward service 121), and between store and forward services (e.g., between store and forward service 121 and store and forward service 122). A transfer protocol can provide an extensibility model such that intermediate store and forward services are transparently interposed between a sending side queue and a receiving side queue. Messages can be forwarded through intermediate store and forward services without significantly affecting the end to end reliability of a transfer message. A store and forward protocol can utilize message encapsulation that encloses transfer headers and application messages in a store and forward message (e.g., forward message 161) and forwards the forward message to the next hop. In response to receiving a store and forward message, an appropriately configure module can return a store and forward response (e.g., forward response 162).
[0056] A delivery protocol can be implemented to deliver an application message from a receiving side queue (e.g., message queue 117) to a corresponding application (e.g.., application 112). A delivery protocol can send a session available message (e.g., session available message 172) or message available message (e.g., message available message 174) to a queue listener (e.g., queue listened 113). The queue listener responds with a dequeue message request (e.g., dequeue message 176) to read an application message (or other appropriate message) from the queue. Dequeueing can be performed in accordance with a Web Services specification, such as, for example, WS-Enumeration. In response to a dequeue message request, a queue manager (e.g., queue manager 118) can send a dequeue response that mcludes an application message (or other appropriate message). A dequeue message request and corresponding dequeue response can be part of a two-phase commit protocol. An dequeue message request can include an atomic transaction context that facilitates coordination of a dequeue operation with other application state changes
[0057] A wakeup notification protocol can be implemented to wakeup a receiving side application (e.g., application 112) when an application message is available. For example, applications that read messages from a queue can be hosted in a container. From time to time, an application may not be running for a variety of reasons. For example, an application may have failed, an application may have idled out, or recycled etc. The wakeup notification protocol mechanism provides for notifying a hosting environment of the availability of messages in a queue. The hosting environment may use this to start the application or start another instance of the application or schedule it for running.
[0058] In some embodiments, a queue manager hosts one or more queues. Accordingly, the queue manager can implement a capture, delivery, transfer and store/forward protocol for all queues it hosts. The queue manager can be configured to multiplex queue to queue transfers between the same two queue managers over a single transfer session. [0059] As described above, protocols for implementing reliable transfer of queued application messages can utilize message encapsulation. Generally, message encapsulation includes wrapping (at least a portion of) a first message (e.g., an application message) in a second message (e.g., a transfer message). In some embodiments, the first and second messages are configured m accordance with the same messaging protocol, such as, for example, Simple Object Access Protocol ("SOAP"). Thus, it may be that one or more of the previously described protocols encapsulates (at least a portion of) a first SOAP envelope, such as, for example, an extensible Markup Language ("XML") element, in a second SOAP envelope. Accordingly, encapsulation can be used to capture a SOAP application message in a SOAP enqueue message, to transfer a SOAP application message in a SOAP transfer message, and deliver a SOAP application message in SOAP dequeue response. A similar
encapsulation mechanism can be used to encapsulate a transfer header and an application message in a store and forward message.
[0060] When encapsulating an inner XML element (e.g., an application SOAP envelope) inside another XML element (e.g., a transfer SOAP envelope), the inner or wrapped XML element can be encoded (or serialized) according to a wrapping algorithm. Various encoding techniques, such as, for example, bmary and text encoding can be used. In some embodiments, wrapping algorithms utilize base64 binary encoding to encode wrapped XML elements. An XML element, such as, for example, nq:WrappedXmlBase64, can be used to indicate the encoding type of an encoded XML element. An encoded XML element can also have a corresponding attribute, such as, for example, nq:ContentType, that defines the original content type. Thus, wrapping facilitates the encapsulation of a (binary or text) encoded SOAP envelope inside another SOAP envelope.
[0061] An unwrapping algorithm can decode (or deserialize) an encoded XML element. For example, an unwrapping algorithm can provide the encoding type and original content type to a corresponding XML reader. Thus, a base64 encoded XML element's value can be provided to a binary XML reader to decode the value mto the corresponding unencoded XML element.
[0062] Message encapsulation facilitates the reuse of Web Services protocol elements between different messaging layers. For example, encapsulation facilitates the reuse of addressing, security, reliability, and transaction protocol elements between an application layer, a transfer layer and a store and forward layer. For example, when a transfer SOAP envelope encapsulates an encoded application SOAP envelope, composable protocol elements of the application SOAP envelope do not interfere with composable protocol elements of the transfer envelope (since the composable elements are encoded). Yet,
composable protocol elements of the application SOAP envelope can be efficiently accessed
through decoding.
[0063] Figure 2 illustrates an example flow chart of a method 200 of reliably sending a
queued application message. Method 200 will be described with respect to the modules and
data in computer architecture 100.
[0064] Method 200 includes a functional result-oriented step for capturing an
application message such that the application message is queued for delivery to a receiving
computer system (step 215). Step 215 can include any corresponding acts for accomplishing
the result of capturing an application message such that the application message is queued
for delivery to a receiving computer system. However, in the illustrated example of Figure
2, the step 215 mcludes a corresponding act of receiving an application message (act 201).
For example, queue channel 103 can receive application message 131 from application 102.
Application message 131 can be included in a subroutine call (to queue channel 103) for
enqueueing application message 131 in a message queue. Application message 131 can be
configured in accordance with a messaging protocol, such as, for example, SOAP.
Accordingly, application message 131 can include an application SOAP envelope containing
application data that is to be sent to application 112. Generally, an application SOAP
envelope can be of the following format:

Application Headers
Application Data
[0065] Step 215 includes a corresponding act of encoding the application message (act 202). For example, queue channel 103 can encode application message 131 (including composable protocol elements) into corresponding (e.g., binary or text) encoded application message 131E. Queue channel 103 can execute a wrapping algorithm that takes an application message, an encoding type, and a content type as input and returns an encoded application message as output. For example, the wrapping algorithm can receive application message 131, a base64 encoding type, and a string content type as mput and can return encoded application message 13IE as output.
[0066] Queue channel 103 can optionally encrypt and/or digitally sign encoded application message 131E as well. Encrypting and/or digitally signing encoded application message 131E helps ensure that the application message 131E is not modified or intercepted during transmission. Encoded application message 13IE can be secured using any of a variety of different security mechanisms, such as, for example, WS-Secunty. [0067] Step 215 mcludes a corresponding act of configuring an enqueue message (act 203). For example, queue channel 103 can configure enqueue message 141. Enqueue message 141 can be configured in accordance with the same messaging protocol as application message 131. Accordingly, enqueue message 141 can also mclude a SOAP envelope. Enqueue message 141 can identify a message queue that is to queue encoded application message 13IE and can identify a message session corresponding to application message 131. For example, enqueue message 141 can identify message queue 117 and can identify a message session between application 102 and application 112. Queue manager 108 can use message queue 107 as a transfer queue.
[0068] Since composable protocol elements (e.g., addressing, security, reliability, and transaction protocol elements) of application message 131 are encoded, the composable
protocol elements of application message 131 do not interfere with the configuration of
enqueue message 141. Accordingly, any composable protocol elements included in
application message 131 can be reused in enqueue message 141.
[0069] Step 215 includes a corresponding act of encapsulating the encoded application
message in the enqueue message (act 204). For example, queue channel 103 can
encapsulate encoded application message 131E in enqueue message 141. Generally, an
enqueue message can be of the format (before being secured):

(Figure Removed)
[0070] Within an enqueue message, the /s:Envelope/s:Header/nq:Sequence element can
be used to associate the enqueue message with an application session. The
/s:Envelope/s:Header/nq:Sequence/@Ordered element can be used to indicate if the
application session is ordered (e.g., "1" or "true" indicates an ordered application session).
The /s:Envelope/s:Header/nq:Sequence/wsuTdentifier element can be used to contain the
session identifier. The /s:Envelope/s:Header/nq:Sequence/wsrm:MessageNumber element
can be used to contain the sequence number of the (encoded) application message in the
application session. Sequence numbers start at an initiate value, such as, for example, 1, and
increment, such as, for example, by 1. The
/s:Envelope/s:Header/nq:Sequence/wsrm:LastMessage element can be used to indicate the (encoded) application message is the last message for the application session. [0071] The /s:Envelope/s:Header/wscoor:Co6rdinationContext element can be used to indicate if the enqueue message is to be executed as part of an atomic transaction. If so, the /s:Envelope/s:Header/wscoor:CoordinationContext element can contain the atomic transaction context. The /s:Envelope/s:Header/nq:QueueName element can be used to indicate a reference parameter containing the name (URI) of the logical queue the listener (e.g., queue listener 113) wants to listen to. The /s:Envelope/s:Header/wsu:Expires element can be used to mdicate the expiration timestamp for the (encoded) application message. The /s:Envelope/s:Header/nq:Volatile element can be used to indicate that the (encoded) application message need not be written to a persistent store in order to have its delivery be acknowledged. The /s:Envelope/s:Header/wsu:ErrorQueueName element can be used to indicate the queue name URI of the logical queue the (encoded) application message should be written to in case of a delivery error. The /s:Envelope/s:Body/*/nq:WrappedXmlBase64
element contains the complete SOAP envelope of the (encoded) application message,
appropriately wrapped. The
/s:Envelope/s:Body/*/nq:WrappedXmlBase64/@nq:ContentType element indicates the
content type of the (encoded) application message.
[0072] Subsequent to encapsulating encoded application message 131E, enqueue
message 141 can be encrypted and/or digitally signed. Digitally signing enqueue message
141 provides queue manager 108 some assurance of the authenticity of enqueue message
141 and can prevent injecting additional messages into message queue 107. Enqueue
message 141 can be secured using any of a variety of different security mechanisms
including WS-Security or transport layer security, such as, for example, Secure Sockets
Layer ("SSL").
[0073] Step 215 includes a corresponding act of sending the enqueue message to queue
the encoded application message (act 205). For example, queue channel 103 can send
enqueue message 141 to queue manager 108. When appropriate, queue channel 103 can'
encrypt enqueue message 141 before sending enqueue message 141 to queue manager 108.
Queue manager 108 controls message queue 107 and can queue encoded application
message 131E for delivery to application 112.
[0074] Queue manager 108 can receive enqueue message 141 and store encoded
application message 131E in message queue 107
[0075] Subsequent to storing encoded application message 131E in message queue 107,
queue manager 108 can send enqueue response 142 (potentially encrypted and/or digitally
signed) to queue channel 103 to acknowledge receipt of enqueue message 141. Queue
channel 103 can receive enqueue response 142. Enqueue response 142 indicates to queue
channel 103 that queue manager 108 successfully queued encoded application message 131E. Generally, an enqueue response can be of the format (before being secured):
(Figure Removed)
[0076] Generally, elements in an enqueue response have the same meaning as
previously described with respect to an enqueue message. Further, the element
/s:Envelope/s:Header/wsa:RelatesTo can be used to relate an enqueue response to a
corresponding enqueue message. For example, enqueue response 142 can include a relates
to value that identifies enqueue message 141. In some embodiments, an enqueue message
and corresponding enqueue response are part of a two-phase commit protocol.
[0077] Method 200 includes a functional result-oriented step for transferring the
application message to a receiving computer system (step 216). Step 216 can include any
corresponding acts for accomplishing the result of transferring the application message to a
receiving computer system. However, in the illustrated example of Figure 2, the step 216
includes a corresponding act of dequeueing an encoded application message (act 206). For
example, transfer layer 107 can dequeue encoded application message 13 1E from message
queue 107.
[0078] Step 216 mcludes a corresponding act of configuring a transfer message (act
207). For example, transfer layer 104 can configure transfer message 151A. Transfer
message 151A can be configured m accordance with the same messaging protocol as application message 131. Accordingly, transfer message 151A can also include a SOAP envelope. Transfer message 151A can identify a message session corresponding to the encoded application message 131E and can identify a receiving computer system that is participating in the message session. For example, transfer message 151A can identify a message session between application 102 and application 112.
[0079] Transfer layer 104 can decrypt any encrypted portions of the enqueue message 141 (e.g., encrypted as per WS-Security) and reconstitute the clear text of enqueue message 141. Transfer layer 104 copies appropriate headers, such as, for example, nqrQueueName, nqrVolatile; wsu:Expires; nq:Sequence, from enqueue message 141 to transfer message 151A If an application session identifier element, such as, for example, nq: Sequence, is present, transfer layer 104 calculates the next sequential message number for this session, adds it to the nq: Sequence element as the value of the MessageNumber element, and updates any local state.
[0080] Since composable protocol elements (e.g., addressing, security, reliability, and transaction protocol elements) of application message 131 are encoded, the composable protocol elements of application message 131 do not interfere with the configuration of transfer message 151A. Accordingly, any composable protocol elements included in application message 131 can be reused in transfer message 151 A.
[0081] Transfer layer 104 can optionally encrypt and/or digitally sign transfer message 151A. Securing transfer message 151A provides queue manager 108 some assurance of the authenticity of transfer message 151A and can prevent injecting additional messages into message queue 107. Transfer message 151A can be secured using any of a variety of different security, such as, for example, WS-Security.
[0082] Step 216 includes a corresponding act of encapsulating the encoded application
message in the transfer message (act 208). For example, transfer layer 104 can encapsulate
encoded application message 131E in transfer message 151A. Thus, m some embodiments,
transfer layer 104 copies the nq.ApplicationMessage body element of enqueue message 141
to the body of the transfer message 151 A. Generally, a transfer message can be of the
format (before being secured):
(Figure Removed)
[0083] Generally, elements in a transfer message have the same meaning as previously
descnbed with respect to an enqueue message and enqueue response. Additionally, the
/s:Envelope/s:Header/wsu:ErrorService element can be used to indicate a location the (encoded) application message should be sent to in case of a delivery error. [0084] Step 216 includes a corresponding act of sending the transfer message for delivery to the receiving computer system (act 209). For example, transfer layer 104 can send transfer message 151A for delivery to application 112.
[0085] Method 200 includes a functional result-oriented step for forwarding the application message toward the receiving computer system (step 217). Step 217 can include any corresponding acts for accomplishing the result of forwarding the application message toward the receiving computer system. However, in the illustrated example of Figure 2, the step 217 includes a corresponding act of accessing a transfer message (act 210). For example, store and forward layer 106 can access transfer message 151 A. [0086] Step 217 includes a corresponding act of encoding a transfer header from the transfer message (act 211). For example, store and forward layer 106 can encode transfer header 152 into encoded transfer header 152E. Store and forward layer 106 can execute a wrapping algorithm that takes an encoding type (e.g., base64), a content type (e.g., string), and a transfer header as input and returns an encoded transfer header as output. In some embodiments, other portions of transfer message 151A are also encoded. [0087] Step 217 includes a corresponding act of configuring a store and forward message (act 212). For example, store and forward layer 106 can configure forward message 161. Forward message 161 can be configured in accordance with the same messaging protocol as application message 131. Accordingly, forward message 161 can also mclude a SOAP envelope. Forward message 161 can be for delivery to a next store and forward service (or store and forward layer) based on the position of application 102 (or computer system 101) relative to application 112 (or computer system 111) within comptuer
architecture 100. Store and forward layer 106 copies appropriate headers from transfer
message 151A, such as, for example, an nq: Volatile header, into forward message 161.
[0088] Since composable protocol elements (e.g., addressing, security, reliability, and
transaction protocol elements) of application message 131 and transfer message 151A are
encoded, the composable protocol elements of application message 131 and transfer
message 151A do not interfere with the configuration of store and forward message 161.
Accordingly, any composable protocol elements included in application message 131 and
(e.g., the headers of) transfer message 151A can be reused in forward message 161
[0089] Step 217 includes a corresponding act of encapsulating the encoded transfer
header and encoded application message into the store and forward message (act 213). For
example, store and forward layer 106 can encapsulate encoded transfer header 152E and
encoded application message 131E into forward message 161. When appropriate, other
portions of transfer message 151A can also be encapsulated.
[0090] Store and forward layer 106 can encode the s:Header element of transfer
message 151A and encapsulate the encoded srHeader as a child element named
nq:WrappedXmlBase64 of an nq:TransferHeader body element. Store and forward layer
106 can also copy an nq:ApplicationMessage body element of the transfer message 151A to
forward message 161. Generally, a store and forward message can be of the format (before
being secured):
(Figure Removed)
[0091] Generally, elements m a store and forward message have the same meaning as
previously described with respect to an enqueue message, an enqueue response, and a
transfer message. Additionally, the /s:Envelope/s:Header/nq:Volatile element can be used to
indicate that the store and forward message not be written to a persistent store in order to
have 'its delivery be acknowledged. The
/s:Envelope/s:Body/*/nq:TransferHeader/nq:WrappedXmlBase64 element can be used to
indicate the encapsulated s:Header element of a transfer message assembled by the sending
queue service. The /s:Envelope/s:Body/*/nq:ApplicationMessage/nq:WrappedXmlBase64
element can be used to indicate an encapsulated application message, appropriately
wrapped.
[0092] Store and forward layer 106 can store encoded transfer header 152E (and
potentially other encoded portions of transfer message 151 A) and encoded application
message 131E in a temporary storage locaiton.
[0093] Step 217 includes a corresponding act of forwarding the store and forward
message to the next store and forward service (act 214). For example, store and forward
layer 106 can forward forward message 161 to store and forward service 121. Alternately, store and forward service 121 can identify a receiving store and forward layer (e.g., store and forward layer 116). When appropriate, store and forward layer 106 can encrypt and/or digitally sign forward message 161 before sending forward message 161 to a store and forward service or other store and forward layer. Securing forward message 161 helps prevent unauthorized readers from accessing forward message 161. Forward messages 161 can be secured using any of a variety of different security mechanisms including WS-Security or transport layer security, such as, for example, Secure Sockets Layer ("SSL"). [0094] Figure 3 illustrates an example flow chart of a method 300 of reliably forwarding a queued application message Method 300 will be described with respect to the modules and data m comptuer architecture 100.
[0095] Method 300 includes an act of accessing a store and forward message (act 301). For example, store and forward service 121 can receive forward message 161. As previously described, forward message 161 can be a SOAP envelope that encapsulates encoded transfer header 152E (and potentially other portions of transfer message 151 A) and encoded application message 131E (for delivery to application 112). When appropriate, store and forward service 121 can decrypt any encrypted portions of the forward message 161 (e.g., encrypted as per WS-Security) and can decode a digital signature to can confirm the integrity of forward message 161. Appropriately decrypted and authenticated portions of forward message 161 can be used to reconstitute the clear text of forward message 161. [0096] When appropriate, for example, when a forward message does not contain an nq:Volatile header, an encoded transfer header (and potentially other encoded portions of a transfer message and an encoded application message can be stored at store and forward service or a store and forward layer. For example, store and forward service 121 can store
encoded transfer header 152E and encoded application message 131E in temporary storeage.
Also when appropriate, a store and forward service or store and forward layer can
acknowledge receipt of a forward message with a store and forward response. For
example, store and forward service 121 can send forward response 162 (potentially
encrypted and/or digitally signed) to store and forward layer 106 to acknowledge receipt of
forward message 161. Store and forward layer 106 can receive and potentially decrypt
and/or authenticate forward response 162. In response to forward response 162, store and
forward layer 106 can remove encoded transfer header 152E (and potentially other portions
of transfer message 151 A) and encoded application message 131E from temporary storage.
[0097] Generally, a store and forward response can be of the format (before being
secured):
(Figure Removed)
[0098] Generally, elements in a store and forward response have the same meaning as
previously described with respect to an enqueue message, an enqueue response, a transfer
message, and a store and forward message. Additionally, the element
/s:Envelope/s:Header/wsa:RelatesTo can be used to relate an store and forward response to a
corresponding store and forward message. For example, forward response 162 can include a
relates to value that identifies store and forward message 161. Store and forward layer 106
can receive forward response 162 indicating acknowledgement of forward message 161.
[0099] Method 300 includes an act of identifying a next store forward service (act 302). For example, store and forward service 121 can identify store and forward service 122 based on the location of store and forward service 121 relative to application 112 (or computer system 111) in computer architecture 100. Alternately, store and forward service 121 can identify a store and forward layer (e.g., store and forward layer 116). Store and forward service 121 can refer to the headers of forward message 161 when identifying a next store and forward service or store and forward layer.
[00100] Method 300 includes an act of configuring a new store and forward message (act 303). For example, store and forward service 121 can configure forward message 163. Forward message 163 can be configured in accordance with the same messaging protocol as application message 131. Accordingly, forward message 161 can also include a SOAP envelope. Forward message 163 can be for delivery to a next store and forward service (or store and forward layer) based on the position of application 102 (or computer system 101) relative to application 112 (or computer system 111) within comptuer architecture 100. Store and forward service 121 can copy appropriate headers, such as, for example, and nq: Volatile header, from forward message 161 to forward message 163. [00101] Since composable protocol elements (e.g., addressing security, reliability, and transaction protocol elements) of application message 131 and transfer message 151A are encoded, the composable protocol elements of application message 131 and transfer message 151A do not interfere with the configuration of store and forward message 163. Accordingly, any composable protocol elements included in application message 131 and header 152 (or other portions of transfer message 151 A) can be reused in forward message 163.
[00102] Method 300 includes an act of copying the body of the store and forward message into the body of the new store and forward message (act 304). For example, store and forward service 121 can copy encoded transfer header 152E (and potentially other portions of transfer message 151 A) and encoded application message 131E from forward message 161 to forward message 163.
[00103] When appropriate, store and forward service 121 can encrypt and/or digitally sign forward message 163 before sending forward message 163 to a next store and forward service or other store and forward layer. Securing forward message 163 helps prevent unauthorized readers from accessing forward message 163. Forward messages 163 can be secured using any of a variety of different security mechanisms including WS-Security or transport layer security, such as, for example, Secure Sockets Layer ("SSL"). [0104] Method 300 mcludes an act of forwarding the new store and forward message to the next store and forward service (act 305). For example, store and forward service 121 can forward forward message 163 to store and forward service 122. Alternately, store and forward service 121 can forward forward message 163 to a store and forward layer (e.g., store and forward layer 116). When appropriate, store and forward service 121 can encrypt forward message 163 before sending forward message 163 to store and forward service 122. Generally, forward message 163 can be formatted similar to forward message 161. [0105] Store and forward service 122 can receive forward message 163 When appropnate, store and forward service 122 can decrypt and/or verify the integrity of forward message 163 as previously described. Store and forward service can store encoded transfer header 152E and encoded application message 131E m temporary storage. Store and forward service 122 can also send forward response 164 (potentially encrypted and/or digitally signed) to store and forward service 121 to acknowledge receipt of forward
message 163. Store and forward service 121 can receive and potentially decrypt and/or authenticate forward response 164. In response to forward response 164, store and forward service 121 can remove encoded transfer header 152E (and potentially other portions of transfer message 151 A) and encoded application message 13IE from temporary storage. Generally, forward response 164 can be formatted similar to forward response 162. [0106] Store and forward service 122 can also configure store and forward message 166 (a new store and forward SOAP envelope) for delivery to store and forward layer 116 Store and forward layer 122 can process store and forward message 163 (e.g., identifying a next store and forward module, etc) similar to store and forward service 121's processing of forward message 161. Accordingly, store and forward service 122 can copy encoded transfer header 152E (and potentially other portions of transfer message 151 A) and encoded application 13IE from forward message 164 to forward message 166. Store and forward service 122 can send forward message 166 (potentially encrypted and/or digitally signed) to store and forward layer 116. Generally, forward message 166 can be formatted similar to forwards messages 161 and 163.
[0107] Since composable protocol elements (e.g., addressing, security, reliability, and transaction protocol elements) of application message 131 and transfer message 151A are encoded, the composable protocol elements of application message 131 and transfer message 151A do not interfere with the configuration of store and forward message 166. Accordingly, any composable protocol elements included in application message 131 and header 152 (and other portions of transfer message 151 A) can be reused in forward message 166.
[0108] Figure 4 illustrates an example flow chart of a method 400 of reliably receiving a queued application message. The method 400 will be described with respect to the modules and data in comptuer architecture 100.
[0109] Method 400 includes a functional result-oriented step for forwarding an application message from a sending computer system (step 419). Step 419 can include any corresponding acts for accomplishing the result of forwarding an application message from a sending computer system. However, in the illustrated example of Figure 4, the step 419 includes a corresponding act of receiving a store and forward message (act 401). [0110] For example, store and forward layer 116 can receive forward message 166. When appropriate, store and forward layer 116 can decrypt any encrypted portions of the forward message 163 (e.g., encrypted as per WS-Security) and can decode a digital signature to can confirm the integrity of forward message 166. Appropriately decrypted and authenticated portions of forward message 166 can be used to reconstitute the clear text of forward message 166. Store and forward layer can store encoded transfer header 152E (and potentially other portions of transfer message 151 A) and encoded application message 131E in temporary storage.
[0111] Store and forward layer 116 can also send forward response 167 (potentially encrypted and/or digitally signed) to store and forward service 122 to acknowledge receipt of forward message 166. Store and forward service 122 can receive and potentially decrypt and/or authenticate forward response 167. In response to forward response 167, store and forward service 122 can remove encoded header 152E (and potentially other portions of transfer message 151A) and encoded application message 131E from temporary storage. Generally, forward response 167 can be formatted similar to forward responses 164 and 162.
[0112] As previously described, forward message 166 can be a SOAP envelope that encapsulates encoded transfer header 152E (and potentially other portions of transfer message 151A) and encoded application message 131E (for delivery to application 112). Encoded application message 131E can be for delivery to application 112 based at least in part on application 102 and application 112 participating in a communication session. [0113] Step 419 mcludes a corresponding act of decoding the encoded transfer header (act 402). For example, store and forward layer 116 can decode encoded transfer header 152E mto a corresponding (unencoded) transfer header 152 (e.g., a /s:Envelope/s:Body/*/nq:TransferHeaders/nq:WrappedXmlBase64 element). Store and forward layer 116 can execute an unwrapping algorithm that takes an encoding type (e.g., base64), a content type (e.g., string), and an encoded transfer header as input and returns an (unencoded) transfer header. When appropriate, store and forward layer 116 can also decode other portions of transfer message 151A
[0114] Step 419 includes an act of configuring a transfer message (act 403). For example, store and forward layer 116 can configure transfer message 151B. Transfer message 151B can be configured in accordance with the same messaging protocol as application message 131. Accordingly, transfer message 151B can also include a SOAP envelope. Transfer message 151B can identify a message session corresponding to the encoded application message 131E and can identify an application that is participating in the message session. For example, transfer message 151B can identify a message session between application 102 and application 112. In some embodiments, transfer message 151A is reconstituted from its encapsulation within forward message 166 and thus transfer message 151A and 151B are essentially the same transfer message.
[0115] Since composable protocol elements (e.g., addressing, security, reliability, and transaction protocol elements) of application message 131 are encoded, the composable protocol elements of application message 131 do not interfere with the configuration of transfer message 151B. Accordingly, any composable protocol elements included in application message 131 can be reused in forward message 151B. Generally, transfer message 151B can be formatted similar to transfer message 151 A.
[0116] Step 419 mcludes a corresponding act of including the transfer header in the transfer message (act 404). For example, store and forward layer 116 can include transfer header 152 in transfer message 151B. Transfer header 152 can indicate how transfer message 151B is to be transferred to application 112.
[0117] Step 419 includes a corresponding act of encapsulating the encoded application message in the transfer message (act 405). For example, store and forward layer 116 can encapsulate encoded application message 13IE m transfer message 151B. Store and forward layer 116 can optionally encrypt and/or digitally transfer message 151B. Securing transfer message 151B provides queue manager 118 some assurance of the authenticity of transfer message 151B and can prevent injecting additional messages into message queue 117. Transfer message 151B can be secured using any of a variety of different security mechanisms, such as, for example, WS-Security.
[0118] Step 419 mcludes an corresponding act of sending the transfer message (act 406). For example, store and forward layer 116 can (appropriately encrypt and) send transfer message 151B to transfer layer 114. Generally, transfer message 151B can be formatted similar to transfer message 151 A.
[0119] Method 400 includes a functional result-oriented step for transferring an application message from a sending comptuer system (step 420). Step 420 can include any
corresponding acts for accomplishing the result of transferring an application message from a sending comptuer system. However, in the illustrated example of Figure 4, the step 420 mcludes a corresponding act of processing a transfer message (act 407). For example, transfer layer 114 can process transfer message 151B. Transfer message 151B can encapsulate encoded application message 131E and be configured in accordance with the same messaging protocol as application message 131. Accordingly, transfer message 151B can also mclude a SOAP envelope.
[0120] Transfer layer 114 can decrypt and confirm the integrity of portions of transfer message 151B as appropriate (eg., in accordance with WS-security), Decrypting transfer message 151B can reveal the clear text of message 151B. When appropriate, transfer layer 114 performs local processing to ensure in-order deliver, for example, in accordance with an nq:Sequence header having the Ordered attribute set to a true value ("1" or "true"). Transfer layer 114 compares the wsu:Expires header value to the current date-time to see if the application message 131 is still valid. If not, the receiving queue service can fail the request and generate an appropriate fault, such as, for example:
[Code] sl2:Receiver
[Subcode] nq:MessageExpired [Reason] "the message has expired"
[0121] In some embodiments, transfer layer 114 may need to generate an appropriate fault after it has accepted and acknowledged the message, if no queue listener dequeues the message before it expires. In these embodiments, the fault can be supplemented by copying the nq:Sequence and nq:QueueName headers to the fault's s:detail element. [0122] Transfer layer 114 can also durably store encoded application message 131E in message queue 117.
[0123] Step 420 includes a corresponding act of enqueueing the encoded application
message (act 408). For example, transfer layer 114 can enqueue encoded application
message 13IE in message queue 117. Transfer layer 114 can retain queuing headers
(nq:QueueName; wsu:Expires; and nq:Sequence) and the nq:ApplicationMessage body
element of the TransferMessage envelope for further processing (e.g., dequeueing for
delivery to application 112)
[0124] In some embodiments, queue listeners register interest in receiving notifications
about sessions available on a queue. For example, queue listener 113 can send registration
message 191 to queue manager 118 to register an interest in messages available on message
queue 117. Registration message 191 can represent that application 112 is interested in
sessions and messages from application 102. Generally, a registration message can be of the
format (before being secured):
(Figure Removed)
[0125] Generally, elements in a registration message have the same meaning as previously described with respect to an enqueue message, an enqueue response, a transfer message, a store and forward message, and a store and forward response. Additionally, the /s:Envelope/s:Header/nq:QueueName element can be used to indicate the name (URI) of the logical queue the queue listener wants to listen to. When there is no queue named by the nq:QueueName value m the register request, the queue service can generate a appropriate fault:
[Code] sl2:Sender
[Subcode] nq:NoSuchQueue [Reason] "no such queue exists"
[0126] The /s:Envelope/s:Header/nq:Volatile element can be used to indicate that the queue listener is interested in application sessions that are considered volatile. That is, to indicate an interest in application sessions whose messages may not be written to persistent storage. If this element does not appear, then the listener will only be,notified of durable application sessions. The /s:Envelope/s:Body/*/nq:Filter element can be used to indicate an XML Path Language ("XPath") predicate that a queue listener uses to restnct the application sessions it is mterested in. The predicate can be applied to the first message,in an application session and the queue listener will only be notified if the predicate evaluates to true. If this element does not appear, then the queue listener can be notified of all application sessions. [0127] In response to receiving a registration message from a queue listener, a corresponding queue manager 118 can generate and send a registration response. For example, in response to receiving registration message 191, queue manager 118 can send registration response 192 to queue listener 113. Registration response 192 indicates a
successful registration. Generally, a registration response can be of the format (before being secured):
(Figure Removed)
[0128] Generally, elements m a registration response have the same meaning as
previously described with respect to an enqueue message, an enqueue response, a transfer
message, a store and forward message, a store and forward response, and a registration
message. Additionally, the /s:Envelope/s:Body/*/nq:Identifier element can be used contain a
URI that identifies a specific Listen context. For example, it correlates to the Filter that was
provided in the Listen request. This identifier is used when the listener is notified of the
availability of a new application session or session message and when the listener accepts an
application session.
[0129] Further, it may be that application message 131 is the initial message in a
communication session. Thus, in response to receiving application message 131 (a message
queue listener 113 has registered for), queue manager 118 can determine that queue listener
113 has registered an interest in application message 131. For example, queue manager 118
can match message 113 to an XPath predicate mcluded in registration message 191. Thus in
response to receiving message 131, queue manager 118 can configure and send session available message 172 to queue listener 113. Generally, a session available message (e.g., a SOAP envelope) can include a header of the following format:
xj.a«yL/K/
xs:ariyURI
xs.awj>Lfftf
xj.a«yC/i?/
[0139] The nq:Message Available/nq:QueueName element can be used to indicate the URI that names the logical queue that the message is available on The
nq:MessageAvailable/nq:Identifier can be used to indicate an identifier returned in a
registration response to the queue listener, which the queue listener has successfully
Accepted, and on which a message is available. In some embodiments, a message available
header may be added to a session accept response or a dequeue response, or it may be sent
as a stand-alone one-way message, with an empty body. If it is sent as a stand-alone
message, it can be sent with a wsa:Action of
http://schemas.testcorp.com/queuing/MessageAvailable. If sent as a header on another message, multiple MessageAvailable headers may be included in a single message; they may also be mixed with one or more session available headers.
[0140] Method 400 includes a functional result-oriented step for delivering an application message from a sending comptuer system (step 421). Step 421 can include any corresponding acts for accomplishing the result of delivering an application message from a sending comptuer system. However, m the illustrated example of Figure 4, the step 421 includes a corresponding act of receiving a message available message (act 410). For example, queue listener 113 can receive message available message 174 indicating that message 131 is available for delivery to application 112. When appropriate, queue listener can decrypt and/or verify the integrity of message available message 174. [0141] Step 421 includes a corresponding act of sending a dequeue message (act 411). For example, queue listener 112 can send (potentially encrypted and/or digitally signed) dequeue message 176 to queue manager 118. Dequeue message 176 can indicate that application message 131 is to be dequeued for delivery to application 112. Dequeue message 176 can include elements that identify message queue 117 (e.g., nq:QueueName) and application message 131 (e.g., nq:Sequence). Generally, a dequeue message (e.g., a SOAP
envelope) can be of the format of a WS-Enumeration pull message having additional constraints
[0142] Generally, elements in a dequeue message have the same meaning as previously
described with respect to an enqueue message, an enqueue response, a transfer message, a
store and forward message, a store and forward response, a registration message, a
registration response, a session available message, a session accept message, and message
available message. Further, a dequeue message can include a
/s:Envelope/s:Header/nq:AbortCount element that can be used to mdicate a retry count for
poisoned-message detection. A dequeue message can include a
/s:Envelope/s:Header/wscoor:CoordinationContext element that can be used to indicate an atomic transaction contest (e.g., when dequeue message 176 and dequeue response 177 are part of a two-phase commit protocol). A dequeue message can include a /s:Envefope/s:Body/*/wsen:MaxElements elements that can be used to indicate whether or not multiple elements can be dequeued in one dequeue request.
[0143] If the enumeration context passed in the dequeue message is not valid, the receiving queue service can fail the request and generate the following fault, as Specified in WS-Enumeration
[Code] sl2:Sender
[Subcode] wsemlnvalidEnumerationContext
[Reason] "invalid enumeration context"
[0144] Step 420 includes a corresponding act of receiving a dequeue message (act 412). For example, queue manager 118 can receive dequeue message 176 from queue listener 113. When appropriate, queue manager 118 can decrypt and/or verify the integrity of dequeue message 176. Step 420 includes a corresponding act of configuring a message response (act
413) For example, queue manager 118 can configure dequeue response 177. Dequeue response 177 can be configured in accordance with the same messaging protocol as application message 131. Accordingly, dequeue response can also include a SOAP envelope. Queue manager 118 can process transfer message 151B in accordance with WS-Addressing and WS-Coordination when configuring dequeue response 177. Queue manager 118 can copy the session ID header, if present, from the nqrTransferHeader element of transfer message 151B into dequeue response 177. If the session ID header has a LastMessage flag, queue manager 118 can add a wsen:EndOfSequence element to the body of dequeue response 177.
[0145] Since composable protocol elements (e.g., addressing, security, reliability, and transaction protocol elements) of application message 131 are encoded, the composable protocol elements of application message 131 do not interfere with the configuration of dequeue response 177. Accordingly, any composable protocol elements included in application message 131 can be reused in dequeue response 177.
[0146] Generally, a dequeue response (e.g., a SOAP envelope) can be of the format of a WS-Enumeration pull response message having additional constraints. Generally, elements in a dequeue response have the same meaning as previously described with respect to an enqueue message, an enqueue response, a transfer message, a store and forward message, a store and forward response, a registration message, a registration response, a session available message, a session accept message, a message available message, and a dequeue message. Further, a dequeue response can include a ./s:Envelope/s:Header/nq:Sequence element that can contain an indication if an enumeration context contained in a dequeue message was associated with an application session. A dequeue response can include a /s:Envelope/s:Body/wsen:PullResponse/wsen:Items/nq:ApplicationMessage/nq:WrappedX
mlBase64 element that contains an application SOAP envelope of the application message,
appropriately wrapped. A dequeue response can include a
/s:Envelope/s:Body/wsen:PullResponse/wsen:EndOfSequence element that can be used to mdicate the last message in a sequence or that there will not be additional messages in this context for other reasons.
[0147] Step 420 includes a corresponding act of encapsulating the encoded application message in the dequeue response (act 414). For example, queue manager 118 can encapsulate encoded application message 131E in dequeue response 177. Subsequent to encapsulating encoded application message 13IE, dequeue response 177 can be encrypted and/or digitally signed. Digitally signing dequeue response 177 provides queue listener 113 some assurance of the authenticity of dequeue response 177. Dequeue response 177 can be secured using any of a variety of different security mechanisms including WS-Security or transport layer security, such* as, for example, Secure Sockets Layer ("SSL"). [0148] Step 420 mcludes a corresponding act of sending the dequeue response for delivery to the application (act 415). For example, queue manager 118 can send dequeue response 177 to queue listener 113. Step 421 includes a corresponding act of receiving a dequeue response encapsulating an encoded application message (act 416). For example, queue listener 113 can receive dequeue response 177 encapsulating encoded application message 131E. When appropriate, queue listener 113 can decrypt and/or verify the integrity of dequeue response 177.
[0149] Step 421 includes a corresponding act of decoding the encoded application message (act 417). For example, queue listener 113 can decode encoded application message 131E into application message 131. Queue listener 113 can execute an unwrapping algorithm that takes an encoding type (e.g., base64), a content type (e.g., string), and an
encoded application message as input and returns an (unencoded) application message as
output.
[0150] Step 421 includes a corresponding act of sending the application message to the
application (act 418). For example, queue listener 113 can send application message 131 to
application 112. If application 112 is not active, queue listener 113 can send wakeup
notification 178 to a container environment that manages application 112.
[0151] Queue listener 103 can optionally encrypt and/or digitally sign application
message 131 as well. Encrypting and/or digitally signing application message 131 helps
ensure that the application message 131 is not modified or intercepted during transmission.
Application message 131E can be secured using any of a variety of different security
mechanisms, such as, for example, WS-Secunty.
[0152] Application 112 receives and processes application message 112. When
appropriate, application 112 can decrypt application message 131 to reveal the clear text if
application message 131. Application 112 can also decode a corresponding digital signature
to verify the integrity of application message 131.
[0153] Applications that read messages from a queue can be hosted in a container. An
application may not be running for a variety of reasons, such as, for example, the application
has failed, the application has idled out, the application has recycled, etc. A wakeup
notification provides for notifying a hosting environment of the availabihty of messages in
the queue. The hosting environment can use a wakeup notification to start the application,
start another instance of the application, or schedule the application for running. Generally,
a wakeup notification can be of the format (before being secured):
(Figure Removed)
[0154] Generally, elements m a wakeup notification have the same meaning as
previously described with respect to an enqueue message, an enqueue response, a transfer
message, a store and forward message, a store and forward response, a registration message,
a registration response, a session available message, a session accept message, a message
available message, a dequeue message, and a dequeue response. Additionally, a wakeup
notification message can include a /s:Envelope/s:Header/nq:QueueName element that can
contain a name (URI) of the logical queue containing messages to be processed. A wakeup
notification message can include a /s:Envelope/s:Header/nq:Volatile element that can be
used to indicate that the queue messages waiting to be processed are volatile.
[0155] When appropriate, a sending side queue manager (e.g., queue manager 108) can
send a cancel transfer message to a receiving side queue manager (e.g., queue manager 118)
to close holes in an acknowledgment sequence. A sending side queue manager generates a
cancel transfer operation when it determines that one or more MessageNumbers in a WS-
ReliableMessaging sequence will never be received at the receiving side queue manager.
When the receiving queue manager receives a cancel transfer message, the receiving side
queue manager contmues processing as if the identified messages have been received. The
receiving side queue manager can acknowledge the one or more MessageNumbers on the
WS-ReliableMessaging sequence as they had actually been received. Generally, a cancel
transfer message can be of the format (before being secured):
(Figure Removed)
[0156] Generally, elements in a cancel transfer message have the same meaning as
previously described with respect to an enqueue message, an enqueue response, a transfer
message, a store and forward message, a store and forward response, a registration message,
a registration response, a session available message, a session accept message, a message
available message, a dequeue message, a dequeue response, and a wake up notification.
Further, a cancel transfer message can be configured to respect the constraints specified for a
transfer message.
[0157] A cancel transfer message can include a /s:Envelope/s:Body/*/wsu:Identifier
element that can contain a URI conformant with [RFC2396] that uniquely identifies the WS-
RM Sequence being referenced by this message. A cancel transfer message can include a
/s:Envelope/s:Body/*/wsrm:AcknowledgementRange element that can be used to indicate a
range of WS-RM message Sequence MessageNumbers that the receiving queue service
should treat as if they were received because they will never be sent. A cancel transfer
message can include 1 or more Envelope/s:Body/*/wsrm:AcknowledgementRange
elements. A cancel transfer message can mclude a
/s:Envelope/s:Body/*/wsrm:AcknowledgementRange/@Upper element that can be used to
indicate the message number of the highest contiguous message in a Sequence range. A
cancel transfer message can include
a/s:Envelope/s:Body/*/wsrm:AcknowledgementRange/@Lower that can be used to indicate the message number of the lowest contiguous message in a Sequence range. [0158] After the transfer of application messages for a session is compete, a queue channel may close. However, a queue channel can send a detach message (e.g., including a session identifier and a queue name) to a sending side queue manager to indicate that the session is to remam open. The sending side queue manager can hold the session open and send a detach response acknowledging that the session is to remain open. [0159] To mark the end of a session, a queue channel can add a LastMessage element to the nq-Sequence header of the last message for the session. In response to detecting a LastMessage element, a sending side queue manager can discard any maintained state for the application session after the last message is sent. In response to detecting a LastMessage element, a receiving side queue manager can use the MessageNumber element to detect that is has received all of the messages for a session. When a session is completed, the receiving side queue manager can deliver the last message for the session in a dequeue response and can include a wsen:EndOfSequence element in the dequeue response body. After delivering the last message, the receiving side queue manager can discard any maintained state for the
application session. When a queue listener receives a wsen:EndOfSequence element the enumeration context becomes invalid and can be discarded.
[0160] Figure 5 illustrates an example state diagram 500 of different reliable messaging states at a sending computer system. It should be understood that the states depicted in state diagram 500 are per-message. A queue manager can have a plurality of messages that it is transferring and can associate a unique state machine with each of the plurality of messages.
[0161] For example, a message controlled by a sending side queue manager, such as, for example, queue manager 108, can transition to captured state 511 after capture 501 (i.e., after capturing a message). After initiating a transfer, the sending side queue manager waits for store and forward acknowledgement. Until a store and forward acknowledgment is received, the sending side queue manager keeps retrying the send.
[0162] When store and forward acknowledgement 502 is received, the controlled message transitions to sent state 512. The sending side queue manager then waits for a transfer acknowledgement. When transfer acknowledgement 506 is received, the controlled message transitions to transferred state 514. The sending side queue manager then waits for a delivery acknowledgement from the destination queue manager. When delivery acknowledgment 507 (a positive acknowledgment) is received, the control message transitions to delivered state 515 and can be deleted from a corresponding queue. [0163] After a controlled message transitions to captured state 511, a sending side queue manager can be configured to wait a specified penod of time to receive a store and forward acknowledgment. When the specified period of time for receiving a store and forward acknowledgment expires 503, the controlled message transitions to faulted state 513. After a controlled message transitions to sent state 512, a sending side queue manager can be
configured to wait a specified period of time to receive a transfer acknowledgment. When the specified period of time for receiving a transfer acknowledgment expires 504, the controlled message transitions to faulted state 513. Further, it may be that the sending side queue manager receives transfer negative acknowledgment 524 that causes the controlled message to transition to faulted state 513.
[0164] After controlled message transitionins to transferred state 514, a sending side queue manager can be configured to wait a specified period of time to receive a delivery acknowledgment. When the specified period of time for receiving a delivery acknowledgment expires 505, the controlled message transitions to faulted state 513. Further, it may be that the sending side queue manager receives a delivery negative acknowledgment 525 that causes the controlled message to transition to faulted state 513. Transfer and delivery acknowledgments and negative acknowledgment can be sent to an error service running in the sending side queue manager. If a user has requested no transfer assurances, controlled messages can be deleted after a store and forward acknowledgement is received.
[0165] Figure 6 illustrates an example state diagram of different reliable messaging states at a receiving computer system. It should be understood that the states depicted m state diagram 600 are per-message. For example, a message controlled by a receiving side queue manager, such as, for example, queue manager 118, can transition to received state 611 after normal receive 601 (i.e., normal reception of a message). A successfully received message can be captured in a message queue. The receiving side queue manager can also send a store and forward acknowledgment 624 back to the previous store and forward service or store and forward layer. After sending a store and forward acknowledgment 624,
the receiving side queue manager can send transfer acknowledgment 604. The receiving side queue manager then queues the message.
[0166] After sending both store and forward acknowledgment 624 and transfer acknowledgment 604, a controlled message transitions to acknowledgement sent state 614. When the message is dequeued 605, the receiving side queue manager can transfer to a delivered state. After the message is consumed by the receiving application, the controlled message transitions to delivered state 615.
[0167] On the other hand, a controlled message can transition to faulted state 612 after receive with errors 602 (i.e., a message is received with errors, such as, for example, no such queue here or sender not authorized to send to this queue). The receiving side queue manager can also send a store and forward acknowledgment 623 back to the previous store and forward service or store and forward layer. After sending a store and forward acknowledgment 603, the receiving side queue manager can send transfer negative acknowledgment 603 (to potentially prompt retransmission). After sending both, store and forward acknowledgment 624 and transfer negative acknowledgment 603, a controlled message can transition to negative acknowledgement sent state 613. The transfer and delivery ACKs and NACKs are sent to an error service hosted at the sending side queue manager.
[0168] Figure 7 illustrates a suitable operating environment for the principles of the present mvention. Figure 7 and the following discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented. Although not required, the mvention will be described in the general context of computer-executable instructions, such as program modules, being executed by computer systems. Generally, program modules include routines, programs, objects, components, data
structures, and the like, which perform particular tasks or implement particular abstract data types. Computer-executable instructions, associated data structures, and program modules represent examples of the program code means for executing acts of the methods disclosed herein.
[0169] With reference to Figure 7, an example system for implementing the invention includes a general-purpose computing device in the form of computer system 720, including a processing unit 721, a system memory 722, and a system bus 723 that couples various system components including the system memory 722 to the processing unit 721. Processing unit 721 can execute computer-executable instructions designed to implement features of computer system 720, including features of the present invention. The system bus 723 may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures The system memory includes read only memory ("ROM") 724 and random access memory ("RAM") 725. A basic input/output system ("BIOS") 726, containing the basic routines that help transfer information between elements within computer system 720, such as during start-up, may be stored in ROM 724.
[0170] The computer system 720 may also include magnetic hard disk drive 727 for reading from and writing to magnetic hard disk 739, magnetic disk drive 728 for reading from or writing to removable magnetic disk 729, and optical disk drive 730 for reading from or writing to removable optical disk 731, such as, or example, a CD-ROM or other optical media. The magnetic hard disk drive 727, magnetic disk drive 728, and optical disk drive 730 are connected to the system bus 723 by hard disk dnve interface 732, magnetic disk drive-interface 733, and optical drive interface 734, respectively. The drives and their associated computer-readable media provide nonvolatile storage of computer-executable
instructions, data structures, program modules, and other data for the computer system 720. Although the example environment described herein employs magnetic hard disk 739, removable magnetic disk 729 and removable optical disk 731, other types of computer readable media for storing data can be used, including magnetic cassettes, flash memory cards, digital versatile disks, Bernoulli cartridges, RAMs, ROMs, and the like. [0171] Program code means comprising one or more program modules may be stored on hard disk 739, magnetic disk 729, optical disk 731, ROM 724 or RAM 725, including an operating system 735, one or more application programs 736, other program modules 737, and program data 738. A user may enter commands and information into computer system 720 through keyboard 740, pomting device 742, or other input devices (not shown), such as, for example, a microphone, joy stick, game pad, scanner, or the like. These and other mput devices can be connected to the processing unit 721 through input/output interface 746 coupled to system bus 723. Input/output interface 746 logically represents any of a wide variety of different mterfaces, such as, for example, a serial port interface, a PS/2 interface, a parallel port mterface, a Universal Serial Bus ("USB") interface, or an Institute of Electncal and Electronics Engineers ("IEEE") 1394 interface (i.e., a Fire Wire interface), or may even logically represent a combination of different mterfaces.
[0172] A monitor 747 or other display device is also connected to system bus 723 via video interface 748. Other peripheral output devices (not shown), such as, for example, speakers and printers, can also be connected to computer system 720. [0173] Computer system 720 is connectable to networks, such as, for example, an office-wide or enterprise-wide computer network, a home network, an intranet, and/or the Internet. Computer system 720 can exchange data with external sources, such as, for
example, remote computer systems, remote applications, and/or remote databases over such networks.
[0174] Computer system 720 includes network interface 753, through which computer system 720 receives data from external sources and/or transmits data to external sources. As depicted in Figure 7, network interface 753 facilitates the exchange of data with remote computer system 783 via link 751 Network interface 753 can logically represent one or more software and/or hardware modules, such as, for example, a network interface card and corresponding Network Driver Interface Specification ("NDIS") stack. Link 751 represents a portion of a network (e.g., an Ethernet segment), and remote computer system 783 represents a node of the network.
[0175] Likewise, computer system 720 mcludes input/output interface 746, through which computer system 720 receives data from external sources and/or transmits data to external sources. Input/output interface 746 is coupled to modem 754 (e.g., a standard modem, a cable modem, or digital subscriber line ("DSL") modem) via link 759, through which computer system 720 receives data from and/or transmits data to external sources. As depicted in Figure 7, input/output interface 746 and modem 754 facilitate the exchange of data with remote computer system 793 via link 752. Link 752 represents a portion of a network and remote computer system 793 represents a node of the network. [0176] While Figure 7 represents a suitable operating environment for the present invention, the principles of the present invention may be employed in any system that is capable of, with suitable modification if necessary, implementing the principles of the present invention. The environment illustrated in Figure 7 is illustrative only and by no means represents even a small portion of the wide variety of environments in which the principles of the present invention may be implemented.
[0177] In accordance with the present invention, modules including applications, queue channels, queue listeners, queue managers, transfer layers, store and forward layers, and store and forward services as well as associated data, including application messages, encoded application messages, enqueue messages, enqueue responses, transfer messages, encoded transfer headers, store and forward messages, store and forward responses, session available messages, accept messages, message available messages, dequeue messages, dequeue responses, wake up notifications, and active session IDs, can be stored and accessed from any of the computer-readable media associated with computer system 720. For example, portions of such modules and portions of associated program data may be included in operating system 735, application programs 736, program modules 737 and/or program data 738, for storage in system memory 722.
[0178] When a mass storage device, such as, for example, magnetic hard disk 739, is coupled to computer system 720, such modules and associated program data may also be stored in the mass storage device. In a networked environment, program modules depicted relative to computer system 720, or portions thereof, can be stored in remote memory storage devices, such as, system memory and/or mass storage devices associated with remote computer system 783 and/or remote computer system 793. Execution of such modules may be performed in a distributed environment as previously described. [0179] The present invention may be embodied in other specific forms without departing from its spirit or essential characteristics. The described embodiments are to be considered in all respects only as illustrative and not restrictive. The scope of the invention is, therefore, indicated by the appended claims rather than by the foregoing description. All changes which come within the meaning and range of equivalency of the claims are to be embraced within their scope.
[0180] What is claimed and desired secured by United States Letters Patent is:

We Claims ;-

1. At a computer system that is network connectable along with one or more
other computer systems to a network, a method of reliably enqueing a message, the method comprising:
an act of receiving an application message configured in accordance with a messaging protocol;
an act of encoding the application message into a corresponding encoded application message;
an act of configuring an enqueue message in accordance with the messagmg protocol, the enqueue message identifying a message queue that is to queue the application message;
an act of encapsulating the encoded application message in the enqueue message; and
an act of sending the enqueue message to a queue manager that controls the identified queue such that the application message can be queued for delivery to a receiving computer system.
2. The method as recited in claim 1, wherein the act of receiving an application message configured in accordance with a messaging protocol comprises an act of a queue channel receiving a subroutine call including the application message.
3. The method as recited in claim 1, wherein the act of receiving an application message configured in accordance with a messaging protocol comprises an act of receiving a SOAP envelope.
4. The method as recited m claim 1, wherein the act of encoding the application
message into a corresponding encoded application message_comprises an act of binary
encoding the application message.
5. The method as recited m claim 4, wherein the act of binary encoding the application message comprises an act of base64 encoding the application message.
6. The method as recited in claim 1, wherein the act of encoding the application message into a correspondmg encoded application message comprises an act of text encoding the application message
7. The method as recited in claim 1, wherein the act of encoding the application message into a corresponding encoded application message comprises:
an act of providing the received application message, an encoding type, and a content type as input to a wrapping algorithm; and
an act of receiving an encoded application message as output from the wrapping algorithm.
8. The method as recited in claim 1, further comprising:
an act of encoding a session identifier along with the application message.
9. The method as recited in claim 1, wherein the act of configuring an enqueue
message in accordance with the messaging protocol comprises an act of configuring a SOAP
envelope.
10. The method as recited in claim 1, wherein the act of configuring an enqueue message in accordance with the messaging protocol comprises an act of configuring the enqueue message to identify a message session corresponding to the application message.
11. The method as recited in claim 1, wherein the act of configuring an enqueue message in accordance with the messaging protocol comprises an act of reusing at least one composable protocol element from a SOAP application message.
12. The method as recited in claim 1, wherein the act of encapsulating the encoded application message in the enqueue message comprises an act of encapsulating an encoded SOAP application message in a SOAP enqueue message.
13. The method as recited in claim 12, wherein the act of encapsulating an encoded SOAP application message in a SOAP enqueue message comprises an act of including decoding information for decoding the encoded SOAP application message within the SOAP enqueue message.
14. The method as recited in claim 1, wherein the act of sending the enqueue message to a queue manager that controls the identified queue comprises an act of using an atomic transaction context to coordinate enqueueing the application message with other application state changes.
15. The method as recited in claim 1, wherein the act of sending the enqueue message to a queue manager that controls the identified queue comprises an act of participating in a two-phase commit.
16. The method as recited in claim 1, wherein the act of sending the enqueue message to a queue manager that controls the identified queue comprises an act of using a reliable messaging protocol to send the enqueue message.
17. The method as recited in claim 1, further comprising an act of performing at least one of encrypting and digitally signing the encoded application message prior to encapsulating the application message.
18. The method as recited in claim 1, further comprising an act of performing at least one of encrypting and digitally signing the enqueue message prior to sending the enqueue message.
19. The method as recited in claim 1, further comprising:
an act of receiving an enqueue response from the queue manager.
20. The method as recited in claim 19, wherein the act of receiving an enqueue
response comprises an act of usmg a reliable messaging protocol to receive the enqueue
response.
21. The method as recited in claim 19, wherein the act of receiving an enqueue response compnses an act of using an atomic transaction context to coordinate enqueueing the application message with other application state changes.
22. The method as recited in claim 19, wherein the act of receiving an enqueue response comprises an act of participating in a two-phase commit.
23. The method as recited in claim 19, wherein the act of receiving an enqueue response comprises an cat of receiving an enqueue response that is at least one of encrypted and digitally signed.
24. At a computer system that is network connectable along with one or more other computer systems to a network, a method of reliably transferring a message, the method compnsmg:
an act of receiving a message available message indicating that an application message, configured in accordance with a messaging protocol, is available for delivery to an application;
an act of sending a dequeue message in response to the message available message, the dequeue message indicating that the application message is to be dequeued for delivery to the application,
an act of receiving a dequeue response, the dequeue response configured in accordance with the messaging protocol, the dequeue response encapsulating an encoded application message;
an act of decoding the encoded application message into the application message;
an act of sending the application message to the application.
25. The method as recited in claim 24, wherein the act of receiving a message available message indicating that an application message is available for delivery comprises an act of a queue listener receiving a message available message.
26. The method as recited in claim 24, wherein the act of receiving a message available message indicating that an application message is available for delivery comprises an act of receiving a SOAP message available message mdicating that a SOAP application message is available for delivery.
27. The method as recited in claim 24, wherein the act of sending a dequeue
message in response to the message available message comprises an act of sending a
dequeue message that identifies a message queue and the application message.
28. The method as recited in claim 24, wherem the act of sending a dequeue message in response to the message available message comprises an act of using an atomic transaction context to coordinate dequeueing the application message with other application state changes.
29. The method as recited in claim 24, wherein the act of sending a dequeue message in response to the message available message comprises an act of participating in a two-phase commit.
30. The method as recited in claim 24, wherein the act of sending a dequeue message in response to the message available message comprises an act of using a reliable messaging protocol to send the dequeue message.
31. The method as recited in claim 24, wherein the act of receiving a dequeue response comprises an act of receiving a SOAP dequeue response that encapsulates an encoded SOAP application message.
32. The method as recited in claim 24, wherein the act of receiving a dequeue response comprises an act of receivmg a dequeue response that includes information for decodmg an encoded application message encapsulated within the dequeue response.
33. The method as recited in claim 24, wherein the act of receiving a dequeue response comprises an act of receiving a SOAP dequeue response that reuses at least one composable protocol element from an encoded SOAP application message encapsulated within the dequeue response.
34. The method as recited in claim 24, wherein the act of receiving a dequeue response comprises an act of using an atomic transaction context to coordinate dequeueing the application message with other application state changes.
35. The method as recited in claim 24, wherein the act of receiving a dequeue response comprises an act of participating in a two-phase commit.
36. The method as recited in claim 24, wherein the act of receiving a dequeue response comprises an act of using a reliable messagmg protocol to receive the dequeue response.
37. The method as recited in claim 24, wherein the act of decoding the encoded application message into the application message comprises an act of decoding a text encoded application message.
38. The method as recited in claim 24, wherein the act of decoding the encoded application message into the application message comprises an act of decoding a binary encoded application message.
39. The method as recited in claim 38, wherein the act of decoding a binary encoded application message comprises an act of decoding a base64 encoded application message.
40 The method as recited m claim 24, wherein the act of decoding the encoded application message into the application message comprises:
an act of providing the encoded application message, an encoding type, and a content type as input to an unwrapping algorithm; and
an act of receiving the application message as output from the unwrapping algorithm.
41. The method as recited in claim 24, further comprising an act of performing at least one of decrypting and verifying the mtegnty of the dequeue response.
42. The method as recited in claim 24, further comprising an act of performing at least one of decrypting and verifying the mtegnty of the encoded application message prior to decodmg the encoded application message.
43. The method as recited in claim 24, wherein the act of sending the application message to the application comprises an act of sending a SOAP message to the application.
44. The method as recited in claim 24, further comprising:
an act of sending a wake-up notification to the application prior to delivering the application message to the application.
45. The method as recited m claim 24, further comprising:
an act of receiving a session available message prior to receiving the message available message, the session available message indicating that message is part of an application session;
an act of sending a session accept message in response to the session available message; and
an act of receivmg a session accept response subsequent to sending the session accept message.
46. The method as recited m claim 24, further comprising:
an act of sending a registration message indicating an interest in messages corresponding to the application, prior to receiving the message available message; and
an act of receiving a registration response indicating that the registration was successful.
47. A computer program product for use at a computer system that is network connectable along with one or more other computer systems to a network, the computer program product for unplementmg a method of reliably enqueing a message, the computer program product comprising one or more computer-readable media having stored thereon computer-executable instructions, that when executed by a processor, cause the computer system to perform the following.
receive an application message configured in accordance with a messaging protocol;
encode the application message into a corresponding encoded application message;
configure an enqueue message m accordance with the messaging protocol, the enqueue message identifying a message queue that is to queue the application • message;
encapsulate the encoded application message in the enqueue message; and send the enqueue message to a queue manager that controls the identified queue such that the application message can be queued for delivery to a receiving computer system.
48. A computer program product for use at a computer system that is network connectable along with one or more other computer systems to a network, the computer program product for implementing a method of reliably transferring a message, the computer program product comprising one or more computer-readable media having stored thereon computer-executables instructions, that when executed by a processor, cause the computer system to perform the following:
receive a message available message indicating that an application message, configured in accordance with a messaging protocol, is available for delivery to an application;
send a dequeue message m response to the message available message, the dequeue message indicating that the application message is to be dequeued for delivery to the application;
receive a dequeue response, the dequeue response configured in accordance with the messaging protocol, the dequeue response encapsulating an encoded application message;
decode the encoded application message into the application message; send the application message to the application.

Documents

Orders

Section Controller Decision Date

Application Documents

# Name Date
1 2905-DEL-2005-GPA-(16-06-2010).pdf 2010-06-16
1 2905-DEL-2005-RELEVANT DOCUMENTS [15-09-2023(online)].pdf 2023-09-15
2 2905-DEL-2005-Correspondence-Others-(16-06-2010).pdf 2010-06-16
2 2905-DEL-2005-RELEVANT DOCUMENTS [26-09-2022(online)].pdf 2022-09-26
3 2905-DEL-2005-RELEVANT DOCUMENTS [23-09-2021(online)].pdf 2021-09-23
3 2905-DEL-2005-Form-1-(13-12-2010).pdf 2010-12-13
4 2905-DEL-2005-RELEVANT DOCUMENTS [27-03-2020(online)].pdf 2020-03-27
4 2905-DEL-2005-Correspondence-Others-(13-12-2010).pdf 2010-12-13
5 2905-DEL-2005-IntimationOfGrant30-09-2019.pdf 2019-09-30
5 2905-del-2005-gpa.pdf 2011-08-21
6 2905-DEL-2005-PatentCertificate30-09-2019.pdf 2019-09-30
6 2905-del-2005-form-5.pdf 2011-08-21
7 2905-DEL-2005-Response to office action (Mandatory) [30-09-2019(online)].pdf 2019-09-30
7 2905-del-2005-form-3.pdf 2011-08-21
8 2905-del-2005-form-2.pdf 2011-08-21
8 2905-DEL-2005-Correspondence-070819.pdf 2019-08-10
9 2905-del-2005-form-18.pdf 2011-08-21
9 2905-DEL-2005-Power of Attorney-070819.pdf 2019-08-10
10 2905-del-2005-form-1.pdf 2011-08-21
10 2905-DEL-2005-Information under section 8(2) (MANDATORY) [02-08-2019(online)].pdf 2019-08-02
11 2905-del-2005-drawings.pdf 2011-08-21
11 2905-DEL-2005-Written submissions and relevant documents (MANDATORY) [02-08-2019(online)].pdf 2019-08-02
12 2905-del-2005-description (complete).pdf 2011-08-21
12 2905-DEL-2005-FORM 3 [26-07-2019(online)].pdf 2019-07-26
13 2905-del-2005-correspondence-others.pdf 2011-08-21
13 2905-DEL-2005-PETITION UNDER RULE 137 [26-07-2019(online)].pdf 2019-07-26
14 2905-del-2005-claims.pdf 2011-08-21
14 2905-DEL-2005-HearingNoticeLetter19-07-2019.pdf 2019-07-19
15 2905-del-2005-assignment.pdf 2011-08-21
15 2905-DEL-2005-Correspondence to notify the Controller (Mandatory) [12-07-2019(online)].pdf 2019-07-12
16 2905-del-2005-abstract.pdf 2011-08-21
16 Other Patent Document [01-11-2016(online)].pdf 2016-11-01
17 MTL-GPOA - MLK1.pdf ONLINE 2015-03-05
17 2905-DEL-2005_EXAMREPORT.pdf 2016-06-30
18 Abstract [19-08-2015(online)].pdf 2015-08-19
18 MS to MTL Assignment.pdf ONLINE 2015-03-05
19 Claims [19-08-2015(online)].pdf 2015-08-19
19 FORM-6-701-800(MLK).18.pdf ONLINE 2015-03-05
20 Correspondence [19-08-2015(online)].pdf 2015-08-19
20 MTL-GPOA - MLK1.pdf 2015-03-13
21 Description(Complete) [19-08-2015(online)].pdf 2015-08-19
21 MS to MTL Assignment.pdf 2015-03-13
22 Examination Report Reply Recieved [19-08-2015(online)].pdf 2015-08-19
22 FORM-6-701-800(MLK).18.pdf 2015-03-13
23 new covering letter.pdf_13.pdf 2015-05-12
23 OTHERS [19-08-2015(online)].pdf 2015-08-19
24 new covering letter.pdf 2015-05-12
24 Details under section 8.pdf 2015-05-12
25 Details under section 8.pdf 2015-05-12
25 new covering letter.pdf 2015-05-12
26 new covering letter.pdf_13.pdf 2015-05-12
26 OTHERS [19-08-2015(online)].pdf 2015-08-19
27 Examination Report Reply Recieved [19-08-2015(online)].pdf 2015-08-19
27 FORM-6-701-800(MLK).18.pdf 2015-03-13
28 Description(Complete) [19-08-2015(online)].pdf 2015-08-19
28 MS to MTL Assignment.pdf 2015-03-13
29 Correspondence [19-08-2015(online)].pdf 2015-08-19
29 MTL-GPOA - MLK1.pdf 2015-03-13
30 Claims [19-08-2015(online)].pdf 2015-08-19
30 FORM-6-701-800(MLK).18.pdf ONLINE 2015-03-05
31 Abstract [19-08-2015(online)].pdf 2015-08-19
31 MS to MTL Assignment.pdf ONLINE 2015-03-05
32 2905-DEL-2005_EXAMREPORT.pdf 2016-06-30
32 MTL-GPOA - MLK1.pdf ONLINE 2015-03-05
33 2905-del-2005-abstract.pdf 2011-08-21
33 Other Patent Document [01-11-2016(online)].pdf 2016-11-01
34 2905-del-2005-assignment.pdf 2011-08-21
34 2905-DEL-2005-Correspondence to notify the Controller (Mandatory) [12-07-2019(online)].pdf 2019-07-12
35 2905-del-2005-claims.pdf 2011-08-21
35 2905-DEL-2005-HearingNoticeLetter19-07-2019.pdf 2019-07-19
36 2905-DEL-2005-PETITION UNDER RULE 137 [26-07-2019(online)].pdf 2019-07-26
36 2905-del-2005-correspondence-others.pdf 2011-08-21
37 2905-del-2005-description (complete).pdf 2011-08-21
37 2905-DEL-2005-FORM 3 [26-07-2019(online)].pdf 2019-07-26
38 2905-del-2005-drawings.pdf 2011-08-21
38 2905-DEL-2005-Written submissions and relevant documents (MANDATORY) [02-08-2019(online)].pdf 2019-08-02
39 2905-del-2005-form-1.pdf 2011-08-21
39 2905-DEL-2005-Information under section 8(2) (MANDATORY) [02-08-2019(online)].pdf 2019-08-02
40 2905-del-2005-form-18.pdf 2011-08-21
40 2905-DEL-2005-Power of Attorney-070819.pdf 2019-08-10
41 2905-DEL-2005-Correspondence-070819.pdf 2019-08-10
41 2905-del-2005-form-2.pdf 2011-08-21
42 2905-DEL-2005-Response to office action (Mandatory) [30-09-2019(online)].pdf 2019-09-30
42 2905-del-2005-form-3.pdf 2011-08-21
43 2905-DEL-2005-PatentCertificate30-09-2019.pdf 2019-09-30
43 2905-del-2005-form-5.pdf 2011-08-21
44 2905-DEL-2005-IntimationOfGrant30-09-2019.pdf 2019-09-30
44 2905-del-2005-gpa.pdf 2011-08-21
45 2905-DEL-2005-RELEVANT DOCUMENTS [27-03-2020(online)].pdf 2020-03-27
45 2905-DEL-2005-Correspondence-Others-(13-12-2010).pdf 2010-12-13
46 2905-DEL-2005-RELEVANT DOCUMENTS [23-09-2021(online)].pdf 2021-09-23
46 2905-DEL-2005-Form-1-(13-12-2010).pdf 2010-12-13
47 2905-DEL-2005-Correspondence-Others-(16-06-2010).pdf 2010-06-16
47 2905-DEL-2005-RELEVANT DOCUMENTS [26-09-2022(online)].pdf 2022-09-26
48 2905-DEL-2005-GPA-(16-06-2010).pdf 2010-06-16
48 2905-DEL-2005-RELEVANT DOCUMENTS [15-09-2023(online)].pdf 2023-09-15
49 2905-DEL-2005-FORM-27 [11-09-2025(online)].pdf 2025-09-11

ERegister / Renewals

3rd: 30 Nov 2019

From 31/10/2007 - To 31/10/2008

4th: 30 Nov 2019

From 31/10/2008 - To 31/10/2009

5th: 30 Nov 2019

From 31/10/2009 - To 31/10/2010

6th: 30 Nov 2019

From 31/10/2010 - To 31/10/2011

7th: 30 Nov 2019

From 31/10/2011 - To 31/10/2012

8th: 30 Nov 2019

From 31/10/2012 - To 31/10/2013

9th: 30 Nov 2019

From 31/10/2013 - To 31/10/2014

10th: 30 Nov 2019

From 31/10/2014 - To 31/10/2015

11th: 30 Nov 2019

From 31/10/2015 - To 31/10/2016

12th: 30 Nov 2019

From 31/10/2016 - To 31/10/2017

13th: 30 Nov 2019

From 31/10/2017 - To 31/10/2018

14th: 30 Nov 2019

From 31/10/2018 - To 31/10/2019

15th: 30 Nov 2019

From 31/10/2019 - To 31/10/2020

16th: 30 Nov 2019

From 31/10/2020 - To 31/10/2021

17th: 09 Sep 2021

From 31/10/2021 - To 31/10/2022

18th: 15 Sep 2022

From 31/10/2022 - To 31/10/2023

19th: 25 Oct 2023

From 31/10/2023 - To 31/10/2024