Transaction management is a common topic in enterprise Java. However, the diversity of transaction choices is not immediately apparent. Many applications simply use JTA or JDBC transactions without consideration of the implications. This talk illustrates Spring’s support for various kinds of transactions: including native database transactions, ORM transactions and messaging transactions. The performance characteristics of each option will be contrasted with the corresponding transactional guarantees, highlighting the tradeoffs and their relevance in real-life scenarios.