I'd propose that a test harness that used the JBossMQ JMS implementation as an open source option would add a lot of value. "James M Snell" <[EMAIL PROTECTED]> on 10/14/2002 01:00:09 PM Please respond to [EMAIL PROTECTED] To: [EMAIL PROTECTED] cc: (bcc: Kevin Bedell/Systems/USHO/SunLife) Subject: Async in Axis [Scanned for known viruses] Now that Axis 1.0 has been released, I and a number of other IBMers have started talking with David Chappell and the other Sonic folks about what we would like to in the way of support for async operations and JMS within Axis. There are a number of things that we're currently looking at: 1. Changes to Axis internals that would uncouple the request/response handler flows 2. Closing the gaps that exist between WSIF and Axis particularly in the realm of the async operation and JMS providers 3. Establishing a JMS test harness 4. Figuring out how to expose async client API's given that JAX-RPC just don't do it At the end of this note is a description of my proposal for how to get started on item #1. Regarding #2, I'll post some initial comments on Monday.... Regarding #3, we will be setting up a server that will run SonicMQ, MQSeries and some open source JMS provider (most likely OpenJMS unless others have a better suggestion). This will allow functional tests for the JMS transport to be built and tested against multiple JMS implementations. There is currently no timeline on this, but it is getting done. Regarding #4, this is a much more difficult issue given that the "standard" interfaces (JAX-RPC) do not support async operations in any way. We need to have a serious discussion about how to enable this. =============================== Axis Internals Currently within Axis 1.0, request and response handler flows are executed synchronously. This limits our ability to properly leverage async transports and programming models. After talking it over with the Sonic folks, we've agreed that some fairly significant changes should be made *internally* that would allow async request/response flows at two distinct layers -- 1) within the Engine and 2) within the Transport. Attached is a proposed "Axis Internal Message Exchange Interface" that would sit between the Axis Call Object and the Axis Engine and between the Axis Engine and the Pluggable Transports. This interface implements a send/receive event model that provides a huge amount of flexibility without adding much complexity. Below is a simple example that shows basically how this interface works: MessageContext context = <code to create MessageContext> MessageExchange exchange = <code to create MessageExchange> MessageExchangeStatusListener statusListener = new MessageExchangeStatusListener() { public void onStatus(MessageExchangeStatus status) { if ( status instanceof MessageExchangeStatus.MessageReceived) { MessageContext response = exchange.receive( // get the specific message that was received status.getMessageExchangeCorrelator()); } else if { status instanceof MessageExchangeStatus.MessageReceivedException) { // respond to the exception } else if ( status instanceof MessageExchangeStatus.MessageSentException) { // respond to the exception } } }; exchange.setMessageExchangeStatusListener(statusListener); exchange.send(context); Again, *THIS IS NOT A CLIENT FACING API*. This is a mechanism that would be entirely interal to Axis. It would sit under the Call object and between the Axis Engine and the Transport. Essentially, the code above replace the current AxisEngine.invoke(MessageContext) and Transport.invoke(MessageContext) operations. Please review the code. Get basic feel for how it is structured, then we can talk/debate the details, threading issues, etc and work from there to develop the right solution. - James Snell IBM Emerging Technologies [EMAIL PROTECTED] (559) 587-1233 (office) (700) 544-9035 (t/l) Programming Web Services With SOAP O'Reilly & Associates, ISBN 0596000952 Have I not commanded you? Be strong and courageous. Do not be terrified, do not be discouraged, for the Lord your God will be with you whereever you go. - Joshua 1:9 (See attached file: AxisInternalMessageExchange.zip) --------------------------------------------------------------------------- This e-mail message (including attachments, if any) is intended for the use of the individual or entity to which it is addressed and may contain information that is privileged, proprietary , confidential and exempt from disclosure. If you are not the intended recipient, you are notified that any dissemination, distribution or copying of this communication is strictly prohibited. If you have received this communication in error, please notify the sender and erase this e-mail message immediately. ---------------------------------------------------------------------------
AxisInternalMessageExchange.zip
Description: Zip archive