我已阅读TransactionAttributeType.REQUIRED
如果客户端在事务中运行并调用企业bean的方法,则该方法在客户端的事务中执行。如果客户端未与事务关联,则容器在运行该方法之前启动新事务。
客户端是部署在服务器A上的EJB应用程序,并调用部署在事务中另一个服务器B上的另一个bean的方法methodB
。如果methodB
具有TransactionAttributeType.REQUIRED
,则它将在与客户端应用程序启动的相同事务下运行。正确?
如果是,那么部署在不同服务器上的应用程序如何知道在另一台服务器上启动的事务?
如果不是,那么methodB
如何使用相同的交易?
我对EJB有些新意,所以请放轻松我。 任何指向正确方向的指针都将受到高度赞赏。
答案 0 :(得分:1)
如果服务器A上的客户端已启动事务,则事务上下文将传播到使用TransactionAttributeType.REQUIRED
注释的bean中。这是调用的一部分。
所以第一个问题的答案是肯定的:服务器B中的methodB
由服务器A上的EJB应用程序调用,在同一个事务中运行。最终commit
或rollback
由服务器A上运行的客户端控制。
服务器A上的客户端也可以在同一事务中登记其他XA资源:例如,它写入XA数据源并使用XA JMS发送消息。然后,事务上的commit
持续由methodB
引起的更改,它将该行写入数据库,并且消息在队列中。如果客户端执行rollback
,则会回滚所有工作单元(并且没有任何更改)。