hibernate之hibernate应用程序中的事务(使用JTA的编程式事务)

 

hibernate之hibernate应用程序中的事务(使用JTA的编程式事务)

 


 

能与Java EE兼容的托管运行时环境,能够为你管理资源。在大多数据情况下,被管理的资源都是数据库连接。JTA API被统一公开给使用JTA的开发人员:javax.transaction.UserTransaction是启动和终止事务的主要接口。

 

常见的托管运行时环境是Java EE应用程序服务器。当然,应用程序服务器提供更多的服务,而不仅仅是资源管理。许多Java EE服务是模块化的---安装应用程序服务器不是获得它们的唯一方法。如果你只需要托管的资源,可以获得一个独立的JTA提供程序。开源独立的JTA提供程序包括JBoss Transactions,ObjectWeb JOTM和其他的。可以和Hibernate应用程序一起安装这样一个JTA服务(例如在Tomcat中)。它将替你管理数据库连接池,给事务划分提供JTA接口,并通过JNDI注册提供托管的数据库连接。

----------

下列是使用JTA的托管资源的好处,以及使用这个Java EE服务的理由:

. 事务管理服务可以统一所有的资源,无论什么类型,并用单个标准的API把事务控制公开给你。这意味着你可以替换Hibernate的Transaction API,并直接在任何地方使用JTA。然后,在(或者用)JTA兼容的运行时环境中安装应用程序就是应用程序部署人员的责任了。这个策略把可移植性关注点归属的位置转移了;另外应用程序依赖标准的Java EE接口,并且运行时环境必须提供实现。

 

. Java EE事务管理器可以在单个事务中获取多个资源。如果你使用几个数据库(或者不止一个资源),就可能想要一个两阶段提交协议来保证跨资源范围的事务原子性。在这样的场景中,hibernate通过配置几个SessionFactory(每个数据库一个),他们的Session获得所有参与同一个系统事务的托管数据库连接。

 

. 与简单的JDBC连接池相比,JTA实现的质量通常更高。应用程序服务器和作为应用程序服务器模块的独立JTA提供程序,通常在包含大量事务的高端系统中已经进行过更多的测试。

 

. JTA提供程序在运行时不增加不必要的过载(一种常见的错误概念)。简单案例(单个JDBC数据库)的处理与使用简单的JDBC事务一样有效。比起与简单的JDBC一起使用的随机连接池库,JTA服务背后托管的连接池可能是更好的软件。

----------

假设你不喜欢JTA,并想要继续使用Hibernate Transaction API来保证代码在Java EE中和使用托管Java EE服务时可以运行,而不用改变任何代码。为了部署前面的代码实例,你需要把Hibernate配置转换到JTA:

. hibernate.transaction.factory_class选项必须设置为org.hibernate.transaction.JTATransactionFactory。

. hibernate需要知道你正在哪个JTA实现中部署,这出于两个原因:第一,不同的实现可能公开JTA UserTransaction,Hibernate现在必   须以不同的名称内部调用它。第二,hibernate必须钩进JTA事务管理器的同步过程来处理它的高速缓存。你必须设置       hibernate.transaction.manager_lookup_class选项来配置这两项:例如,配置为org.hibernate.

  transaction.JBossTransactionManagerLookup。

. hibernate不再负责管理JDBC连接池;它从运行时容器获得托管的数据库连接。这些连接被JTA提供程序通过JNDI这个全局的注册而被公开。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值