struts2+spring3.2.9+hibernate4.2.0+atomikos3.8实现分布式事务JTA

目前开发的J2EE系统用到了两个数据源,需要分布式事物(JTA)的支持,但是tomcat不支持JTA,开发调试不太方便,本文通过使用atomikos实现了分布式事务的支持,理论可以运行在任何java容器中。

一、将以下jar包放到lib目录下

二、将配置文件jta.properties放到WEB-INF目录下,内容如下:

三、修改spring配置文件,建立2个数据源:

<bean id="dataSource" class="com.atomikos.jdbc.AtomikosDataSourceBean"  init-method="init" destroy-method="close">

<description>oracle xa datasource</description>

<property name="uniqueResourceName">

<value>oracle_ds</value>

</property>

<property name="xaDataSourceClassName">

<value>${jdbc.XADriverClassName}</value>

</property>

<property name="xaProperties">

<props>

<prop key="user">${jdbc.username}</prop>

<prop key="password">${jdbc.password}</prop>

<prop key="URL">${jdbc.url}</prop>

</props>

</property>

<property name="minPoolSize" value="5" />

<property name="maxPoolSize" value="100" />

<property name="borrowConnectionTimeout" value="30" />

<property name="testQuery" value="select 1 from dual " />

<property name="maintenanceInterval" value="60" />

</bean>

<bean id="dataSourceForAdmin" class="com.atomikos.jdbc.AtomikosDataSourceBean"  init-method="init" destroy-method="close">

<description>oracle xa datasource</description>

<property name="uniqueResourceName">

<value>oracle_ds_admin</value>

</property>

<property name="xaDataSourceClassName">

<value>${admin.jdbc.XADriverClassName}</value>

</property>

<property name="xaProperties">

<props>

<prop key="user">${admin.jdbc.username}</prop>

<prop key="password">${admin.jdbc.password}</prop>

<prop key="URL">${admin.jdbc.url}</prop>

</props>

</property>

<property name="minPoolSize" value="5" />

<property name="maxPoolSize" value="100" />

<property name="borrowConnectionTimeout" value="30" />

<property name="testQuery" value="select 1 from dual" />

<property name="maintenanceInterval" value="60" />

</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">false</prop>

<prop key="hibernate.current_session_context_class">jta</prop>

<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>

</props>

</property>

<property name="packagesToScan" value="com.domain"/>

</bean>

<bean id="sessionFactoryForAdmin" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSourceForAdmin" />

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>

<prop key="hibernate.show_sql">true</prop>

<prop key="hibernate.format_sql">false</prop>

<prop key="hibernate.current_session_context_class">jta</prop>

<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>

</props>

</property>

<property name="packagesToScan" value="com.domain"/>

</bean>

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

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

<description>UserTransactionManager</description>

<property name="forceShutdown">

<value>true</value>

</property>

</bean>

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

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

</bean>

<bean id="txManager"   class="org.springframework.transaction.jta.JtaTransactionManager">

<property name="transactionManager">

<ref bean="atomikosTransactionManager" />

</property>

<property name="userTransaction">

<ref bean="atomikosUserTransaction" />

</property>

</bean>

<!-- 配置事务切面 -->

<tx:advice id="txAdvice" transaction-manager="txManager">

<tx:attributes>

<tx:method name="get*" propagation="REQUIRED"  read-only="true"/>

<tx:method name="find*" propagation="REQUIRED"  read-only="true"/>

<tx:method name="query*" propagation="REQUIRED"  read-only="true"/>

<tx:method name="select*" propagation="REQUIRED"  read-only="true"/>

<tx:method name="save*" propagation="REQUIRED"/>

<tx:method name="add*" propagation="REQUIRED"/>

<tx:method name="delete*" propagation="REQUIRED"/>

<tx:method name="del*" propagation="REQUIRED"/>

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="execute*" propagation="REQUIRED"/>

<tx:method name="exec*" propagation="REQUIRED"/>

<tx:method name="*" propagation="REQUIRED"    read-only="true"/>

</tx:attributes>

</tx:advice>

四、oracle数据源的支持:

这里使用的是oracle10g,需要使用支持XA数据源的驱动,这里为 ojdbc14.jar 或者ojdbc6.jar 均可;

配置如下,注意和单数据源驱动类名称区别

五、dao和不同sessionfactory关联:

<bean id="answerQueryDao" class="com.dao.impl.AnswerQueryDaoImpl" scope="singleton">

