Today we are going to talk about distributed transactions, a common component of enterprise systems. First some definitions. Looking through past EXTOL blogs, the term transaction is used in many different ways. You might have specific meanings for the word in your own business. The kinds of transactions I’m talking about here are those at the software component level. These transactions may or may not mirror a higher level business transaction. There are many locations inside a software system where data is exchanged between components, but we usually don’t describe them all with the word ‘transaction’. The term is usually reserved for an exchange were certain conditions are maintained. These extra conditions are nearly always the principles of ACID [A]tomicity, [C]onsistency, [I]solation, and [D]urability. You can look up the details on Wikipidia, but in short, these ideas are important to keep ‘bad’ things from happening as the exchange is performed (such as interference from other actions executing in the system, unexpected crashes, etc…).
These principles aren’t new, databases have been operating under these conditions for a long time. It is less common to see them upheld in exchanges that involve more than one transactional resource, like inserting data into two separate databases at the ‘same time’ (as part of one transaction). This scenario becomes almost a necessity in distributed systems, and also for integration software (whose job is to bridge disparate systems). This new type of transaction involving multiple participants is called a ‘distributed transaction’. Distributed transactions have also been around for a while, but usually implemented in proprietary, or system specific way. Java supports an API for XA transactions, a distributed transaction specification by the Open Group. Many database and message system vendors now support XA drivers for their products. In the XA world, a component called the Transaction Manager coordinates different transaction participants through a series of steps specially designed to uphold the required conditions. It’s our goal that the next generation EBI will include and/or interface with an XA Transaction Manager, not only for our internal use, but to enable distributed transactions across our user’s resources.