`
tom.duan
  • 浏览: 43407 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
文章分类
社区版块
存档分类
最新评论

Spring JTA应用JOTM & Atomikos I Application

阅读更多
关于Spring JTA的介绍非常多了,这里就不再一再阐述其优越性怎么怎么了,直接开始正题。一个大致的需求如下,用户在进行增删改操作时,会同时更新2至3个数据库的数据表,操作需要事务来包裹,以便在操作其中一个数据库的数据表失败时,可以将其他数据库已执行的动作回滚。

由于主框架是Spring,所以将研究的重点放在Spring所提供的的JTA事务上,google了很多资料,发现有几种实现的技术,如JOTM,Atomikos,以及J2EE容器所提供的JTA实现,如JBOSS也都提供了JTA的实现,不过个人喜好来讲,非常厌恶使用JNDI来访问容器组件,所以,重点放在JOTM和Atoimikos两种技术上面,JOTM网上很多资料介绍,配置也非常简单,相信大家通过google就可以快速的上手,本着研究的原则,少少了解了另一种实现技术Atomikos,发现使用方法也很简单,下面就用一个简单的例子来详细说明一下他们在Spring中的配置和使用方法。需要说明的一点是,这个例子也是当时学习两种技术,然后测试的例子,仅仅最后做了一些整理。

初步的设想:一个包括Dao/Service/Test三层的简单应用,事务配置在service层.用来同时插入两个数据库(test,test2)的数据表xa_test,表结构非常简单,包含两个字段id,name,其中test2数据库中表xa_test的name字段不允许为空。

使用的数据库为Mysql 5.0,数据库连接驱动版本5.0.8,这里需要注意,过低版本的Mysql或驱动可能不支持XA Datasource。

Database test ddl
CREATE TABLE `xa_test` (
  `id` int(11) NOT NULL,
  `name` varchar(20) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Database test2 ddl
CREATE TABLE `xa_test` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


UserDao,这里使用了两个,UserDao1和UserDao2,用以操作两个不同数据库的数据表(画蛇添足了,呵呵,为了描述清晰).Dao都继承自Spring的JdbcDaoSupport,使用JdbcTemplate进行数据库读写.

UserDao1.java
package com.xa.dao;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class UserDao1 extends JdbcDaoSupport {
    public void insertData(String id, String name) {
        getJdbcTemplate().execute("insert into xa_test values('" + id + "'," + name + ")");
    }
}


UserDao2.java
package com.xa.dao;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

public class UserDao2 extends JdbcDaoSupport
{
	public void insertData(String id,String name){
		getJdbcTemplate().execute("insert into xa_test values('"+ id +"',"+name+")");
	}
}


然后创建UserService和UserServiceImpl,在UserServiceImpl中,将调用Dao1和Dao2的insertData的方法同时插入两个数据库的内容,稍后,会将事务配置在service层.

UserService.java
package com.xa.service;

public interface UserService
{
	public void insertBothDatabase(String id,String name) throws Exception;
}



UserServiceImpl.java
package com.xa.service;

import com.xa.dao.UserDao1;
import com.xa.dao.UserDao2;

public class UserServiceImpl implements UserService
{
	private UserDao1 dao1;

	private UserDao2 dao2;
	
	public void insertBothDatabase(String id, String name) throws Exception {
		dao1.insertData(id, name);
		dao2.insertData(id, name);
	}

	public UserDao1 getDao1() {
		return dao1;
	}

	public void setDao1(UserDao1 dao1) {
		this.dao1 = dao1;
	}

	public UserDao2 getDao2() {
		return dao2;
	}

	public void setDao2(UserDao2 dao2) {
		this.dao2 = dao2;
	}
}

UserServiceImpl.java的代码可以看到,在insertBothDatabase方法中,调用了两个Dao的方法.


一个简单的应用已经建立,随后下一节将说明如何配置JOTM以及在Spring中的相关配置.
分享到:
评论
3 楼 cmjcmj8080 2012-01-12  
dennis_zane 写道
JOTAM和atomikos的代码都太老了,更新太缓慢了。我比较推荐BTM,代码比较清晰,并且使用了jdk5以来的并发框架,根据我们的测试,性能强很多
http://docs.codehaus.org/display/BTM/Home
使用也非常方便,相对这个社区开发也比较活跃。


谢了 我找时间学习一下 呵呵
2 楼 dennis_zane 2012-01-10  
JOTAM和atomikos的代码都太老了,更新太缓慢了。我比较推荐BTM,代码比较清晰,并且使用了jdk5以来的并发框架,根据我们的测试,性能强很多
http://docs.codehaus.org/display/BTM/Home
使用也非常方便,相对这个社区开发也比较活跃。
1 楼 cmjcmj8080 2012-01-10  
"insert into xa_test values('"+ id +"',"+name+")"
这里应该是
"insert into xa_test values("+ id +",'"+name+"')"吧,不然怎么传参test都报错

相关推荐

    spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)

    本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...

    Java分布式开发spring+jta+jotm

    在Spring应用中,你可以使用`@Transactional`注解来声明方法需要在一个事务中执行。Spring会自动管理和协调事务,无论操作涉及单个还是多个资源。例如,你可能有一个服务类,其中的方法需要同时更新数据库和消息队列...

    多数据源 更新 spring jta java jotm

    本文将深入探讨如何使用Spring、Java Transaction API (JTA) 和 Java Object Transaction Manager (JOTM) 实现多数据源更新的解决方案。 首先,让我们理解什么是多数据源。在传统的单数据源环境中,应用程序通常...

    spring mybatis jta jotm atomikos 配置

    NULL 博文链接:https://onlyor.iteye.com/blog/1483289

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

    本教程将深入探讨如何使用Spring框架、Java Transaction API (JTA) 和 Java Open Transaction Manager (JOTM) 来实现这样的分布式事务管理。 首先,我们来了解一下JTA。JTA是Java平台的标准事务API,它允许应用程序...

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

    Atomikos 是一个开源的JTA实现,它为Spring提供了一个轻量级、高性能的分布式事务解决方案。本文将深入探讨如何使用Spring、JTA和Atomikos来实现分布式事务。 首先,了解JTA的基本概念。JTA定义了一套规范,允许在...

    Spring+MyBatis+Atomikos实现JTA分布式事务

    本文将深入探讨如何使用Spring、MyBatis和Atomikos实现JTA分布式事务。 首先,让我们理解JTA的概念。Java Transaction API(JTA)是Java EE规范之一,用于处理分布式环境中的事务。它允许应用程序在不同的资源管理...

    Spring boot+Atomikos+JTA+Hibernate+MySQL实现分布式事务+多数据源(可运行)

    本项目使用Spring Boot、Atomikos、JTA(Java Transaction API)、Hibernate和MySQL来实现分布式事务处理和多数据源管理,以确保在多个数据库操作之间保持事务的ACID特性。 首先,Spring Boot作为微服务开发的主流...

    springboot+jta+atomikos

    Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量常用的Java和Web开发功能,如自动配置、起步依赖和运行时监测。Spring Boot 对于快速开发微服务和企业级应用...

    spring 3.0.5 + jotm 实现的的spring mvc 的例子

    标题中的“spring 3.0.5 + jotm 实现的的spring mvc 的例子”表明这是一个关于使用Spring 3.0.5版本与JOTM(Java Open Transaction Manager)结合构建Spring MVC应用的示例项目。这个项目可能旨在演示如何在Spring ...

    分布式事务JTA之实践:Spring+ATOMIKOS

    本篇文章将探讨如何在Java环境中,利用Spring框架和Atomikos这样的第三方工具实现分布式事务管理,即JTA(Java Transaction API)的实践。 JTA是Java平台提供的一种标准API,用于管理跨越多个资源(如数据库、消息...

    spring jta

    Spring作为一个开源的、全面的企业级应用开发框架,它提供了对JTA的集成,使得开发者能够在分布式环境中处理事务。JTA是Java平台标准的一部分,用于管理跨多个数据源(如数据库、消息队列等)的事务。 在Spring框架...

    Spring配置JTA事务管理

    Spring框架在企业级Java应用中广泛用于实现事务管理,而JTA(Java Transaction API)是Java平台上的标准事务处理API,适用于分布式环境。本篇文章将深入探讨如何在Spring中配置JTA事务管理,以实现跨数据库和资源的...

    Spring3.0+Hibernate+Atomikos多数据源分布式事务管理

    总的来说,Spring 3.0、Hibernate和Atomikos的组合提供了一种强大且灵活的方式来处理多数据源的分布式事务,使开发者能够构建高度可用和可扩展的企业级应用。通过深入理解这些技术的原理和实践,开发者可以更好地...

    spring-boot-jta-atomikos-sample:spring-boot-jta-atomikos-sample

    Spring Boot Jta Atomikos样本 Spring Boot Jta Atomikos样本 描述 这是一个示例示例项目,使用spring boot,jta和atomikos演示了分布式事务的工作方式。 该项目有两个mysql数据库,db:atomikos_one保留大写信息,...

    spring+mybatis+atomikos配置文件及相关包

    5. 如何在Spring中配置Atomikos以支持JTA事务 6. 配置文件的编写,包括Spring和Atomikos的配置 7. 在多数据库或微服务架构中的事务管理策略 这些知识点对于开发分布式系统,尤其是需要处理复杂事务场景的项目来说至...

    spring-jta-atomikos:JTA,JPA,Hibernate和Atomikos的Spring项目

    3. 如何将Narayana集成到Spring应用中,实现JTA事务的回滚和恢复。 4. JPA和Hibernate的配置,包括实体定义、数据源配置、事务策略等。 5. 示例应用,展示了如何在一个事务中同时操作多个数据源,体现JTA的分布式...

    Spring+Jotm+Hibernate+Oracle+Junit 实现JTA分布式事务要求Demo工程

    2.Spring+Jotm整合实现JTA分布式事务,应用场景如转账等,同一事务内完成db1用户加100元、db2用户减100元。 3.Spring+Junit4单元测试,优点:不会破坏数据库现场,等等。 (特别注意:Spring3.0里不在提供对jotm的...

    Spring boot+Atomikos+JTA+Hibernate+mybatis+MySQL实现分布式事务+多数据源

    Atomikos通过实现JTA规范,为Spring Boot应用提供了一种处理分布式事务的方法。 接下来,JPA(Java Persistence API)是Java EE中用于对象关系映射的标准API,它简化了数据库操作。在本案例中,我们使用JPA与...

Global site tag (gtag.js) - Google Analytics