【问题标题】:Question about xa and transaction on ejbs关于ejbs上xa和事务的问题
【发布时间】:2021-04-21 07:00:59
【问题描述】:

我有两个问题/疑问:

  1. 如果两个 ejb 部署在不同的耳朵或不同的应用程序服务器中,并且一个调用另一个,它们仍然需要 XA 独立,每个使用一个或多个 db 作为?

  2. 如果两个ejb部署在不同的服务器,都标注trans type = required,当第一个ejb调用第二个时,新的事务开始还是使用第一个ejb的传播?

**我的 ejb 部署在 Webpshere、Jboss、WebLogic 上,可以使用 JEE 5/6/7 技术(EJB 2/3)编写。

谢谢

罗伯托

【问题讨论】:

    标签: websphere ejb jboss7.x java-ee-6 java-ee-5


    【解决方案1】:

    不管 EJB 是如何打包的(相同或不同的 EAR)或部署在哪里(相同或不同的服务器),如果事务类型是 Required(即默认值),那么由第一个 bean 发起的事务必须流到第二个 bean,否则对第二个 bean 的调用必须导致错误。

    服务器供应商应该没有区别,因为行为是在 EJB 规范的事务一章中定义的。但是,如果调用是在供应商之间进行的,则很可能不支持事务上下文传播,在这种情况下,对第二个 bean 的调用应该被拒绝并出现异常。

    基本上,如果客户端(第一个 bean)在事务中运行并以“必需”调用第二个 bean,则事务上下文必须传播到第二个 bean,否则会导致错误。

    【讨论】:

    • 1) 你对供应商的意思是什么?2) 当不支持 transactin 上下文时(一个例子)?谢谢
    • 1) 供应商是应用服务器提供商,例如 Webpshere、Jboss、WebLogic、Open Liberty 等。2) Open Liberty 是不支持事务上下文传播的示例。例如,如果客户端是 Glassfish 服务器,并且客户端开始事务,然后调用 Open Liberty 服务器上的远程 EJB,则事务上下文将不会传播,如果 EJB 方法是必需的,则会出现异常抛出。如果客户端没有开始一个事务,那么方法调用会正常工作,而服务器会开始一个新的。
    • 如果客户端尝试传播事务上下文,那么如果服务器上的 EJB 具有需要在调用者事务上下文中运行的事务属性,则服务器必须接受传播的事务上下文或抛出异常;服务器不能忽略它。
    • 好的,我明白了,我有最后一个问题:对第二个远程 ejb 使用“支持”类型的容器管理事务可以解决如果不传播抛出异常的问题吗?非常感谢
    • 不,Supports 不会避免异常。 Supports 表示如果 EJB 存在,它必须在调用者的事务下运行。因此,如果调用者确实有一个活动事务,那么 EJB 必须在该事务下运行,或者抛出一个表明它不能的异常。基本上,如果行为不能与支持事务传播时的行为相同,则必须抛出异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多