第 5 章 使用 API 方法以编程方式管理 JTA 事务


您可以通过注入 用户交易 来以编程方式管理事务边界。以下章节演示了如何管理 JTA 事务并使用 API 方法定义事务界限。

5.1. 使用 API 方法定义事务边界

您可以通过调用 begin ()commit ()rollback () 方法来注入 用户事务 和管理事务边界。

流程

  1. 注入 用户事务 接口:

    src/main/java/org/acme/SantaClauseService.java

    @ApplicationScoped
    public class SantaClausService {
    
        @Inject ChildDAO childDAO;
        @Inject SantaClausDAO santaDAO;
        @Inject UserTransaction transaction;
    }
    Copy to Clipboard Toggle word wrap

  2. 使用事务分离方法控制事务:

    src/main/java/org/acme/SantaClauseService.java

    import javax.transaction.Transactional;
    import javax.inject.Inject;
    import javax.transaction.SystemException;
    import javax.transaction.UserTransaction;
    
    @ApplicationScoped
    public class SantaClausService {
    
        @Inject ChildDAO childDAO;
        @Inject SantaClausDAO santaDAO;
        @Inject UserTransaction transaction;
    
        public void getAGiftFromSanta(Child child, String giftDescription) {
            // some transaction work
            try {
                transaction.begin(); 
    1
    
                Gift gift = childDAO.addToGiftList(child, giftDescription);
                santaDAO.addToSantaTodoList(gift);
                transaction.commit();
            }
            catch(SomeException e) {
                // do something on Tx failure
                transaction.rollback(); 
    2
    
            }
        }
    }
    Copy to Clipboard Toggle word wrap

    1
    将您的事务代码放在 transaction.begin ()transaction.commit () 之间。
    2
    立即中止事务。
    注意

    您不能在事务由 @Transactional 调用开始的方法中使用 UserTransaction al。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat