JPA和JTA模式下的事务(开始和提交)

时间:2014-09-22 12:30:29

标签: java hibernate jpa transactions jta

我在JPA中练习了 JTA RESOURCE_LOCAL 模式,这两种模式之间存在巨大差异。

当我使用 RESOURCE_LOCAL 时,我必须使用 EntityTransaction 自行管理事务,当我使用 JTA 时,应用程序服务器隐含地执行此操作。

所以我想知道 begin() commit()方法何时在JTA模式下执行。

我假设当应用程序服务器收到HTTP请求时,它执行“ begin()”,并在向客户端发送HTTP响应之前执行“ commit() “;另外,如果在发送响应之前发生错误,它会执行“ rollback()”。我是对的吗?

1 个答案:

答案 0 :(得分:3)

当与JTA交易协同工作时触发begincommit时,JPA规范未定义确切位置。

事务控制与HTTP请求/响应无关,并且不会被它们触发。

将为所有事务方法(默认情况下的所有EJB方法)提供JTA事务,而与其目的无关。

但考虑到JTA交易和JPA,有一些保证。事务保证在第一次调用EntityManager时启动,并保证在方法返回之前提交或回滚。