`
zhanghaj00
  • 浏览: 64106 次
社区版块
存档分类
最新评论

JavaEE 标准学习 JTA 事务管理

 
阅读更多

先写个题目 前段时间看了看这些标准  其实就是定制的一系列的接口规则,然后那些框架其实就是利用这些来写,所以 这些貌似是基础中的基础 这段时间 来组织组织这些,呼呼 最近在看restlet,这就涉及到javaee中的JAX-WS  JAX-RS 等等规范,不过 我还是想从 JTA 事务开始学起。。。。呼呼 这个是开篇,后续更新

 

    说起事务,总是联想到Spring aop,或者就是@transaction标签,再或者就是各种框架的集成

今天从基本的开始说起,

 

    首先是最基本的 JDBC 编程,一个数据源,我们可以用最基本的

    conn.setAutoCommit(false)来开启 事务,最后调用conn.commit(); 来提交事务就可以了.

 

    这是在一个数据源的情况下,如果我这边有两个数据库,从从不同的数据库来操作要保证事务呢

    这时候就要用到J2ee标准中的 JTA  和 JTS   事务编程接口和事务服务

 

    先不说理论,看看怎么用

userTx = (UserTransaction)getContext().lookup("   
javax.transaction.UserTransaction"); 
	// 从数据库 A 中取得数据库连接
	 connA = getDataSourceA().getConnection(); 
			
	// 从数据库 B 中取得数据库连接
	 connB = getDataSourceB().getConnection(); 
      
        // 启动事务
	 userTx.begin();

 

 

 

1.UserTransaction是 面向开发人员的接口

2.我们下面来看下JNDI怎么获取这个分布式事务管理器

 

tomcat6配置jndi,jta
 如果你的项目准备部署在tomcat上,要支持jta,则需把相关的包放在tomcat/lib包下
 1)jndi配置,可以把jndi的配置放置在  tomcat/conf/Catalina/域名(如localhost)/项目名.xml
   文件的Context节点下,如下:
   <Resource name="" auth="Container" type="javax.sql.DataSource" 
username="" 
password=""
driveClassName="oracle.jdbc.driver.OracleDriver" 
url="" maxActive="45" maxIdle="25"/>
    jndi也可以配置在server.xml,context.xml中
  2)jta UserTransaction配置
  在server.xml文件GlobalNamingResources节点下配置如下:
    <!-- Resource configuration for UserTransaction
         use JOTM -->
    <Resource name="UserTransaction" auth="Container"
        type="javax.transaction.UserTransaction"
        factory="org.objectweb.jotm.UserTransactionFactory"
        jotm.timeout="60"/>
  然后在 项目名.xml 文件的context节点下加:
   <ResourceLink name="UserTransaction"
            global="UserTransaction"

 

            type="javax.transaction.UserTransaction"/

//1.由于tomcat不支持JTA 所以 要引入JOTM来支持,这个搜一搜就好了,很多,这样,我们就配置完tomcat //和JTA 了。然后基本代码就是从JNDI中找到JTA 然后基本的 begin commit 就行了。。这是基本的 ,明天看//下String+JTA的整合

 

 2  多说两句

 

上面写的UserTranscation 是用户接口,那当我们调用UserTranscation的时候,发生了什么事情呢

,这里就要说到JTA标准中的 三个接口  (1)userTranscation (2)TranscationManager(3) Transcation

 

简单的说 userTranscation调用begin的时候  然后调用transcarionManager,然后呢,TranscationManage里面有个threadlocal,这个就很明了了,每个线程都有自己的manager manager再调用Transcation的begin。好吧 其实就是这样,改天看看源码把这个贴上来。

 

------------------------------------我是分界线-----------------------------------------------

纸上谈兵终究是要一败涂地的

 

最新的Spring 3.0 已经不支持Jtom 所以上面的我就注释了 下面就直接看代码吧

 

<!-- 配置JTA 数据源 -->

<!-- 配置atomikos的事务管理器 -->  

    <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"  

        init-method="init" destroy-method="close">  

        <property name="forceShutdown" value="true" />  

    </bean>  

    <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">  

        <property name="transactionTimeout" value="300" />  

    </bean>  

    <!-- spring的JTA事务管理器 -->  

    <bean id="springTransactionManager"  

        class="org.springframework.transaction.jta.JtaTransactionManager">  

        <property name="transactionManager" ref="atomikosTransactionManager" />  

        <property name="userTransaction" ref="atomikosUserTransaction" />  

    </bean> 

 

MAVEN  引入 

 <dependency>

    <groupId>com.atomikos</groupId>

    <artifactId>transactions-jta</artifactId>

    <version>3.7.0</version>

    </dependency>

 

再加上上面的配置 就能得到 一个事物管理对象了 

 

@Autowired

JtaTransactionManager springTransactionManager;

 

 

 

简单看了下atomikos 的源码 思想和上面说的差不多 三个接口 userTranscation TranscationManager Transcation 

 

不过 他们这里的 TranscationManager是自己实现了一个线程安全的方式 类似于一个threadlocal 不过是自己实现的BaseTransactionManager,其中就有hashtable 来分配线程

 

TransactionImp 这个就是真正执行事务的那个类了  具体的没怎么看了 具体实现还是比较复杂的。。。不过 现在我们已经得到了 UserTranscation这个开发人员接口了 接下来 就用就ok了

 

 

 ---------------

最后补充下  分布式事务可以再很多场合下使用,比如 JMS 中 来控制事务的完整性。。

 

接下来 我们就来看看JMS规范

  • 大小: 19.5 KB
分享到:
评论

相关推荐

    JavaEE5学习笔记01-JTA和数据库事务

    ### JavaEE5学习笔记01-JTA和数据库事务:深入解析与应用 #### 一、JavaEE5概览与核心组件 JavaEE5是Java Enterprise Edition的第五个版本,标志着企业级Java应用的一个重要里程碑。它引入了一系列重要的新特性,...

    基于JavaEE的学生会服务与事务管理系统.zip

    《基于JavaEE的学生会服务与事务管理系统》是一个典型的Web应用程序,它使用JavaEE技术栈来构建,旨在管理和处理学生会的各项事务。这个系统不仅适用于学习和理解JavaEE平台的开发,也适合用作期末大作业的参考案例...

    javaEE学习笔记

    - JTA定义了分布式事务处理的API,JavaEE应用服务器通过JTA来管理跨越多个资源(如数据库和消息队列)的事务。 6. **JMS(Java Message Service)** - JMS是Java平台上的消息中间件标准,允许应用程序之间发送和...

    JAVAEE仓库管理系统

    本次我们将讨论一个基于JAVAEE的仓库管理系统,它是一个实现了基本功能的参考和学习项目。 **系统架构与技术栈** 1. **三层架构**:该仓库管理系统通常采用经典的MVC(Model-View-Controller)模式设计,分为表现...

    Java学习资料、项目源码 基于javaee的图书管理系统

    7. **JTA(Java Transaction API)**:JavaEE提供了一套完整的事务管理机制,确保在分布式环境中数据的一致性。在图书管理系统的借阅、归还等操作中,可能涉及到多步操作,这时就需要JTA来保证事务的正确执行。 8. ...

    基于JAVAEE的学生管理系统

    6. **JTA (Java Transaction API)**:在处理数据库事务时,JTA提供了统一的事务管理接口,确保数据的一致性和完整性。 7. **JMS (Java Message Service)**:如果系统中涉及到异步处理或消息队列,如通知、日志记录...

    javaee学习相关资料

    JavaEE的核心技术包括但不限于JDBC(用于数据库连接)、JNDI(命名和目录接口)、EJB(企业JavaBean)、RMI(远程方法调用)、Java IDL/CORBA(接口定义语言和对象请求代理架构)、JSP(Java Server Pages)、...

    javaee管理系统

    5. **JPA (Java Persistence API)** 和 **Hibernate**:JPA是JavaEE的标准ORM(对象关系映射)规范,允许开发者用面向对象的方式操作数据库。Hibernate是JPA的一个实现,提供了更丰富的功能和更高的性能。 6. **...

    javaee-客户管理系统.zip

    在实际的项目中,开发者还会用到其他技术,比如JNDI(Java Naming and Directory Interface)进行资源查找,JTA(Java Transaction API)进行事务管理,以及CDI(Contexts and Dependency Injection)进行依赖注入,...

    基于javaEE的学生管理系统

    4. **JTA(Java Transaction API)**:JavaEE支持分布式事务处理,JTA允许在多组件间协调事务,确保数据的一致性。 5. **JPA(Java Persistence API)**或**Hibernate**:为了简化与数据库的交互,开发者可能使用...

    JavaEE学习作业 Java学习资料

    8. **JTA(Java Transaction API)**:事务管理API,确保在分布式环境中的数据一致性。 9. **WebSocket**:提供双向通信协议,使得服务器和客户端可以实时交换数据。 10. **Java API for RESTful Web Services ...

    JavaEE2017最新版基础班学习笔记

    4. **JTA (Java Transaction API)** 和 **JPA (Java Persistence API)**:JTA用于管理跨多个数据库操作的事务,确保数据一致性。JPA则为对象关系映射(ORM)提供标准接口,使得开发者可以使用面向对象的方式来操作...

    javaee课程源代码

    6. **JTA(Java Transaction API)**:JavaEE支持分布式事务处理,JTA定义了事务管理的接口,确保在多组件操作中的一致性和完整性。 7. **JSF(JavaServer Faces)**:JSF是一种MVC(Model-View-Controller)框架,...

    JAVAEE中文版(最新)

    6. **JTA(Java Transaction API)**:JTA提供了分布式事务处理的标准,确保在多资源操作中的数据一致性。 7. **JMS(Java Message Service)**:JMS是Java消息服务规范,允许应用程序创建、发送、接收和读取消息,...

    简单的javaee大作业

    7. **JTA(Java Transaction API)**:JavaEE支持事务管理,JTA定义了如何在分布式环境中处理事务的一致性和隔离性。在简单项目中,可能涉及到单个数据库的本地事务管理。 8. **MVC架构模式**:模型-视图-控制器...

    javaee.jar包下载

    JTA(Java Transaction API)则是JavaEE提供的事务管理规范,它定义了如何在一个分布式环境中管理事务的开始、提交、回滚等操作。在多组件协作的复杂应用中,JTA确保了数据的一致性和完整性。 在开发过程中,如果...

    JavaEE学习心得与总结.docx

    接下来是JDBC(Java Database Connectivity)的学习,它是与数据库交互的标准API,涵盖了数据库连接的建立、查询和事务管理。JTA(Java Transaction API)则用于处理事务,确保数据的一致性和完整性。RMI(Remote ...

    javaee大作业实例

    9. **JTA(Java Transaction API)**:处理分布式事务的API,确保在多组件操作中的数据一致性。 10. **JMS(Java Message Service)**:JavaEE的消息传递系统,用于异步通信和解耦应用组件。 这个"javaee大作业...

    基于JavaEE的人力资源管理系统设计与实现.pdf

    JavaEE平台通过EJB容器、JTA、JMS等技术提供了服务的集群、事务管理、消息服务等支持,这对于人力资源管理系统的可伸缩性和性能至关重要。尤其在企业规模扩大、数据量和用户量激增的情况下,系统仍需保持高可用性和...

Global site tag (gtag.js) - Google Analytics