<property name="sessionFactory">

<ref bean="sessionFactory"/>

</property>

</bean>

<bean id="adminLoginTokenDao" class="com.dao.impl.AdminLoginTokenDaoImpl" scope="singleton">

<property name="sessionFactory">

<ref bean="sessionFactoryForAdmin"/>

</property>

</bean>

六、只能使用openSession来获取session,不能通过getCurrentSession获取,并且要调用flush方法才能使增加删除修改操作生效如下:

七、测试成功,供需要的同行参考一下,不妥之处,还请网友拍砖。

时间: 2024-07-30 14:32:46

struts2+spring3.2.9+hibernate4.2.0+atomikos3.8实现分布式事务JTA的相关文章

SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结

一 开发环境 1.动态web工程 2.部分依赖 java代码: hibernate-release-4.1.0.Final.zip hibernate-validator-4.2.0.Final.jar spring-framework-3.1.1.RELEASE-with-docs.zip proxool-0.9.1.jar log4j 1.2.16 slf4j -1.6.1 mysql-connector-java-5.1.10.jar hamcrest 1.3.0RC2 ehcache 2

Struts2,Spring3,Hibernate4整合--SSH框架

Struts2,Spring3,Hibernate4整合--SSH框架(学习中) 一.包的导入 1.Spring包 2.Hibernate 包 3.struts 包 4.数据库方面的包及junt4的包 二.配置文件 1.beans.xml (具体要注意的已经注释到 xml 中了,目前整合了Spring 与 hibernate4 ) <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h

Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合

java教程|Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合教程并测试成功一.创建项目二.搭建struts-2.3.4.11.struts2必须的Jar包(放到WEB-INF/... Struts2.3.4.1+Spring3.2.3+Hibernate4.1.9整合教程并测试成功 一. 创建项目 二. 搭建struts-2.3.4.1 1.struts2必须的Jar包(放到WEB-INF/lib目录下): 2.配置struts2.3的过滤器 web.xml

使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框架来开发项目,而这些框架一般不是单独使用的,经常是Struts2+Spring3+Hibernate.SpringMVC+Spring+Hibernate.SpringMVC+Spring+Mybatis这几种组合中的一种,也就是多个框架配合起来使用.今天来总结一下如何使用Maven搭建Struts

Struts2.3.6+Spring3.2.4+Hibernate4.2.4 Jar包总结

struts2-core-2.3.16.jar 是struts2的核心框架 xwork-core-2.3.16.jar struts2-core的依赖包,struts2是在此基础上开发的 javassist-3.15.0-GA.jar 初始化struts2的Filter的必要组件,Hibernate延时加载生成代理类使用,生成字节码的类,同asm,但是较简单,可动态改变类结构或生成类, commons-io-2.4.jar javassist引用的jar包,流操作的一些工具? commons-l

Maven搭建Struts2+Spring3+Hibernate4框架

做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框架来开发项目,而这些框架一般不是单独使用的,经常是Struts2+Spring3+Hibernate.SpringMVC+Spring+Hibernate.SpringMVC+Spring+Mybatis这几种组合中的一种,也就是多个框架配合起来使用.今天来总结一下如何使用Maven搭建Struts

[转]Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合

原文地址:http://blog.csdn.net/ycb1689/article/details/22928519 最新版Struts2+Hibernate+Spring整合 目前为止三大框架最新版本是: struts2.3.16.1 hibernate4.3.4 spring4.0.2 其中struts2和hibernate的下载方式比较简单,但是spring下载有点麻烦,可以直接复制下面链接下载最新版spring http://repo.springsource.org/libs-rele

Struts2.3.16.1+Hibernate4.3.4+Spring4.0.2 框架整合

最新版Struts2+Hibernate+Spring整合 目前为止三大框架最新版本是: struts2.3.16.1 hibernate4.3.4 spring4.0.2 其中struts2和hibernate的下载方式比较简单,但是spring下载有点麻烦,可以直接复制下面链接下载最新版spring http://repo.springsource.org/libs-release-local/org/springframework/spring/4.0.2.RELEASE/spring-f

struts2.3.16 整合spring4.0.5 和 hibernate4.3.0

1.由struts2 框架自身根据struts.xml 中 的映射实例化Action 对象 Action 类代码如下: package com.hasonger.ssh.action; import java.util.Date; import com.hasonger.ssh.entity.User; import com.hasonger.ssh.service.UserService; import com.opensymphony.xwork2.ActionSupport; import