我有以下查询:
- 这两者有什么区别?
- 所有数据库都支持这两个吗?
- JPA TransactionManager 和 JTA TransactionManager 有什么不同?
我有以下查询:
JPA实现可以选择自己管理事务(RESOURCE_LOCAL
),或者让应用服务器的JTA实现来管理事务。
在大多数情况下,使用RESOURCE_LOCAL就可以了。这会使用基本的JDBC级别事务。缺点是事务局限于JPA持久单元本身,因此如果您需要跨多个持久单元(或其他数据库)的事务,则RESOURCE_LOCAL可能不够好。
JTA也用于管理跨JMS和JCA等系统的事务,但对于我们大多数人来说,这是相当奇特的用法。
要使用JTA,您需要在应用服务器中获得支持,并且还需要从JDBC驱动程序获得支持。
如果你对学习Java持久化API感兴趣,请务必阅读完整的文章:JPA概念:JPA 101。
Resource_Local和JTA是事务管理器(执行事务的方法),这不是数据库的属性,而是负责协调事务的组件。 JPA和JTA事务管理器是不同的。如果您只执行JPA事务,则JPA事务管理器负责JPA事务并且您需要使用它。而JTA事务管理器是通用事务管理器,可以在事务中列出其他资源,例如JMS队列。通常,Java EE容器为EJB、JPA实体等采用JTA事务管理器。
resource_local与JTA之间的区别是关于本地事务与全局事务。它涉及到我们是否可以在单个事务下管理多个资源。
CMT与BMT之间的区别是谁来开启和关闭事务 - 应用程序开发者还是应用服务器。