关于ejbs上xa和事务的问题

问题描述

我有两个问题/疑问:

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

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

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

谢谢

罗伯托

解决方法

无论 EJB 如何打包(相同或不同的 EAR)或部署在何处(相同或不同的服务器),如果事务类型为 Required(即默认),则事务由第一个发起bean 必须流向第二个 bean,否则对第二个 bean 的调用必须导致错误。

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

基本上,如果客户端(第一个 bean)在事务中运行并使用“Required”调用第二个 bean,那么事务上下文必须传播到第二个 bean 或导致错误。