setTransactionID() Operation
Syntax |
NONE
| |
---|---|---|
Semantics | Sets the current transaction ID to the specified String value. The transaction ID has a maximum length of 40 bytes. Longer values are cut by the xUML Runtime. | |
Examples |
NONE
|
The Transaction ID identifies a transaction. It is a unique number used to trace service calls through the call stack of multiple service calls.
- Runtime 2019.9 Clients calling a service running on the Bridge can provide a transaction ID in HTTP header X-Transaction-ID or xTransactionId (in JMS context).
- SOAP clients can also use the SOAP headers to provide a transaction ID.
- If an xUML service is called without providing a transaction ID, the xUML Runtime will generate such an ID.
This ID will be passed on through the call stack of the xUML service, so that the whole transaction can be traced. This can be useful, when analyzing the log file in case of error.
For more information on how to provide a transaction ID in the SOAP header refer to SOAP Adapter Reference.
In the Analyzer, the transaction log of an xUML service will be sorted by transaction ID.
How to Limit the Size of a Transaction ID
Given a transaction ID aTransactionID, for example taken from the process ID of a persistent state instance
local aTransactionID = self.getProcessID();
You can make sure that the transaction ID is a proper at-most-40-byte-sequence by doing the following preprocessing:
Cut the transaction ID after 40 bytes and take care that multibyte characters are not split in between. This is done by calculating the amount of superfluous bytes in a 40 character sequence.
CODElocal superBytes = aTransactionID.substring(0, 40).transcodeToBlob('utf-8').blobLength() - 40;
Next, reduce the transaction ID by the calculated amount of characters.
CODEsetTransactionID(aTransactionID.substring(0, 40 - superBytes));
Related Pages: