4.1.4.1.1.4.1.1.1. Programmatic and Declarative Transaction Management4.2. Problems with Transaction Management4.2.1. Managing Transactions with JDBC Commit and Rollback4.3. Choosing a Transaction Manager Implementation4.3.1. Problem4.3.2. Solution4.3.3. How It Works4.4. Managing Transactions Programmatically with the Transaction Manager API4.4.1. Problem4.4.2. Solution4.4.3. How It Works4.5. Managing Transactions Programmatically with a Transaction Template4.5.1. Problem4.5.2. Solution4.5.3. How It Works4.6. Managing Transactions Declaratively with Transaction Advices4.6.1. Problem4.6.2. Solution4.6.3. How It Works4.7. Managing Transactions Declaratively with the @Transactional Annotation4.7.1. Problem4.7.2. Solution4.7.3. How It Works4.8. Setting the Propagation Transaction Attribute4.8.1. Problem4.8.2. Solution4.8.3. How It Works4.8.4. The REQUIRED Propagation Behavior4.8.5. The REQUIRES_NEW Propagation Behavior4.8.6. Setting the Propagation Attribute in Transaction Advices, Proxies, and APIs4.9. Setting the Isolation Transaction Attribute4.9.1. Problem4.9.2. Solution4.9.3. How It Works4.9.4. The READ_UNCOMMITTED and READ_COMMITTED Isolation Levels4.9.5. The REPEATABLE_READ Isolation Level4.9.6. The SERIALIZABLE Isolation Level4.9.7. Setting the Isolation Level Attribute in Transaction Advices, Proxies, and APIs4.10. Setting the Rollback Transaction Attribute4.10.1. Problem4.10.2. Solution4.10.3. How It Works4.11. Setting the Timeout and Read-Only Transaction Attributes4.11.1. Problem4.11.2. Solution4.11.3. How It Works4.12. Managing Transactions with Load-Time Weaving4.12.1. Problem4.12.2. Solution4.12.3. How It Works4.13. Summary