2

我已经TransactionAttributeType.REQUIRED读过

如果客户端在事务中运行并调用企业 bean 的方法,则该方法在客户端的事务中执行。如果客户端未与事务关联,则容器在运行该方法之前启动一个新事务。

客户端是部署在服务器 A 上的 EJB 应用程序,并methodB在事务中调用部署在另一个服务器 B 上的另一个 bean 的方法。如果methodBhas TransactionAttributeType.REQUIRED,那么它将在客户端应用程序启动的同一事务下运行。正确的?

如果是,那么部署在不同服务器上的应用程序如何知道在另一台服务器上启动的事务?

如果不是,那么如何methodB使用相同的事务呢?

我对 EJB 有点陌生,所以请放轻松。任何指向正确方向的指针都将受到高度赞赏。

4

1 回答 1

1

如果服务器 A 上的客户端已启动事务,则事务上下文将传播到使用 注释的 bean 中TransactionAttributeType.REQUIRED。这是调用的一部分。

所以第一个问题的答案是肯定的:methodB在服务器 B 中,由服务器 A 上的 EJB 应用程序调用,在同一个事务中运行。最终的commitorrollback由运行在服务器 A 上的客户端控制。

服务器 A 上的客户端也可以在同一事务中获取其他 XA 资源:例如,它写入 XA 数据源并使用 XA JMS 发送消息。然后commiton 事务持久化由 引起的变化methodB,将行写入数据库,消息在队列中。如果客户端执行 a rollback,则所有工作单元都将回滚(并且没有任何变化)。

相关:两阶段提交协议(维基百科)

于 2013-08-01T20:47:18.947 回答