Tuesday, March 17, 2009

Debugging Multi-hop SOA Interactions Simply?

Hi y'all! Back to blogging for now, it seems. :)

A brief Glen-update before we proceed to the subject of this post - I've been having a pretty good year so far, and have been doing a lot of thinking about social technologies and how to make them work better together. I've been doing a fair bit of tweeting, and enjoying the progress on foaf+ssl. I'm consulting right now, helping out a university with an ESB RFP, which is fun in that I'm enjoying being on the client side of one of these things for once. :) I've got my eyes open looking for the Next Step, which might be continued consulting or might involve taking a Real Job. Will keep you posted.

OK. So I've been thinking about debugging complex SOA interactions which might involve multiple layers of intermediaries - proxies on the client side, ESBs, etc. What I want is either the ability to collect log information in a message as it flows through nodes along a message path, or the ability to have each node log some information to a remote logging service, correlated in some way so it's clear all the logs relating to a given message flow (process/composition) are together. There are certainly some SOA Management products out there on the market (AmberPoint, Actional, etc) which can handle this kind of thing, but I'd like a simple, ideally Open Source solution.

Along these lines, are there any common SOAP extensions that function similarly to either traceroute or syslog? What I want is something like either this:

<soap:header>
<dbg:tracepad role="next" relay="true">
<step nodeid="identifier of this node">
Each node along the way has the opportunity/responsibility to
add a "step" containing whatever information it feels like injecting.
It then ensures that this header is inserted into the outgoing
message(s) heading further down the message path.
</step>
</dbg:tracepad>
</soap:header>


...where debugging info can collect in the message, or like this:

<soap:header>
<dbg:log role="next" relay="true">
<id>correlator-for-this-process</id>
<logger>http://example.com/logService</logger>
</dbg:log>
</soap:header>


...where each node gets a pointer to a logging service (could even literally be syslog, or Hyperic, or Nagios) and some configuration including in particular a correlation ID. Then clearly it's up to the logging service to show you nicely structured output with everything lined up.

Of course both of these ideas require plugins (Axis2 Modules, JAX-WS Handlers, etc) that support the desired functionality for all the platforms you want it to work with.

Is this a niche waiting to be filled, or does this exist already in some non-proprietary form?

UPDATE : look at that, Mark Little was clearly thinking along the same lines recently - check out his InfoQ article asking about SOA testing tools...