来自:http://www.iteye.com/topic/81912
需求背景:
由于系统涉及到多个数据源,所以想用两阶段提交事务(分布式事务)来保证数据的一致性,完整性。
测试环境:
OS-->win2000
DB-->sql server 2K
j2ee容器和IDE-->WSAD
开发框架:struts+spring+hibernate
配置文件:
- <bean id="dataSourcedgLabourDB" class="org.springframework.jndi.JndiObjectFactoryBean">
- <property name="jndiName" value="jdbc/dg_labour"/>
- </bean>
-
- <bean id="sessionFactorydgLabourDB" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource" ref="dataSourcedgLabourDB"/>
- <property name="mappingDirectoryLocations">
- <list>
- <value>classpath:/com/legend/shipment/domain/dgLabour</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">${hibernate.dialect}</prop>
- <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
- <prop key="hibernate.cache.use_query_cache">${hibernate.cache.use_query_cache}</prop>
- <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>
- </props>
- </property>
- </bean>
-
- <bean id="wasTxMgr" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>
-
- <bean id="transactionManagerdgLabourDB" class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="transactionManager">
- <ref local="wasTxMgr"/>
- </property>
- </bean>
-
- <bean id="txProxyTemplatedgLabourDB" abstract="true"
- class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
- <property name="transactionManager"><ref bean="transactionManagerdgLabourDB"/></property>
- <property name="transactionAttributes">
- <props>
- <prop key="save*">PROPAGATION_REQUIRED</prop>
- <prop key="remove*">PROPAGATION_REQUIRED</prop>
- <prop key="del*">PROPAGATION_REQUIRED</prop>
- <prop key="update*">PROPAGATION_REQUIRED</prop>
- <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
- </props>
- </property>
- </bean>
问题描叙:
这几天我一直都在网上查找,自己实践摸索,确始终没有调试成功,希望那位能指点我一下谢谢!
1) 使得SQL Server2K 有 XA能力。
下载sql Server2005 JDBC驱动程序(
http://www.microsoft.com/downloads/details.aspx?FamilyID=E22BC83B-32FF-4474-A44A-22B6AE2C4E17&displaylang=zh-cn)。
安照里面的指南安装好,也成功测试了中间的一个例子。
2) 用WSAD JNDI的方式获取数据源。用WSAD中的XA方式配置数据源。
按照IBM官方网上(http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0407_woolf/0407_woolf.html)的例子,
建立了几个连接,也就是我的Spring配置文件中要使用的数据源。
调试中的问题:
出现异常“未能找到存储过程 'master..xp_jdbc_open'”
解决:在Sql server中查找,确实没有那个存储过程。由于用的是sql server 2005 jdbc 驱动程序,而且WSAD5.1也只提供了sql server 2000 jdbc driver(XA),所以推断是不是版本不匹配。于是下载了sql server 2000 jdbc driver,这样成功了。
分享到:
相关推荐
7. **分布式事务原理**: 分布式事务通常采用两阶段提交(2PC)、三阶段提交(3PC)或者更高级的补偿事务(Saga)等算法来协调跨多个节点的事务。Atomikos通过JTA接口实现了这些机制,使得应用程序无需关心底层实现,...
3. **两阶段提交(2PC)**:这是一种经典的分布式事务解决方案,包括准备阶段和提交阶段。所有参与者首先在准备阶段进行预提交,然后在提交阶段根据所有参与者的结果决定是否正式提交。然而,2PC存在单点故障、阻塞...
本文将深入探讨如何利用Spring 4.1.7、Atomikos以及MyBatis实现两阶段的分布式事务(2PC,Two-Phase Commit)。这是一套强大的解决方案,特别适用于处理跨多个数据库或服务的复杂业务逻辑。 首先,我们需要理解什么...
- **定义**: TCC是Try-Confirm-Cancel的缩写,它是一种基于两阶段提交的思想,但又不同于传统的两阶段提交协议。在TCC模式下,每个服务都需要实现Try、Confirm和Cancel三个接口。 - **应用场景**: 适用于对数据...
分布式事务的实现和处理机制有很多,如两阶段提交(2PC)、三阶段提交(3PC)、基于补偿的事务(Saga)等。在选择具体的事务管理方案时,需要根据业务场景的具体需求,考虑到数据一致性和系统可用性之间的权衡。 ...
3. 跨服务事务协调:在微服务架构中,分布式事务可能涉及多个服务,需要使用如Saga、TCC(Try-Confirm-Cancel)或2PC(两阶段提交)等分布式事务协调算法。 4. 性能影响:分布式事务会增加系统的复杂性,可能导致...
但传统的两阶段提交(2PC)等方案在面对大规模分布式环境时性能瓶颈明显,因此诞生了如TX-LCN这样的新型分布式事务框架。 2. **TX-LCN组件介绍**: - **TC(Transaction Coordinator)**:事务协调器,负责全局...
Spring框架提供了多种实现分布式事务管理的方式,其中一种是通过集成第三方工具如Atomikos来实现。Atomikos是一个开源的事务处理服务,支持JTA(Java Transaction API),能很好地处理分布式环境中的ACID(原子性、...
在这样的背景下,分布式事务成为了处理跨服务数据一致性问题的关键技术。 **分布式事务**是指涉及两个或更多节点上的资源管理器的一组操作,这些操作要么全部完成,要么全部不完成。它确保了不同服务之间数据的一致...
还有XA以及两阶段提交,并通过实例演示了使用JTA,通过两阶段提交,实现多数据源的事务实现。... 4-1 Spring事务机制_基本接口 4-2 Spring事务机制_实现 4-3 Jpa事务实例 4-4 Jms事务原理 4-5 Jms-session事务实例 4...
Atomikos 的主要功能在于支持分布式事务的两阶段提交(2PC)协议。在2PC中,事务的提交过程分为准备阶段和提交阶段。在准备阶段,事务协调者询问所有参与者的资源是否准备好提交,如果所有参与者都同意,那么在提交...
在使用RocketMQ实现分布式事务时,通常会采用两阶段提交协议(2PC)来确保这一点。两阶段提交协议将事务过程分为两个阶段:准备阶段和提交/回滚阶段。在准备阶段,事务协调者询问所有参与者是否准备好提交事务,只有...
分布式事务的设计与实现涉及到多个概念和技术要点,如两阶段提交(2PC)、三阶段提交(3PC)、柔性事务、幂等性保证、补偿事务(TCC)等。这些策略在不同的应用场景下有不同的适用性,开发者需要根据实际的业务需求...
分布式事务通常有多种解决方案,比如两阶段提交协议(2PC),三阶段提交协议(3PC),以及最终一致性等。然而,分布式事务的实现往往比较复杂,且可能影响系统的性能和可伸缩性。 Spring框架通过Spring Batch和...
在使用RocketMQ来实现分布式事务时,通常采用的是两阶段提交协议的变种。在第一阶段,消息的生产者会发送一个半事务消息到消息服务器上。此时,消息是暂时保存在服务器上,但不会被消费者消费。然后,在第二阶段,...
在分布式事务的实现上,一个常见的解决方案是使用两阶段提交协议(2PC),该协议通过一个协调者来控制多个参与者。在本案例中,可能使用的是一种轻量级的实现,即Atomikos事务管理器。Atomikos是一个流行的开源事务...
TCC模式是Seata支持的一种两阶段提交协议的扩展,它将事务分为Try、Confirm和Cancel三个阶段进行处理。TCC模式需要业务的编写者提供TCC三个阶段的具体实现。具体到Java环境下,尤其是在SpringCloud微服务架构中,...
对于分布式事务,我们可以使用JTA(Java Transaction API)配合X/Open XA规范实现两阶段提交(2PC)。 MySQL作为广泛使用的SQL数据库,虽然默认不支持分布式事务,但可以通过InnoDB存储引擎启用行级锁和事务支持。...
在实际应用中,Atomikos能够处理复杂的分布式事务场景,如两阶段提交(2PC),以保证ACID(原子性、一致性、隔离性和持久性)特性。同时,由于其高度的定制性和性能优化,即使在高并发环境中也能保持良好的性能。 ...
**分布式事务的关键挑战**: 分布式事务处理面临的主要挑战包括两阶段提交(2PC)协议的性能瓶颈、事务的回滚与恢复、并发控制以及事务的隔离级别等。Atomikos通过优化的事务算法和智能的回滚策略,尽可能减少了这些...