16.1. Problems with Transaction Management16.1.1.16.1.1.1. Managing Transactions with JDBC Commit and Rollback16.2. Choosing a Transaction Manager Implementation16.2.1. Problem16.2.2. Solution16.2.3. How It Works16.3. Managing Transactions Programmatically with the Transaction Manager API16.3.1. Problem16.3.2. Solution16.3.3. How It Works16.4. Managing Transactions Programmatically with a Transaction Template16.4.1. Problem16.4.2. Solution16.4.3. How It Works16.5. Managing Transactions Declaratively with Transaction Advices16.5.1. Problem16.5.2. Solution16.5.3. How It Works16.6. Managing Transactions Declaratively with the @Transactional Annotation16.6.1. Problem16.6.2. Solution16.6.3. How It Works16.7. Setting the Propagation Transaction Attribute16.7.1. Problem16.7.2. Solution16.7.3. How It Works16.7.3.1. The REQUIRED Propagation Behavior16.7.3.2. The REQUIRES_NEW Propagation Behavior16.7.3.3. Setting the Propagation Attribute in Transaction Advices, Proxies, and APIs16.8. Setting the Isolation Transaction Attribute16.8.1. Problem16.8.2. Solution16.8.3. How It Works16.8.3.1. The READ_UNCOMMITTED and READ_COMMITTED Isolation Levels16.8.3.2. The REPEATABLE_READ Isolation Level16.8.3.3. The SERIALIZABLE Isolation Level16.8.3.4. Setting the Isolation Level Attribute in Transaction Advices, Proxies, and APIs16.9. Setting the Rollback Transaction Attribute16.9.1. Problem16.9.2. Solution16.9.3. How It Works16.10. Setting the Timeout and Read-Only Transaction Attributes16.10.1. Problem16.10.2. Solution16.10.3. How It Works16.11. Managing Transactions with Load-Time Weaving16.11.1. Problem16.11.2. Solution16.11.3. How It Works16.12. Summary