搜索

11.7.2. 控制事务

download PDF

简介

此流程列表概述了控制应用程序中使用 JTA API 的不同事务的不同方法。

11.7.2.1. 开始交易

此流程演示了如何开始新交易。无论您运行配置了 Jakarta Transactions 或 JTS 的事务管理器™,API 都相同。

  1. 获取 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()
  2. 连接到数据源后,请致电 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 应用服务器的支持功能。此外,许多数据库供应商不支持嵌套交易,因此请在向应用添加嵌套事务前咨询您的数据库供应商。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.