Hibernate|Hibernate5.4用户指南(八)之事务和并发控制-Transactions and concurrency control

本文深入探讨Hibernate5.4中的事务和并发控制,解释了物理事务、JTA配置、Hibernate事务API以及各种事务模式。强调了正确管理和理解事务在提升应用程序并发性能和扩展性方面的重要性。
摘要由CSDN通过智能技术生成

Hibernate5.4官方用户指南

1 Hibernate架构

……

8 事务和并发控制-Transactions and concurrency control

重点是理解“事务”这个术语在持久性和对象/关系映射方面不同的但相关的含义。多数情况定义一致,少数情况不是。

  • 可能会参考与数据库的物理事务。
  • 可能将事务的逻辑概念称为与持久性上下文相关。
  • 可能会参考原型模式定义的工作单元的应用概念。

本文主要将事务的物理和逻辑概念视为同一个事物。

8.1 物理事务-physical transactions

Hibernate使用JDBC API进行持久化。

在Java世界中,有两种定义明确的机制来处理JDBC中的事务:

  • JDBC本身
  • JTA

Hibernate支持两种与事务集成并允许应用程序管理物理事务的机制。

每个事务Session处理由org.hibernate.resource.transaction.spi.TransactionCoordinator合同处理,该合同由org.hibernate.resource.transaction.spi.TransactionCoordinatorBuilder服务构建。 TransactionCoordinatorBuilder表示处理事务的策略,而TransactionCoordinator表示与Session相关的策略的一个实例。其TransactionCoordinatorBuilder方案中使用由定义hibernate.transaction.coordinator_class设置。

  • JDBC(非JPA应用程序的默认值)
    通过调用java.sql.Connection管理事务 。

  • JTA
    通过调用JTA管理事务。

如果JPA应用程序没有提供设置hibernate.transaction.coordinator_class,Hibernate将根据持久性单元的事务类型自动构建正确的事务协调器。

如果非JPA应用程序没有提供设置hibernate.transaction.coordinator_class,Hibernate将使用jdbc默认设置。如果应用程序实际使用基于JTA的事务,则此缺省值将导致问题。使用基于JTA的事务的非JPA应用程序应显式设置hibernate.transaction.coordinator_class=jta 或提供自定义org.hibernate.resource.transaction.TransactionCoordinatorBuilder,org.hibernate.resource.transaction.TransactionCoordinator以便与基于JTA的事务建立 正确的坐标。

Hibernate直接使用JDBC和JTA连接资源,而不添加任何其他锁定行为。Hibernate不会锁定内存中的对象。使用Hibernate时,数据库事务的隔离级别定义的行为不会更改。Hibernate Session充当事务范围的缓存,提供可重复读取,以便按标识符和查询进行查找,从而导致加载实体。

要减少数据库中的锁争用,物理数据库事务需要尽可能短。
长时间运行的数据库事务会阻止您的应用程序扩展到高度并发的负载。不要在最终用户级工作期间打开数据库事务,而是在最终用户级工作完成后打开它。这个概念被称为transactional write-behind

8.2 JTA配置-JTA configuration

与JTA系统的交互在一个名为合同的合同背后进行合并,该合同org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform公开了对该系统javax.transaction.TransactionManager 和javax.transaction.UserTransaction该系统的访问,并暴露了注册javax.transaction.Synchronization实例,检查事务状态等的能力。

一般情况下,JtaPlatform将需要访问JNDI来解决JTA TransactionManager,UserTransaction等见JNDI章对配置到JNDI访问的细节。

Hibernate试图JtaPlatform通过使用另一个名为的服务来发现它应该使用它org.hibernate.engine.transaction.jta.platform.spi.JtaPlatformResolver。如果该分辨率不起作用,或者您希望提供自定义实现,则需要指定该hibernate.transaction.jta.platform设置。Hibernate提供了许多JtaPlatform契约实现,都有短名称,如下:

  • Atomikos
    JtaPlatform 为Atomikos。

  • Borland
    JtaPlatform 对于Borland企业级服务器。

  • Bitronix
    JtaPlatform

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值