InfoQ

News

Standardization Proposal for SOAP/JMS Binding

Posted by Stefan Tilkov on Jan 12, 2007 04:41 PM

Community
SOA
Topics
Web Services
Tags
IBM,
SOAP,
BEA,
Tibco,
JMS,
Sonic
In an email to the Apache Axis developers mailing list at apache.org, Sonic's Glen Daniels has announced that IBM, Sonic, TIBCO and BEA have creates a joint proposal for a standardized SOAP/JMS binding. SOAP over JMS is one of the possible choices for Web services-based reliable messaging, relying on a reliable transport instead of a SOAP-level reliability protocol such as WS-Reliable Messaging.

In the email, Glen writes:
As some of you may know, several companies (BEA, IBM, Progress, and TIBCO) have been working on a formal set of specifications for binding SOAP to the Java Message Service API. These specs consist of a) a SOAP binding, and b) a description of the "jms:" IRI scheme which is used for addressing. The specs do NOT cover an interoperable wire-level representation which could bridge different vendors' JMS implementations - though a future version might go there. This version has been designed so that plugging in a different implementation should work seamlessly without recompiling any code; as such we define a BytesMessage encapsulation of SOAP (and MTOM), a "Content-Type" JMS header, and a few other needed parts.
Here's an example of a WSDL file following the proposed specification:

<binding name="StockQuoteSoapJMSBinding" type="tns:StockQuotePortType" xmlns:soapjms="*placeholder*">
<wsdl11soap11:binding style="document"
transport="http://www.example.org/2006/06/soap/bindings/JMS/"/>

<!-- We want this binding to use a particular CF class -->
<soapjms:connectionFactoryName>
sample.jms.ConnectionFactory
</soapjms:connectionFactoryName>
<!-- Specify PERSISTENT delivery mode -->
<soapjms:deliveryMode>2</soapjms:deliveryMode>

<operation name="GetLastTradePrice">
<wsdl11soap11:operation soapAction="http://example.com/GetLastTradePrice"/>
<input>
<wsdl11soap11:body use="literal"/>
</input>
<output>
<wsdl11soap11:body use="literal"/>
</output>
</operation>
</binding>

<service name="StockQuoteService">
<documentation>My first service</documentation>
<port name="StockQuotePort" binding="tns:StockQuoteSoapBinding">
<wsdl11soap11:address location="http://example.com/stockquote"/>
</port>
<port name="StockQuotePort_jms" binding="tns:StockQuoteSoapJMSBinding">
<wsdl11soap11:address location="jms:myQueue?targetService=stockquote"/>
</port>
</service>

3 comments

Reply

Good stuff but I think RM is better by Paul Fremantle Posted Jan 13, 2007 5:08 AM
Re: Good stuff but I think RM is better by Stefan Tilkov Posted Jan 14, 2007 1:15 PM
Re: Good stuff but it is just a start by Boris Lublinsky Posted Jan 28, 2007 10:06 AM
  1. Back to top

    Good stuff but I think RM is better

    Jan 13, 2007 5:08 AM by Paul Fremantle

    Firstly, JMS not JMI! But typos aside, I think this is an important and useful piece of work. This will enable WSDL tool authors to approach SOAP/JMS in a consistent manner, and make it easier to use SOAP/JMS. The comparison between SOAP/JMS and SOAP/WSRM is interesting. Here is my simple summary. SOAP/JMS strengths are if you have an existing managed, production JMS environment, and you want to expand to be more SOA-focussed, and your tools support SOAP/JMS. However, the reliance that JMS has on a JNDI directory is a problem. Very few JMS setups and JNDI installations are truly global, or even company-wide. A more usual practise is to have a JNDI specific to an application server cluster. Because the WSDLs defined here are relative to a given JNDI, this makes it hard to define a true cross-department/cross-site SOA using SOAP/JMS. You also end up with a more complex topology than with HTTP because of the number of entities you end up with in a JMS setup (two destinations and a connectionfactory for each req-resp interaction). WSRM has the disadvantage of being newer, less tried and tested. However, the model is much cleaner. For example you do not need new WSDL tools to use it, because it shares the existing HTTP URLs with no change. This means that its much less of a change to move from SOAP/HTTP to add WSRM. And of course HTTP URLs scale widely and support truly global operations. All that said, I don't want to detract from the value of this announcement for those who want to move from the messaging world of JMS to the services world of SOAP and WSDL. Paul PS let me announce my bias: I'm co-Chair of the OASIS WS-RX committee standardizing WSRM!

  2. Back to top

    Re: Good stuff but I think RM is better

    Jan 14, 2007 1:15 PM by Stefan Tilkov

    Too bad, a SOAP/JMI binding would have been really innovative :-) Thanks for pointing out the typo. Is there a specific reason you don't stress the interoperability aspect? Without AMQP, I consider this to be the most important benefit of WSRM.

  3. Back to top

    Re: Good stuff but it is just a start

    Jan 28, 2007 10:06 AM by Boris Lublinsky

    This is very good, but I would rather see messaging binding then JMS. Whether we like it or not SOA is an enterprise wide initiative and modern enterprises are more then Java. There is .Net and there is this mainframe stuff. So standartization for JMS is solving very small part. The whole purpose of web services is interoperability, but JMS binding means what? Interoperability only for java. This will significantly limit adoption. Another issue is the one outlined by Paul - JNDI reliance. This also significantly limits enterprise-wide reach And finally the interaction style issues. Majority of JMS applications today are asynchronous request/reply - style not quite supported by WS-I. I know, model this as two asynchronous invocations, but this creates tight coupling. The only reasonable options is WS-Addressing, but its adoption is still far from universal. Besides JMS has its own - reply_to. So although, this is the great start, there are still a lot of unresoved issues

Exclusive Content

VMware Infrastructure 3 Book Excerpt and Author Interview

VMware Infrastructure 3: Advanced Technical Design Guide and Advanced Operations Guide provides a wealth of practical insights into setting up virtualization in todays corporate environments.

Architectures of extraordinarily large, self-sustaining systems

Can a system that is so large it cannot be comprehended be "designed" in a conventional sense? The foundations of computing are about to change. In this talk, Richard P. Gabriel explores why and how.

Using Ruby Fibers for Async I/O: NeverBlock and Revactor

Ruby 1.9's Fibers and non-blocking I/O are getting more attention - we talked to Mohammad A. Ali of the NeverBlock project and Tony Arcieri of the Revactor project.

Agile and Beyond - The Power of Aspirational Teams

Tim Mackinnon talks about the aspirations behind the Agile principles and practices, the desire to become efficient, to write quality code which does not end up being thrown away.

Concurrency: Past and Present

Brian Goetz discusses the difficulties of creating multithreaded programs correctly, incorrect synchronization, race conditions, deadlock, STM, concurrency, alternatives to threads, Erlang, Scala.

ActionScript 3 for Java Programmers

Often the hardest part of changing technologies is language syntax differences. This new article provides Java developers with a transition guide to Actionscript which forms the foundation of Flex.

Neal Ford On Programming Languages and Platforms

Neal Ford talks about having multiple languages running on one of the two major platforms: Java and .NET. He also presents the advantages offered by Ruby compared to static languages like Java or C#.

Future Directions for Agile

David Anderson talks about the history of Agile, the current status of it and his vision for the future. The role of Agile consists in finding ways to implement its principles.