第 4 章 使用注解以声明性方式管理 JTA 事务


您可以通过根据注解自动启动并提交 JTA 事务,让容器对事务进行抽样。以下章节演示了如何使用 @Transactional 注释来管理 JTA 事务和定义事务边界。

4.1. 以声明性方式定义事务边界

您可以使用 @Transactional 来控制在方法级别或类级别的任何 CDI bean 上的事务边界,以确保每个方法都是事务的。这也适用于 REST 端点。

流程

  • 使用条目方法上的 @Transactional 注释定义事务范围:

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

    import javax.inject.Inject;
    import javax.enterprise.context.ApplicationScoped;
    import javax.transaction.Transactional;
    
    @ApplicationScoped
    public class SantaClausService {
    
        @Inject ChildDAO childDAO;
        @Inject SantaClausDAO santaDAO;
    
        @Transactional 
    1
    
        public void getAGiftFromSanta(Child child, String giftDescription) {
            // some transaction work
            Gift gift = childDAO.addToGiftList(child, giftDescription);
            if (gift == null) {
                throw new OMGGiftNotRecognizedException(); 
    2
    
            }
            else {
                santaDAO.addToSantaTodoList(gift);
            }
        }
    }
    Copy to Clipboard Toggle word wrap

    1
    @transactional 注释定义您的事务边界,并将此调用嵌套在事务中。
    2
    RuntimeException 跨事务边界时,事务管理器会回滚事务。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat