如何使用 BMT 将客户端 UserTransaction 传播到无状态会话 bean

2023-12-07

使用 CMT 的此场景有效:

  • 具有 CMT 的无状态会话 bean,一种注释方法@TransactionAttribute(TransactionAttributeType.MANDATORY)。在此方法中,使用 XA 数据源和普通 JDBC 将记录写入 RDBMS。

  • 独立客户端(单独的 JVM、命令行 Java 应用程序)正在获取UserTransaction从应用程序服务器(通过 JNDI 查找), 启动事务并调用 EJB。

  • 如果客户提交UserTransaction,该记录被写入数据库。

  • 如果客户端回滚UserTransaction,该记录未写入数据库。
  • 在PostgreSql日志文件中,可以通过BEGIN、COMMIT或ROLLBACK看到准备好的事务

  • 如果客户端在调用 EJB 之前没有启动事务,则javax.ejb.EJBTransactionRequiredException被抛出(正如预期的那样,TransactionAttributeType.MANDATORY).

现在我从 CMT 切换到 BMT

  • 同样,如果客户端在调用 EJB 之前没有启动事务,则会出现javax.ejb.EJBTransactionRequiredException被抛出(如预期,TransactionAttributeType.MANDATORY)。

  • 如果我打电话sessionContext.getUserTransaction().getStatus(),它总是报告Status.STATUS_NO_TRANSACTION.

  • 如果客户端调用,记录总是写入数据库commit or rollback.

  • 在 PostgreSql 日志文件中,没有准备好的事务,只有简单的插入命令。

EJB的来源:

@Remote(DemoIfc.class)
@Stateless(name = "DemoBmt")
@TransactionManagement(TransactionManagementType.BEAN)
public class DemoBmt implements DemoIfc {
    @Resource
    private SessionContext sessionContext;

    @TransactionAttribute(TransactionAttributeType.MANDATORY)
    public String ping(final String s) throws SystemException {
        try {
            System.out.println("TX: status: "
                    + this.sessionContext.getUserTransaction().getStatus());
        } catch (Exception e) {
            System.out.println("TX: status: " + e.getMessage());
        }

        try {
            writeIntoDb();
            if (s.startsWith("crash")) {
                throw new SystemException("Simulated crash");
            }
            return s.toUpperCase();
        } catch (NamingException e) {
            throw new SystemException(e.getMessage());
        } catch (SQLException e) {
            throw new SystemException(e.getMessage());
        }
    }
}

客户来源:

final UserTransaction ut = (UserTransaction) initialContext
        .lookup("UserTransaction");
try {
    ut.begin();
    System.out.println(demo.ping("crash: DemoBmt with UT"));
    ut.commit();
} catch (Exception ex) {
    System.out.println("Expected rollback");
    ut.rollback();
}

我使用的是 JBoss 6.0.0 Final。

如何使用 BMT 将客户端 UserTransaction 正确传播到 EJB 中?


BMT bean 无法参与现有事务

From EJB 3.1 规范:

13.6.1 Bean 管理的事务划分

容器必须管理客户端对企业 Bean 的调用 实例与 bean 管理的事务划分如下。当一个 客户端通过企业 bean 之一调用业务方法 客户端视图,容器暂停任何可能的事务 与客户请求相关......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 BMT 将客户端 UserTransaction 传播到无状态会话 bean 的相关文章

  • 使用 CURL post 方法的 Google 翻译 API

    有人有过使用 Google 翻译 API v2 在 POST 方法上使用 PHP CURL 翻译 HTML 的经验吗 我已经尝试了 github 上的几个代码和库 但没有一个适合我 我发现的是 GET 方法 由于通过 GET 或查询字符串解
  • 访问容器管理 Bean 中的事务状态

    我有一个 Stateless EJB http en wikipedia org wiki Enterprise JavaBean使用容器管理的事务 有没有办法访问 状态 javax transaction UserTransaction
  • Spring、Hibernate 与 google 应用引擎

    项目名称 CarpoolDB 我已在另一个应用程序名称 Carpool 中添加了该项目的 jar 运行拼车应用程序时 我遇到以下异常 项目 拼车 在这里 我遇到异常 因为 carpoolService 在作为 Google Web应用程序
  • 无法在 Eclipselink 上合并日期

    我的会话 bean 不会对托管实体执行更新 我已经包含了相关类的代码 当我使用 prime faces 计划组件修改事件的日期字段并将修改后的实体传递给会话 bean 并调用 em merge event 时 实体管理器不会尝试更新实体 并
  • 在 Java EE 应用程序开发中使用 Docker

    我将添加300点作为赏金 我最近开始仔细研究 Docker 以及如何使用它来更快地让团队的新成员启动并运行开发环境 以及将新版本的软件交付到生产环境 我有一些关于如何以及在什么阶段将 Java EE 应用程序添加到容器的问题 据我所知 有多
  • 如何调试 MySQL 上的锁等待超时?

    在我的生产错误日志中 我偶尔会看到 SQLSTATE HY000 一般错误 1205 超过锁等待超时 尝试 重新开始交易 我知道当时哪个查询正在尝试访问数据库 但是有没有办法找出哪个查询在那个精确时刻拥有锁定 暴露这一点的是这个词交易 从该
  • 詹金斯可以在构建操作之间添加睡眠时间吗?

    我正在 Jenkins 中启动 JBoss 服务器作为构建操作 下一个操作将运行一组测试 我需要在两个操作之间添加睡眠时间 有谁知道如何轻松做到这一点 可以使用sleep进入 Jenkins 管道 该步骤包含在管道 基本步骤 https p
  • Java webapp部署:爆炸还是不爆炸?

    一个非常简单的问题 我有一个 war 40MB 文件要在 JBoss 上运行 部署的最佳实践是什么 war 文件是否应该以分解格式部署 或不 我问是因为如果它爆炸了 那么我可以选择随时更新我的 属性文件 并且不需要每次更改属性文件时都进行新
  • 在 Grails 下如何防止异常导致事务回滚?

    我的 Grails 服务遇到一个问题 即与事务无关的吞没异常会导致事务回滚 即使它与域对象的持久性无关 在我的服务中 我有一些类似的东西 updateSomething domainObj def oldFilename domainObj
  • TransactionScope 超时过早发生?

    我在用着TransactionScope进行一些批量插入和更新 问题是 即使我设置了超时 我也会在 30 分钟长的操作中遇到超时异常TransactionScope到一小时 此外 在异常之后 它会插入看似随机数量的批次记录 例如 最后一个操
  • Maven 管理的 Java EE 应用程序中 JBoss 提供的库

    这对我来说实际上不太可能 但网上似乎没有关于将 JBoss 提供的依赖项导入 Maven 管理的 Java EE 应用程序以在其中部署的直接答案 据我所知 有两件事与这个问题有关 那就是jboss as client外部 就 JVM 而言
  • JBoss 中的 jndi.properties

    有没有办法配置 JNDI 以便查找首先检查 localhost 如果没有找到匹配的名称 则会自动发现其他 jndi 服务器 我对文档的理解是 这是使用集群时的默认行为 16 2 2 客户端配置 http docs jboss org jbo
  • 如何获取Oracle中命名事务的名称?

    我想在触发器中使用事务的名称 以便将其写入列中 我尝试了这个 在 SQL Developer 中 set transaction name hello select DBMS TRANSACTION LOCAL TRANSACTION ID
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 业务代表与服务定位器

    Business Delegate 和 Service Locator 之间有什么区别 两者都负责封装查找和创建机制 如果 Business Delegate 使用 Service Locator 来隐藏查找和创建机制 那么 Busines
  • 是否可以从 JBoss 容器中部署的所有 .war 文件中读取属性文件

    我已成功将 war 部署到 Jboss Web 容器 其中包含并读取位于 META INF groupid dir artifactid dir 下的 pom properties 为了访问该文件 我在同一 war 中的 JSP 中使用了以
  • 启动 jboss 服务器时出错

    我刚刚完成重新安装我的操作系统 并像往常一样安装和测试我使用的标准工具 现在当我尝试从 eclipse 启动 Jboss 5 时 我遇到了这个前所未有的错误 这是一个很大的例外 3 53 10 693 ERROR AbstractKerne
  • EAR 和 WAR 类加载器

    我对 JBoss 类加载器很困惑 任何人都可以详细描述类加载器的工作原理吗 我只需要做一件事 如果 WAR 没有找到具有自己的类加载器的类 他会将搜索委托给其父类加载器 该父类加载器必须是 EAR 的 针对上述情况 我的申请需要进行哪些更改
  • Java EE 6 CDI 事件是事务性的吗?

    Java EE 6 CDI 事件是事务性的吗 如果我在事务中触发事件 然后回滚该事务 事件侦听器的效果是否也会回滚 此行为是否依赖于事件侦听器本身支持事务 如果我尝试从事件侦听器内回滚异常 它会回滚触发该事件的事务吗 来自事件章节 http
  • 独立 JBoss EJB 客户端应用程序 - 如何获取 JNDI 连接 - “独特名称”

    关于从独立应用程序远程访问 JBoss EJB 存在大量令人沮丧的不正确 更好的描述 关闭但没有雪茄 信息 我已经把头撞在墙上一天多了 但没有成功 我正在尝试将 EJB 从 WebLogic 移植到 JBoss 它由另一台服务器上运行的独立

随机推荐

  • 如何按一定比例随机选择

    我想以不等的概率在两个选项之间随机选择 例如 当用户按下按钮时 25 的时间会发出声音 A 75 的时间会发出声音 B 我可以手动执行简单的比例 例如 1 4 和 2 4 但我遇到了麻烦比例如 3 5 思考这个问题的一般方法是什么 我的意思
  • 64 位整数的 cmpxchg 示例

    我在 i686 架构中使用 cmpxchg 比较和交换 进行 32 位比较和交换 如下所示 编者注 原来的 32 位示例有错误 但问题不在于它 我相信这个版本是安全的 而且作为奖励 它也可以正确编译 x86 64 另请注意 为此不需要或不建
  • Bash 循环比较文件

    我显然简单地错过了一些东西 并且知道问题是它正在创建一个空白输出 这就是它无法比较的原因 然而 如果有人能对此有所启发 那就太好了 我还没有孤立它 最终 我试图比较md5sum从存储在 txt 文件中的列表到存储在服务器上的列表 如果有错误
  • JQuery 表单提交时功能不起作用

    我在提交表单的 jquery 函数时遇到问题 document ready function message keydown function e if e which 13 e shiftKey edit message 11 submi
  • ant javac 任务使用哪个 javac.exe?

    我面临一个问题 我改名了javac exe在我的机器上并注意到蚂蚁javac任务仍然运行良好 有谁知道它从哪里得到javac exe 实际上 我相信 默认情况下 Ant 会尝试使用以下代码直接执行 java 编译器类 try Class c
  • 在 Firefox 插件中,将事件侦听器添加到整个浏览器窗口时,如何解决“窗口未定义”错误?

    我尝试将事件监听器添加到我的扩展中 我想在每次选项卡处于活动状态 用户单击 或新加载时执行一个函数 我试过这个 window addEventListener DOMContentLoaded checkHost false 它给了我错误
  • Javascript 的链表数据结构

    我正在尝试使用 Javascript 找出链表数据结构 但有一部分我无法理解 function LinkedList var Node function element this element element this next null
  • Google Maps JavaScript API v3 基于已知路线的标记动画

    我一直在寻找一个好的解决方案来使用 Google Maps JavaScript API V3 为标记设置动画 标记将在使用纬度和经度坐标定义的预定路径上进行动画处理 对于我所做的所有研究 我仍然找不到与 JavaScript Google
  • 使用 javascript 检测是否安装了 chrome 扩展程序时出现错误

    这是我的代码 var myExtension chrome management get my extention id if myExtension enabled installed else 来源 http developer chr
  • 使用window.print时如何通过css隐藏标签的href属性

    我有一个 php 页面 带有一个按钮 用户可以通过 window print 函数进行打印 我需要知道如何在打印页面时隐藏 html 标签的 href 属性 例子 如果标签如下 a href myurl com HELLO a 我只想显示
  • 如何使用 BMT 将客户端 UserTransaction 传播到无状态会话 bean

    使用 CMT 的此场景有效 具有 CMT 的无状态会话 bean 一种注释方法 TransactionAttribute TransactionAttributeType MANDATORY 在此方法中 使用 XA 数据源和普通 JDBC