`

Jdbc 与 Jta 事务

阅读更多

hibernate的两种事务管理jdbc 和jta方式。下边说说两者的区别
一、说明一下jdbc和jta方式事务管理的区别:
JDBC事务由Connnection管理,也就是说,事务管理实际上是在JDBC Connection
中实现。事务周期限于Connection的生命周期之内

JTA 事务管理则由 JTA 容器实现,JTA 容器对当前加入事务的众多Connection 进
行调度,实现其事务性要求。JTA的事务周期可横跨多个JDBC Connection生命周期。

二、在了解jdbc和jta事务的基础上,再来讨论hibernate的两种事务
对于基于JDBC Transaction的Hibernate 事务管理机制而言,事务管理在Session 所依托的JDBC Connection
中实现,事务周期限于Session的生命周期。

对于基于JTA事务的Hibernate而言,JTA事务横跨可横跨多个Session。
三、hibernate中写法的不同

jdbc的写法
public void saveUser(){
     Session session
= sessionFactory.openSession();
     Transaction tx
= session.beginTransaction();
     session.save(user);
     tx.commit();
     session.close();
}

必须在session.close()之前commit或者rollback

jta写法
public void saveUser(){
     Session session
= sessionFactory.openSession();
     Transaction tx
= session.beginTransaction();
    
     session.save(user);
     session.close();
    
     Session session1
= sessionFactory.openSession();
     session1.save(user1);
     session.close();
    
     tx.commit();
}

commit和rollback可以在session.close()之后执行.
同时应该注意的一点是,事务是不能嵌套的,在使用jta的事务的情况下,如果要让一个事务跨越两个
session,则必须在两个session的外层开始事务和完成事务。而不能再在session内部开始事务和完成事务。

  1. 、JDBC事务和JTA事务   
  2.     Hibernate本身没有事务管理功能,它依赖于JDBC或JTA的事务管理功能,在Hibernate配置文件中,如果不显式指定 Transaction的工厂类别属性hibernate.transaction.factory_class的配置,则默认为JDBC事务:   
  3.     <property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory< /property>。   
  4.     在通过SessionFactory获取到Session后,与Session相关联的JDBC Connection实例就被设定为false。   
  5.   
  6.     特别注意:如果数据库不支持事务,比如MySQL的MyISAM引擎的表就不支持事务,声明事务也不会起作用。要使MySQL5的表支持事务,则可以指定表的引擎类型为InnoDB。如果是学习或者研究,目前最好还是使用PostgreSQL 8.3或DB2、Oracle。   
  7. JDBC事务总是和一个数据库连接(或一个Session)相关联的。   
  8.     JTA事务则可以跨越多个数据连接(或多个Session),这些连接还可以是不同数据库的连接,JTA事务一般由容器进行管理。编程只要在多个操作单元的开始和结束定义JTA事务的边界即可。   
  9.   
  10.     特别注意:如果使用了JTA事务,则不能再用在JDBC式的事务来管理每个Session的操作,否则会出错。为了程序的的通用性,一般来说,都是使用 JTA事务来构建应用,这使用任何环境。当然,也可以使用事务代理为每个JDBC的操作方法加入事务控制。这样也为程序以后移植到JTA容器事务上带来很大方便。其实现在可以使用Spring的事务管理,与Hibernate结合的非常完美。   
  11. *****************************************   
  12. hibernate配置正确的情况下:   
  13.     
  14.       在服务层上:   
  15.                   一:如果通过HibernateDaoSupport来getSession  那么 这个session当一个方法结束的时候 就关闭了   
  16.                   二:如果通过HibenateDAOSupport 来getSessionFactory在opensession()那么就是   方法结束后不会关闭session需要自己手动的关闭   
  17.                   三:如果采用的是HibernateTemplate的hbiernatecallback 里面的session是当do..方法结束 就关闭session(不代表 马上就提交事务 这里以后讨论)   
  18.     
  19.   如果 没有配置正确:包括改业务逻辑 没有被spring的事务控制控制 则 上诉 不适用  
分享到:
评论

相关推荐

    JDBC事务 JTA事务 传播特性 隔离级别

    **JTA事务**则适用于分布式环境,可以跨越多个数据源管理事务。JTA通过`UserTransaction`接口提供事务控制,支持两阶段提交(2PC)协议。在2PC中,事务处理监视器(TPM)先询问所有资源管理器(如数据库)是否准备好...

    JDBC-JTA.rar_jdbc_jta_jta JDBC

    对应的`.class`文件(如`myJDBCUpdateServlet`、`myJTAServlet`、`myJDBCReadServlet`)是这些Servlet的编译后版本,它们可能包含了具体的JDBC数据库操作和JTA事务管理的代码。`www.pudn.com.txt`可能是一个文档,...

    JDBC事务和JTA(XA)事务

    使用JTA事务可以确保分布式事务的一致性和可靠性,例如,在一个分布式事务中,如果某个资源管理器执行失败,可以使用rollback()方法来回滚事务,以确保分布式事务的一致性。 JTA事务工作流程 JTA事务工作流程可以...

    Java中JDBC事务与JTA分布式事务总结与区别

    JTA事务通常与JNDI(Java Naming and Directory Interface)和XAResource接口一起工作,使得应用程序可以透明地访问和管理分布式事务。使用JTA事务时,开发者不再直接控制Connection的事务,而是由事务管理器(如...

    JTA事务源码示例

    Spring+iBatis+JOTM实现JTA事务: 如何处理跨库事物:spring + jtom 的jta事务是个很好的选择. 这个源码示例非常不错,包括所有的源码和jar包,下载后eclipse 或 myeclipse 导入就能用。 里面有详细的说明和注释,...

    springboot整合JTA组件,多数据源事务管理

    JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中 2、分布式事务 分布式事务(DistributedTransaction...

    跨多个数据库操作,同时连接多个的数据库,同时操作

    7. **JDBC与JTA事务**:JDBC提供了一种在JTA环境中注册和管理事务的方法,通过`Connection#setAutoCommit(false)`禁用自动提交,并使用`UserTransaction`接口来开始、提交和回滚事务。 8. **Hibernate中的JTA支持**...

    在Spring中使用JTA事务管理

    本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM(Java Open Transaction Manager)以及引用Tomcat的JTA事务。 ### 1. 通过集成JOTM,直接在Spring中使用JTA事务 #### 1.1. 添加JOTM类库到类路径...

    JDBC事务处理机制探秘

    总结起来,JDBC事务适用于简单的单库操作,而JTA事务则适合处理跨多个数据源的复杂事务场景。在J2EE环境中,容器管理的事务(如SessionBean中的JTA事务)能够提供更高的可伸缩性和可靠性。在实际应用中,根据需求...

    spring + JTA + JOTM实现分布式事务

    对于分布式事务,Spring支持JTA事务管理,并且可以无缝集成JOTM。 1. **配置JOTM**:首先,你需要在项目的类路径下添加JOTM的依赖库。然后,在Spring的配置文件中定义JOTM的事务管理器 bean,例如: ```xml ...

    使用JTA实现跨库事务

    在提供的"SimpleDemo"示例中,可能包含了一个简单的JTA事务管理的例子,比如如何在Java代码中启动和结束一个事务,以及如何在事务中操作数据库。具体实现细节可能包括使用JPA、JDBC或其他持久化框架与JTA集成的方法...

    Spring3.1+Hibernate4.1+Atomikos3.9+MySql5.1+Tomcat5/6/7实现JTA事务管理

    Atomikos的`atomikos-tomcat-beanfactory.jar`和`atomikos-integration-extension-3.7.1-20120529.jar`是用来整合Tomcat与Atomikos的,使得Tomcat能够处理JTA事务。 6. **JTA相关库**: `transactions-api-3.9.1.jar...

    jta.jar包;jta.jar包

    6. **JTA与JDBC/Java Persistence API (JPA)**: 在JDBC连接上启用JTA事务,需要使用`javax.sql.DataSource.getConnection(UserTransaction, ConnectionProperties)`方法,或者在JPA中通过`@Transactional`注解声明...

    DB事务详解

    事务的实现可以通过多种方式实现,如JDBC事务、JTA事务、IBATIS事务支持等。 4.1、JDBC事务 JDBC事务是Java数据库连接(JDBC)提供的一种事务机制。JDBC事务可以通过 Connection 对象的 setAutoCommit() 方法来...

    java事务管理和事务分类

    对于JDBC和JTA事务,开发者需要显式地调用`commit()`或`rollback()`来控制事务的结束。而在容器事务中,事务的控制权交给了容器,开发者只需在业务逻辑代码中编写无事务感知的代码,容器会在适当的时候处理事务的...

    Hibernate事务

    在 Hibernate 中,事务管理可以基于 JDBC Transaction 或 JTA (Java Transaction API) 进行,这两种方式各有特点。 首先,Hibernate 默认的事务处理机制是基于 JDBC Transaction。这意味着在进行数据库操作时,...

    JTA 分布式事务 XAPool 1.5和1.6的所有jar包,源码包

    同时,还需要考虑与JTA事务管理器(如Atomikos、Bitronix等)的集成,以实现完整的分布式事务处理。 总结来说,XAPool是JTA分布式事务处理的重要组件,提供了一种高效的数据库连接池解决方案,对于构建大规模、高...

    maven springboot jta mybatis 分布式事物

    Spring Boot 支持 JTA,可以通过其集成的 `Atomikos` 或 `Bitronix` 事务管理器实现分布式事务。 `MyBatis` 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码...

Global site tag (gtag.js) - Google Analytics