java - JTA 与本地事务

标签 java spring transactions spring-transactions

  1. 本地交易和BMT相同吗?

  2. 我们需要 transactionManager 来进行本地事务吗?

    我读到 transactionManager 对于本地事务将无效。这是正确的吗?

  3. JTA 是否为 CMT 和 BMT 提供了规定?

最佳答案

有关 BMT 或 CMT 的本地或全局事务处理没有区别。

BMT 和 CMT 仅定义如何定义事务的开始和结束。在 CMT 中,它是通过调用带注释的方法来定义的,在 BMT 中,事务的开始和结束是使用 UserTransaction 对象定义的。

如果全局事务是必要的,或者更好的是分布式事务,那么事务管理器将独立于 BMT 或 CMT 进行安排。

一旦涉及多个事务资源,这些全局事务或两阶段提交就变得必要。例如,如果您使用 MessageDriven bean,它调用注释为“Bean管理事务处理”的 bean 并在 DBMS 中进行更改。在这种情况下,将对消息队列和 DBMS 这两个资源完成两阶段提交。

那么,回答你的问题:

  1. 不,答案见上文。
  2. 如果没有事务管理器,您将无法使用多个资源进行事务处理。像 J2EE 容器通常那样提供分布式事务的容器将使用 Transactionmanager 处理所有事务。在 jboss 中,您可以将数据源配置为“无 jta”,在这种情况下,您可以显式地免除它们的两阶段提交,但我认为 jboss-transactionmanager 将处理此类数据源的数据库连接。
  3. 是的,如果“提供规定”的意思是“支持”

关于java - JTA 与本地事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52639429/

相关文章:

mysql - 长时间闲置后,服务器在 spring-boot-starter-data-jpa 中使用 Mysql 抛出错误 'Could not open JPA EntityManager for transaction'

sql - 您如何在SQLite中进行事务处理?

java - 可扩展列表中的数据更新失败

java - 回调和事件的区别

java - 调试级别记录语句性能

java - SPRING MVC + Hibernate,无法获取所有记录

Spring TaskExecutor 事务丢失(代理与直接调用)

java - PostgreSQL并发事务冲突如何解决

java - 卡夫卡 : Failed to update metadata after 60000 ms

java - 为同样的问题而苦苦挣扎。对此有任何意见吗?