我用JPA练习过JTA和RESOURCE_LOCAL模式,这两种模式之间有很大的区别。
当我使用RESOURCE_LOCAL时,我必须使用EntityTransaction自己管理事务,而当我使用JTA时,它是由应用程序服务器隐式完成的。
所以我想知道begin()和commit()方法在JTA模式下何时执行。
我假设当应用程序服务器收到 HTTP 请求时,它会执行“begin()”,并且在向客户端发送 HTTP 响应之前,它会执行“commit()” ”;另外,如果在发送响应之前发生错误,它会执行“rollback()”。我说得对吗?
最佳答案
JPA 规范没有定义使用 JTA 事务时触发 begin
和 commit
的确切位置。
事务控制与 HTTP 请求/响应无关,也不会被它们触发。
将为所有事务方法(默认为所有 EJB 方法)提供 JTA 事务,无论其用途如何。
但是考虑到 JTA 事务和 JPA,有一些保证。事务保证在第一次调用 EntityManager 时启动,并保证在方法返回之前提交或回滚。
关于java - JPA和JTA模式下的事务(开始和提交),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25974191/