`
marb
  • 浏览: 419818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

JTA是一种J2EE分布式事务框架,用于支持多数据源的分布式事务。

1、使用JTA,在应用服务器中配置的数据源必须是XA类型的,否则JTA不生效。

2、各大应用服务器都有JTA的实现。但tomcat不支持。

3、今天遇到了事务在异步情况下的问题。如果事务中的一部分在是在独立的线程中运行,那么。。。。目前还没找到好的办法,不知道是否是无解的。

下面的这些代码片断支持嵌套JTA事务

启动事务:判断事务如果是已经被激活的,就不启动新的事务


  1. public   static   boolean  begin()  throws  TransactionException {  
  2.     UserTransaction ut = TransactionFactory.getUserTransaction();  
  3.   
  4.     if  (ut !=  null ) {  
  5.         try  {  
  6.             if  (ut.getStatus() == TransactionUtil.STATUS_ACTIVE) {  
  7.                 Debug.debug("[TransactionUtil.begin] active transaction in place, so no transaction begun" , module);  
  8.                 return   false ;  
  9.             }  
  10.             ut.begin();  
  11.             //Debug.debug("[TransactionUtil.begin] transaction begun", module);   
  12.             return   true ;  
  13.         } catch  (NotSupportedException e) {  
  14.             //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();   
  15.             throw   new  TransactionException( "Not Supported error, could not begin transaction (probably a nesting problem)" , e);  
  16.         } catch  (SystemException e) {  
  17.             //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();   
  18.             throw   new  TransactionException( "System error, could not begin transaction" , e);  
  19.         }  
  20.     } else  {  
  21.         Debug.debug("[TransactionUtil.begin] no user transaction, so no transaction begun" , module);  
  22.         return   false ;  
  23.     }  

事务提交:


  1. public   static   void  commit( boolean  beganTransaction)  throws  TransactionException {  
  2.         if  (beganTransaction)  
  3.             TransactionUtil.commit();  
  4.     }  
  5. public   static   void  commit()  throws  TransactionException {  
  6.         UserTransaction ut = TransactionFactory.getUserTransaction();  
  7.   
  8.         if  (ut !=  null ) {  
  9.             try  {  
  10.                 int  status = ut.getStatus();  
  11.   
  12.                 if  (status != STATUS_NO_TRANSACTION) {  
  13.                     ut.commit();  
  14.                     //Debug.debug("[TransactionUtil.commit] transaction committed", module);   
  15.                 } else  {  
  16.                     //十分影响性能,因为引擎中 遗留着非常多查询操作进行事务提交的代码   
  17.                     //Debug.debug("[TransactionUtil.commit] Not committing transaction, status is STATUS_NO_TRANSACTION", module);   
  18.                 }  
  19.             } catch  (RollbackException e) {  
  20.                 //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();   
  21.                 throw   new  TransactionException( "Roll back error, could not commit transaction, was rolled back instead" , e);  
  22.             } catch  (HeuristicMixedException e) {  
  23.                 //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();   
  24.                 throw   new  TransactionException( "Could not commit transaction, HeuristicMixed exception" , e);  
  25.             } catch  (HeuristicRollbackException e) {  
  26.                 //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();   
  27.                 throw   new  TransactionException( "Could not commit transaction, HeuristicRollback exception" , e);  
  28.             } catch  (SystemException e) {  
  29.                 //This is Java 1.4 only, but useful for certain debuggins: Throwable t = e.getCause() == null ? e : e.getCause();   
  30.                 throw   new  TransactionException( "System error, could not commit transaction" , e);  
  31.             }  
  32.         } else  {  
  33.               
  34.             Debug.debug("[TransactionUtil.commit] UserTransaction is null, not commiting" , module);  
  35.         }  
  36.     }  

使用事务:


  1. public   void  changeState(String newState)  throws  fException, InvalidState, TransitionNotAllowed {  
  2.     Connection conn = null ;  
  3.     boolean  beganTransaction =  false ;  
  4.     try  {  
  5.     beganTransaction = TransactionUtil.begin();  
  6.     conn = TransactionUtil.getConnection();  
  7.           //一堆数据库操作   
  8.          TransactionUtil.commit(beganTransaction);  
  9.         } catch  (DAOException e) {  
  10.             TransactionUtil.rollbackbeganTransaction);  
  11.         } catch  (TransactionException e) {  
  12.         TransactionUtil.rollbac(beganTransaction);  
  13.         } finally  {  
  14.         TransactionUtil.closeConnection(conn);  
  15.         }  

分享到:
评论

相关推荐

    java实训心得java实训报告心得.doc

    自动换行功能通过 jta.setLineWrap(true) 语句来实现。 五、结论 Java 实训心得报告旨在帮助学生掌握 Java WEB 开发技术,通过实训报告的编写和实现,学生可以更好地理解和掌握 Java 语言的各种特点和技术。

    JavaEE学习心得与总结.docx

    在本文中,我们将深入探讨JavaEE的基本构成、核心技术和学习心得。 JavaEE的学习分为多个部分,首先是基础服务,包括对平台的概述,如JavaEE的发展历程、架构、组件和服务。这部分还涉及开发环境的选择和应用服务的...

    Java自学心得Java自学心得.doc

    ### Java自学心得详解 #### 一、安装JDK与环境配置 自学Java的第一步是安装JDK(Java Development Kit)。这是开发Java程序的基础工具包,包含编译、运行Java程序所需的组件。 - **CLASSPATH问题**:理解...

    韩顺平servlet与jsp_笔记与心得

    ### 韩顺平servlet与jsp_笔记与心得 #### JavaEE概述 JavaEE(Java Platform, Enterprise Edition)是一个开放式的平台标准,为开发者提供了丰富的API和工具集,以便构建高质量的企业级应用。JavaEE的核心是围绕着...

    JavaEE学习心得与总结 (2).docx

    ORM技术允许开发者使用面向对象的方式来操作数据库,减少了对SQL的直接依赖。JPA支持XML和注解两种元数据形式来定义对象和数据库表的映射,提供API进行CRUD操作,还拥有自己的查询语言JPQL,类似于HQL(Hibernate ...

    JavaEE实验,javaee实验心得体会,Java源码.zip

    在实验中,你可能使用了注解来定义实体类,学习了如何配置数据源、实体管理器工厂和实体管理器,以及如何执行CRUD(创建、读取、更新和删除)操作。 Java Message Service (JMS) 是JavaEE中处理异步通信的标准,常...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).docx

    20. **AAAJTA (Java Authentication and Authorization Service for JTA)**:这可能是错误的缩写,正确的应该是JTA(Java Transaction API),它为Java应用程序提供了事务处理能力。 21. **AOP (Aspect-Oriented ...

    JAVA基础加强 --学习心得一(JAVA中常用英文单词简写释义).pdf

    10. **JTA (Java Transaction API)**:JTA提供了一种标准接口,用于处理分布式事务,确保数据的一致性和完整性。 11. **JAF (Java Authentication Framework)**:JAF是JAVA的安全框架,用于实现认证和授权。 12. *...

    J2EE高程、架构师学习手册

    这份学习资料涵盖了30多个架构学习心得,旨在帮助读者掌握J2EE平台的核心技术和高级概念,同时深入理解开源架构的设计与实践。 J2EE(Java 2 Platform, Enterprise Edition)是Java平台上用于构建企业级应用的框架...

    j2ee study

    博主Tendyming在ITEYE博客上分享了他们的学习心得,这通常会包含代码示例、问题解析和项目经验。由于链接无法直接访问,我们可以根据常见的J2EE学习路径来探讨相关知识点。 1. **Servlet与JSP**:Servlet是Java实现...

    Spring和Struts框架学习总结

    - **事务管理**:Spring框架提供了对Java Transaction API(JTA)的支持,同时也支持本地事务。它还支持声明式事务管理,可以通过简单的XML或注解配置来管理事务,无需编写额外的代码。 #### 二、Struts框架简介及...

    j2ee面试大全

    7. **J2EE面试技巧与心得**: - 了解并熟悉J2EE规范中的各种组件和接口,如Servlet、JSP、JMS、JTA等。 - 熟练掌握Java基础,包括面向对象、集合、异常处理等。 - 对于常见的设计模式有所了解,如单例、工厂、...

    OJB 持久层框架的帮助文档资料

    **OJB持久层框架概述** OJB(Object-Relational Bridge)是一个开源的...通过阅读《OJB简介.doc》和《OJB心得.txt》,你可以更深入地了解OJB的使用方法、最佳实践以及他人的经验分享,从而更好地掌握这个持久层框架。

    j2ee游戏网站

    - **社区互动**:设立论坛或聊天室,让玩家交流游戏心得,增强社区氛围。 - **支付与购买**:如果游戏内包含付费项目,需搭建支付接口,支持虚拟货币购买。 在实际开发中,还需要考虑性能优化、负载均衡、安全性、...

    基于RC4的课程设计

    - 文本域,包括明文输入框`jta0`、密钥输入框`jta1`、子密钥流显示框`jta2`和密文显示框`jta3`。 - 通过Java Swing组件构建的图形用户界面,提供了直观的操作界面和良好的用户体验。 #### 结论与心得 通过对RC4...

    基于javaEE的中国茶文化网站

    JavaEE的核心特性包括:Servlets、JSP(JavaServer Pages)、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JTA(Java Transaction API)等。在本项目中,Servlets和JSP可能被用来处理HTTP请求,动态...

    夏昕-Hibernate+开发指南.pdf

    - **主要内容**:涉及Hibernate框架的使用方法、实践经验以及作者在Hibernate官方论坛上的交流心得。 - **定位区别**:不同于Hibernate官方参考文档(Hibernate Reference),本文档旨在为开发者提供一个学习和掌握...

    j2ee手记我的个人学习

    从给定的文件信息来看,这是一篇关于个人学习J2EE的心得体会,虽然原文内容较为抽象且不易理解,但我们可以从中提炼出与J2EE相关的知识点,并结合标题和描述进行深入探讨。 ### J2EE简介 J2EE(Java 2 Platform, ...

    ejb 学习笔记8

    例如,使用 `@TransactionManagement` 注解可以指定事务的管理策略。 ```java @TransactionManagement(TransactionManagementType.CONTAINER) public class MySessionBean { // ... } ``` - **编程式事务**...

Global site tag (gtag.js) - Google Analytics