- 浏览: 421738 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (318)
- js (20)
- JQuery (2)
- Java (46)
- Oracle (4)
- mysql (21)
- ExtJs (17)
- Excel (2)
- Linux (8)
- Sql (8)
- Jsp (2)
- hibernate (12)
- jbpm (17)
- eclipse (8)
- 名博收藏 (1)
- Junit (2)
- 应用集成 (3)
- web (10)
- jboss (3)
- Rest (3)
- 其它 (7)
- 磁盘分区管理 (1)
- spring (18)
- SSO (4)
- tomcat (4)
- CSS (7)
- MemCached (6)
- EhCache (4)
- weblogic (1)
- apache (6)
- Exception design (1)
- db (1)
- 分析模式 (1)
- jstl (1)
- jsf (0)
- firefox (2)
- MongoDB (4)
- androidpn (1)
- hadoop (1)
- cvs (1)
- 微信公众号 (2)
- 高并发 (4)
- 技术论坛 (1)
- CDN (1)
- JVM (16)
- 加密 (4)
- maven (2)
- jenkins (1)
- hessian (1)
- 大数据处理 (2)
- NIO (0)
- netty (1)
- redis (1)
- git (1)
- Elastic Job (0)
最新评论
-
zgw06629:
或者<pre>aaaabbbbcccc</p ...
javaDoc注释换行 -
ddnzero:
...
StringBuffer换行 -
maosijun:
。。。。
EXT CExt.form.ComboBox选择一次后只剩一个选项 -
ysa198584:
你这有问题,当我的代码出现User.class的时候,反编绎的 ...
java的class文件批量反编译 -
dongj0325:
看到您的博客,很受启发,但还有关于jbpm4.4 timer使 ...
JBPM定时器(Timer)之Repeat属性不能使用变量
【藏自】http://boy00fly.iteye.com/blog/1110655
最近项目中涉及到了两个Oracle数据库的操作。需要用到分布式事务,研究之后贴出代码供大家参考。
1.dao-core.xml(核心事务配置XML)
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <!-- 支持注解 -->
- <context:annotation-config />
- <bean id="jotm"
- class="org.springframework.transaction.jta.JotmFactoryBean" />
- <bean id="txManager"
- class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="userTransaction" ref="jotm" />
- </bean>
- <!--两个数据源-->
- <bean id="cmcDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
- <property name="dataSource">
- <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
- <property name="transactionManager" ref="jotm"/>
- <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@192.168.6.80:1521:C2SServer"/>
- <property name="user" value="d1xn_cmc"/>
- <property name="password" value="d1xn_cmc"/>
- </bean>
- </property>
- <property name="user" value="d1xn_cmc"/>
- <property name="password" value="d1xn_cmc"/>
- </bean>
- <bean id="woniuDataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
- <property name="dataSource">
- <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
- <property name="transactionManager" ref="jotm"/>
- <property name="driverName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@192.168.6.80:1521:C2SServer"/>
- <property name="user" value="sn_woniu"/>
- <property name="password" value="sn_woniu"/>
- </bean>
- </property>
- <property name="user" value="sn_woniu"/>
- <property name="password" value="sn_woniu"/>
- </bean>
- <!-- =================== 事务管理AOP配置 =================== -->
- <bean id="cmcEntityManagerFactory"
- class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
- <property name="persistenceXmlLocation" value="classpath:com/d1xn/commercial/dao/config/persistence.xml"/>
- <property name="persistenceUnitName" value="CMC_PU"/>
- <property name="dataSource" ref="cmcDataSource"/>
- <property name="loadTimeWeaver">
- <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
- </property>
- <property name="jpaPropertyMap">
- <map>
- <entry key="hibernate.transaction.manager_lookup_class"
- value="org.hibernate.transaction.JOTMTransactionManagerLookup" />
- <entry key="hibernate.transaction.flush_before_completion" value="true" />
- <entry key="hibernate.transaction.auto_close_session" value="true" />
- <entry key="hibernate.current_session_context_class" value="jta" />
- <entry key="hibernate.connection.release_mode" value="auto" />
- </map>
- </property>
- </bean>
- <bean id="woniuEntityManagerFactory"
- class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
- <property name="persistenceXmlLocation" value="classpath:com/d1xn/commercial/dao/config/persistenceWoniu.xml"/>
- <property name="persistenceUnitName" value="WONIU_PU"/>
- <property name="dataSource" ref="woniuDataSource"/>
- <property name="loadTimeWeaver">
- <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/>
- </property>
- <property name="jpaPropertyMap">
- <map>
- <entry key="hibernate.transaction.manager_lookup_class"
- value="org.hibernate.transaction.JOTMTransactionManagerLookup" />
- <entry key="hibernate.transaction.flush_before_completion" value="true" />
- <entry key="hibernate.transaction.auto_close_session" value="true" />
- <entry key="hibernate.current_session_context_class" value="jta" />
- <entry key="hibernate.connection.release_mode" value="auto" />
- </map>
- </property>
- </bean>
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <tx:attributes>
- <tx:method name="save*" rollback-for="Excepiton"/>
- <tx:method name="delete*" rollback-for="Excepiton"/>
- <tx:method name="update*" rollback-for="Excepiton"/>
- <tx:method name="find*" read-only="true"/>
- <tx:method name="*" rollback-for="java.lang.Exception"/>
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:pointcut id="userOperation"
- expression="execution(public * com.d1xn.commercial.dao.imp.*Service*.*(..))"/>
- <aop:advisor advice-ref="txAdvice"
- pointcut-ref="userOperation"/>
- </aop:config>
- <!-- ===================== AOP事务配置结束 ====================== -->
- <!-- 业务类 -->
- <bean id="cmcDaoHelper" class="com.d1xn.dao.core.DAOHelper" init-method="init">
- <property name="entityManagerHelper">
- <bean class="com.d1xn.commercial.dao.cmc.CmcEntityManagerHelper"/>
- </property>
- </bean>
- <bean id="woniuDaoHelper" class="com.d1xn.dao.core.DAOHelper" init-method="init">
- <property name="entityManagerHelper">
- <bean class="com.woniu.system.dao.WoniuEntityManagerHelper"/>
- </property>
- </bean>
- <bean id="jtaTestService" class="com.d1xn.commercial.dao.imp.JTATestService">
- <property name="cmcDaoHelper" ref="cmcDaoHelper"/>
- <property name="woniuDaoHelper" ref="woniuDaoHelper"/>
- </bean>
- </beans>
2.persistence.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
- version="1.0">
- <persistence-unit name="CMC_PU" transaction-type="JTA">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <class>com.d1xn.commercial.pojo.cmc.entity.GameGoodsType</class>
- <class>com.d1xn.commercial.pojo.cmc.entity.ThreeRole</class>
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
- <property name="hibernate.show_sql" value="true" />
- <!-- 最大连接数 -->
- <property name="hibernate.c3p0.max_size" value="20"/>
- <!-- 最小连接数 -->
- <property name="hibernate.c3p0.min_size" value="5"/>
- <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
- <property name="hibernate.c3p0.timeout" value="120"/>
- <!-- 最大的PreparedStatement的数量 -->
- <property name="hibernate.c3p0.max_statements" value="100"/>
- <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
- <property name="hibernate.c3p0.idle_test_period" value="120"/>
- <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
- <property name="hibernate.c3p0.acquire_increment" value="2"/>
- <!-- 每次都验证连接是否可用 -->
- <property name="hibernate.c3p0.validate" value="true"/>
- </properties>
- </persistence-unit>
- </persistence>
3.persistenceWoniu.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
- version="1.0">
- <persistence-unit name="WONIU_PU" transaction-type="JTA">
- <provider>org.hibernate.ejb.HibernatePersistence</provider>
- <class>com.woniu.system.pojo.SysCompany</class>
- <class>com.woniu.system.pojo.SysUserRole</class>
- <class>com.woniu.system.pojo.SysUserRoleId</class>
- <properties>
- <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle9Dialect" />
- <property name="hibernate.show_sql" value="true" />
- <!-- 最大连接数 -->
- <property name="hibernate.c3p0.max_size" value="20"/>
- <!-- 最小连接数 -->
- <property name="hibernate.c3p0.min_size" value="5"/>
- <!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
- <property name="hibernate.c3p0.timeout" value="120"/>
- <!-- 最大的PreparedStatement的数量 -->
- <property name="hibernate.c3p0.max_statements" value="100"/>
- <!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
- <property name="hibernate.c3p0.idle_test_period" value="120"/>
- <!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
- <property name="hibernate.c3p0.acquire_increment" value="2"/>
- <!-- 每次都验证连接是否可用 -->
- <property name="hibernate.c3p0.validate" value="true"/>
- </properties>
- </persistence-unit>
- </persistence>
4.MyTest-context.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
- <import resource="classpath:com/d1xn/commercial/dao/config/dao-core.xml"/>
- </beans>
5.IJTATestService.java接口
6.JTATestService.java类
- public class JTATestService implements IJTATestService {
- private DAOHelper woniuDaoHelper;
- private DAOHelper cmcDaoHelper;
- public boolean saveEntity(IEntity woniu, IEntity cmc) {
- woniuDaoHelper.persist(woniu);
- cmcDaoHelper.persist(cmc);
- return false;
- }
- public void setWoniuDaoHelper(DAOHelper woniuDaoHelper) {
- this.woniuDaoHelper = woniuDaoHelper;
- }
- public void setCmcDaoHelper(DAOHelper cmcDaoHelper) {
- this.cmcDaoHelper = cmcDaoHelper;
- }
- }
7. MyTest.java
- @ContextConfiguration
- @RunWith(SpringJUnit4ClassRunner.class)
- public class MyTest {
- @Autowired
- private IJTATestService service;
- @org.junit.Test
- public void test() {
- SysCompany sysCompany = new SysCompany();
- sysCompany.setSName("sss");
- sysCompany.setSState("0");
- SysUserRole role = new SysUserRole();
- SysUserRoleId id = new SysUserRoleId();
- id.setNRoleId(2L);
- id.setNUserId(1L);
- role.setId(id);
- GameGoodsType type = new GameGoodsType();
- type.setSNo("aaa");
- type.setSName("222");
- type.setSState("1");
- service.saveEntity(sysCompany, type);
- }
- }
8.特别说明
在项目测试的过程中,有一个错误困扰了我很久,总会报这样的错误
Hibernate: select SN_WONIU.SYS_COMPANY_SQ.nextval from dual
java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin:@192.168.6.80:1521:C2SServer : 调用中无效的参数
Google了一大圈有不少人碰到这个问题,后来偶是在http://forum.springsource.org/archive/index.php/t-28145.html找到了答案,就是在配置数据源的时候,StandardXAPoolDataSource中要配置user和password,StandardXADataSource中也要配置user和password。 不明白为啥,希望高人不吝赐教。
发表评论
-
Spring Security认识
2015-07-28 15:29 589先来谈一谈Acegi的基础知识,Acegi的架构比较复杂,但 ... -
acegi第一个实例
2015-07-28 14:30 385目前acegi(Spring Security)主要是针对简 ... -
Acegi (Spring Security)入门
2015-07-28 13:25 936一、Acegi Security 介绍 1 ... -
Spring JMS MessageListener实现类不能参与事务拦截
2015-06-04 11:29 1372Spring JMS MessageListener实现类不 ... -
spring配置定时器的时间设置
2014-01-10 16:26 543转自:http://blog.csdn.net/zhaoz ... -
Spring跨库事务JOTM
2012-08-18 22:16 660http://sprone.iteye.com/blog/89 ... -
spring+hibernate+jotm分布式事务配置总结
2012-03-10 17:44 868在前段开拓的体系 中 ... -
spring分布式事务实现
2012-03-10 17:27 1068藏自:http://log-cd.iteye.com/blog ... -
Spring声明式事务管理源码解读之事务提交
2012-03-04 22:43 763其实我的感觉就是事务提交要比事务开始复杂,看事务是否提交我们还 ... -
主题:解惑:在spring+hibernate中,只读事务是如何被优化的。
2011-08-28 11:00 1247出自:http://www.iteye.com/topic/9 ... -
【收藏】Spring TransactionManager和hibernate吐血经验谈
2011-08-22 20:45 1015http://lsk.iteye.com/blog/17879 ... -
【收藏】Spring事务王国架构
2011-08-20 10:12 645http://book.51cto.com/art/20090 ... -
【转载】TransactionSynchronizationManager理解
2011-08-19 21:25 908出自:http://blog.sina.com.cn/s/bl ... -
【收藏】主题:解惑 spring 嵌套事务
2011-08-18 23:08 697http://www.iteye.com/topic/3590 ... -
主题:Spring源码浅析 -- XML配置文件的载入与解析
2011-07-31 11:06 1073原文:http://www.iteye.com/topic/7 ... -
主题:Spring源代码解析(一):IOC容器
2011-07-31 08:45 775以下内容引自博客:http://jiwenke-spring. ... -
Spring MVC中的IoC容器初始化
2011-06-30 10:16 821http://blog.csdn.net/prince2270 ...
相关推荐
Spring框架作为一个广泛使用的Java应用程序开发框架,提供了多种支持事务管理的解决方案,其中包括集成JOTM(Java Open Transaction Manager)来处理分布式事务。本文将深入探讨Spring与JOTM结合使用的知识点,帮助...
对于分布式事务,Spring支持JTA事务管理,并且可以无缝集成JOTM。 1. **配置JOTM**:首先,你需要在项目的类路径下添加JOTM的依赖库。然后,在Spring的配置文件中定义JOTM的事务管理器 bean,例如: ```xml ...
本文将深入探讨如何在Tomcat应用服务器上集成JTA,并使用JOTM(Java Open Transaction Manager)或Atomikos作为事务管理器来实现分布式事务。 首先,我们需要理解JTA的核心概念。JTA是Java EE平台的一部分,提供了...
这篇博客文章“使用JOTM实现分布式事务管理(多数据源)”将深入探讨如何利用JOTM来处理复杂的分布式环境中的事务。 首先,理解JTA是至关重要的。JTA是Java平台的标准,定义了API,使得应用开发者可以控制跨数据库、...
在Spring中,当需要处理分布式事务时,可以使用PlatformTransactionManager接口的实现,例如JtaTransactionManager,它是基于JTA的。Spring会自动检测到`jotm.properties`配置文件,并自动配置JOTM作为事务管理器。`...
在Spring中集成JOTM可以提供更高级别的事务控制,确保在多数据源环境下事务的一致性和完整性。 首先,我们需要了解在没有使用JOTM时,Spring与Hibernate的常规配置。在提供的XML配置代码中,可以看到Spring配置了一...
JOTM可以在Spring框架中无缝集成,通过Spring的PlatformTransactionManager接口来配置和使用。 **Spring 配置JTA和JOTM** 在Spring中使用JTA和JOTM,首先需要在项目中引入JOTM的依赖。接着,你需要配置Spring的`...
本文详细介绍了如何在Tomcat服务器环境下使用Spring框架结合JOTM进行多数据源下的分布式事务管理。通过上述步骤,开发者可以轻松地搭建起一套完整的多数据源事务处理环境,为复杂业务场景提供强大的支持。这种配置...
在集成Spring+iBatis+JOTM的环境中,Spring主要负责事务策略的配置和管理,iBatis则作为持久层框架,负责SQL的执行,而JOTM作为事务管理器,确保跨数据库的事务一致性。 1. **环境搭建** - 首先,确保安装了JDK ...
在Spring中,可以通过集成JOTM来实现JTA的功能。JOTM是一个开源的Java事务管理器,符合X/Open XA规范,可以处理跨多个资源的事务。 要在Spring中配置JOTM,首先添加JOTM和Spring的JTA依赖到项目中。然后,定义一个`...
这个DEMO可以帮助开发者理解如何在实际项目中集成JOTM和Spring进行分布式事务处理。需要注意的是,虽然DEMO中没有包含jar包,但你仍需自行获取并添加到项目中,否则无法正常运行。在实践中,根据具体的业务需求和...
在Spring中,通过集成JOTM,可以实现全局的事务控制,确保在多资源操作中保持数据的一致性。 **集成步骤**: 1. **添加依赖**:首先,项目需要在构建配置(如pom.xml或build.gradle)中引入Spring 3.0.5和JOTM的...
本篇文章将探讨如何在Java环境中,利用Spring框架和Atomikos这样的第三方工具实现分布式事务管理,即JTA(Java Transaction API)的实践。 JTA是Java平台提供的一种标准API,用于管理跨越多个资源(如数据库、消息...
而“jotm-2.0.10”则是JOTM的具体版本,包含其核心组件和必要的依赖,用于在Spring环境中配置和使用JOTM。 为了运行这个示例,你需要将这些jar包添加到你的项目类路径中,然后配置Spring的事务管理器为JOTM,并配置...
在Spring的配置文件中,首先需要定义一个JOTM Bean,用于提供全局的事务管理服务。JOTM是一个高性能、可扩展的开源事务管理器,它可以支持多种事务类型,包括本地事务和X/Open XA全局事务。 ```xml <bean id="...
JOTM(Java Open Transaction Manager)是一个开源的Java...总的来说,JOTM、XAPool和Spring的组合为Java开发者提供了一个强大而灵活的分布式事务解决方案,能够在复杂的企业级环境中保证数据的一致性和应用的可靠性。
在Spring框架中,JTA(Java Transaction API)事务管理是一种用于处理分布式事务的高级机制,它允许应用程序在多个数据源之间进行协调的事务操作。本文将详细介绍如何在Spring中使用JTA事务管理,包括通过集成JOTM...
8. **集成与配置**:学习如何将JOTM集成到常见的Java应用服务器(如Tomcat、JBoss等)和Spring框架中,是实际开发中非常实用的部分。 通过深入研究JOTM 2.0的源码,开发者不仅可以掌握事务管理的精髓,还能提升对...
对于多个数据库的事务管理,Spring主要依赖于JTA(Java Transaction API)和XAResource接口来实现分布式事务。然而,JTA的XA事务通常在J2EE环境下工作,需要容器支持,比如JBoss、WebLogic等。在J2SE环境中,Spring...
在本文中,我们将深入探讨如何使用Spring、Hibernate和JOTM进行分布式事务管理,以实现在一个Service方法中同时操作两个不同数据源的数据,并确保任何错误都能导致所有操作回滚。首先,我们需要了解这些技术的基本...