Arun Gupta has been describing the ins and outs of Project Glassfish and Project Tango for some time, and he has recently pulled together the key aspects of this emerging interop platform in a thorough document that provides an overview of Tango.
Project Tango is an open source implementation from Sun Microsystems of WS-* Web services specifications. Moreover, Tango benefits from considerable effort put into Tango by Sun and Microsoft to ensure it provides interoperability with .NET 3.0.
Project Tango does not introduce a new programming model. In Gupta’s words, it leverages the existing JAX-WS and EJB programming models and allows developers to define Security, Reliability, and Transactional capability on the endpoints by bundling an additional configuration file with an application.
Let’s take a look at the Reliability part of the equation as described by Gupta.
The Reliability support in Tango is an implementation of February 2005 WS-Reliable Messaging and WS-Reliable Messaging Policy Assertion specifications. WS-Reliable Messaging defines a wire-based messaging protocol, with a SOAP binding, to identify, track, and manage the reliable delivery of messages between two parties, a Source (for example, Client) and a Destination (for example, Endpoint). In a nutshell, the Source periodically asks the Destination to acknowledge which messages have arrived, and then based on that information, resends messages if necessary. This allows the Destination to reconstruct an exact stream of messages from the Source in the order in which they were sent. WS-Reliable Messaging introduces Reliable Messaging Source (RMS) and Reliable Messaging Destination (RMD) that encapsulate the functionality of send, resend, and reconstruct the stream of messages on Source and Destination respectively.
The extent to which RMD, and thus Destination, is able to reconstruct the message stream is called Delivery Assurance in Reliable Messaging terms.
There are three levels of Delivery Assurance provided by RMD:
* AtMostOnce – Messages will be delivered at most once without duplication or an error will be raised. It is possible that some messages in the sequence may not be delivered.
* AtLeastOnce – Every message sent will be delivered or an error will be raised. Some messages may be delivered more than once.
* InOrder – All messages are delivered in the order that they were sent. This level requires that the sequence observed by the ultimate receiver be non-decreasing. It says nothing about duplications or omissions.
Without any Reliable Messaging support from machine and Web service runtime, Source and Destination are responsible for the recovery of messages. In the messaging system with Reliable Messaging support, the messages between Source and Destination are exchanged through RMS and RMD that are embedded within the Web service runtime. Now using the Reliable Messaging protocol RMS and RMD can communicate in a reliable way, on behalf of Source and Destination respectively, and fulfilling the delivery assurance.