In service oriented architectures, just as with any composite application environment, the biggest problem associated with management isolating a problem to a specific service. Is a service slow because of internal problems or because it has called another service and is waiting on a response? Is the fault seen by an end user caused by the Enterprise Service Bus or is it within one of the actual back end services? Solving such problems is the function of BMC Application Transaction Tracing (BATT). BATT handles formal services very well since it gathers the needed information by intercepting the data of the service requests and responses directly at the protocol level. BATT supports virtually all common HTTP and JMS providers including Microsoft, IBM, Oracle, TIBCO, JBoss, and Apache among others. This allows BATT to monitor solely based on the service interfaces without a dependency on the internal runtimes.
One of the challenges of implementing BATT, however, is that it requires a “Transaction Id” to uniquely identify each service call and relate those calls together as part of a larger business transaction. While BATT can get this transaction id from anywhere in the SOAP Header, SOAP Body, or the transport metadata (HTTP Headers, JMS Properties, …), there must be such a field. It is often difficult to get multiple services to agree on this.
This same issue applies across all Service Monitoring solutions and having such a transaction id can be greatly useful to the services themselves so the global community has defined a standard location for this in the WS-Addressing standard. At the simplest level, WS-Addressing provides a MessageID field in the SOAP Header to hold this unique identifier. Where you are handling more complex transactions (e.g. one request generates multiple responses or is fanned out to multiple providers), WS-Addressing also provides a RelatesTo field to hold the MessageID of related messages. (For people used to MQ or JMS work, this is much like the Correlation Id field in those transport headers). BATT V7 provides full out-of-the-box support for the WS-Addressing standard so, in the attached doc, I’ll first take a bit of time to discuss the standard itself and then finish up with showing you how to use the WS-Addressing Fields in BATT.