11.7.2. 控制事务
简介
此流程列表概述了控制应用程序中使用 JTA API 的不同事务的不同方法。
11.7.2.1. 开始交易
此流程演示了如何开始新交易。无论您运行配置了 Jakarta Transactions 或 JTS 的事务管理器™,API 都相同。
获取
UserTransaction
实例.如果 EJB 使用
@TransactionManagement(TransactionManagement(TransactionManagementType.BEAN)
注释,则可以使用 Java 命名和目录接口、注入或 EJB 上下文获取实例。使用 Java 命名和目录界面获取实例。
new InitialContext().lookup("java:comp/UserTransaction")
使用注入获取实例。
@Resource UserTransaction userTransaction;
使用 EJB 上下文获取实例。
在无状态/状态 Bean 中:
@Resource SessionContext ctx; ctx.getUserTransaction();
在消息驱动型 Bean 中:
@Resource MessageDrivenContext ctx; ctx.getUserTransaction()
连接到数据源后,请致电
UserTransaction.begin(
)。try { System.out.println("\nCreating connection to database: "+url); stmt = conn.createStatement(); // non-tx statement try { System.out.println("Starting top-level transaction."); userTransaction.begin(); stmtx = conn.createStatement(); // will be a tx-statement ... } }
结果
事务开始。在提交或回滚事务之前,数据源的所有用途都是事务性。
有关完整示例,请参阅 Jakarta Transactions 交易示例。
EJB 的优势之一(与 CMT 或 BMT 一起使用)是,容器管理事务处理的所有内部,即您可免于将事务作为 JBoss EAP 容器之间的 XA 事务或事务分配的一部分。
11.7.2.1.1. 嵌套事务
嵌套交易允许应用创建嵌入在现有事务中的事务。在此模型中,多个子事务可以递归地嵌入到事务中。子事务可以提交或回滚,无需提交或回滚父事务。但是,提交操作的结果取决于所有交易先锋的承诺。
有关具体实施的信息,请参阅 Narayana 项目文档。
嵌套事务仅在与 JTS 规范一起使用时才可用。嵌套事务不是 JBoss EAP 应用服务器的支持功能。此外,许多数据库供应商不支持嵌套交易,因此请在向应用添加嵌套事务前咨询您的数据库供应商。