jotm跨数据库 spring + hibernate
软件包
ow2-jotm-dist-2.1.9-bin.tar.gz
spring-framework-3.0.5.RELEASEhibernate-3.6.0.Final
hibernate-3.6.0.Final
spring和hibernate不再详述,讲讲jotm如何与spring集成
web开发中,使用hibernate的SessionFactory,而在SessionFactory中注入DataSource
DataSource需要支持事务,因此采用软件包ow2-jotm-dist-2.1.9-bin.tar.gz中的xapool.jar包来配置DataSource,放弃了org.springframework.jdbc.datasource.DriverManagerDataSource
配置jta事务管理器JtaTransactionManager
重点<property name="userTransaction" ref="jotm" />
Java代码 收藏代码
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm" />
<property name="allowCustomIsolationLevels" value="true"></property>
</bean>
数据源配置(DataSource)
重点<property name="transactionManager" ref="jotm" />
Java代码 收藏代码
//1号数据库
<bean id="dataSource1" 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="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/db1?characterEncoding=utf-8" />
</bean>
</property>
<property name="user" value="root" />
<property name="password" value="" />
</bean>
//2号数据库
<bean id="dataSource2" 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="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/db2?characterEncoding=utf-8" />
</bean>
</property>
<property name="user" value="root" />
<property name="password" value="" />
</bean>
SessionFactory配置
重点<property name="dataSource" ref="dataSource1" />
重点<property name="dataSource" ref="dataSource2" />
Java代码 收藏代码
//1号SessionFactory
<bean id="sessionFactory1" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="dataSource" ref="dataSource1" />
<property name="packagesToScan" value="com.yuce.test.entity"/>
</bean>
//2号SessionFactory
<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="dataSource" ref="dataSource2" />
<property name="packagesToScan" value="com.yuce.test.entity"/>
</bean>
附录
jotm必须的jar包
Java代码 收藏代码
xapool.jar
jotm-core.jar
carol.jar
carol-interceptors.jar
后记:
在使用spring的 进行跨数据库测试的时候没有问题,而在发布web的时候,启动始终都报异常javax.resource.spi.XATerminator找不到,查看类库的时候发现该类就在javaee.jar中,但发布的时候始终找不到。后来发现,这是由于在MyEclipse发布web的时候,设置项目->属性->Order and Export中没有将javaee.jar等jar包发布到web中,于是勾选该jar包,但测试仍然不能成功。
最后将javaee.jar包copy到tomcat是lib目录中,启动tomcat进行测试,一切正常。
暂时好不知道为什么设置了Order and Export也不能行的原因,只是知道在MyEclipse在打包发布的时候也不是完全可信的。切记。
转自:http://www.iteye.com/topic/1018356
分享到:
相关推荐
在多数据源环境中,JOTM可以帮助我们处理复杂的事务边界,保证在不同的数据库或服务之间的一致性,即使在出现故障时也能正确回滚。 首先,我们需要理解JTA的核心概念。JTA定义了一套标准接口,允许应用程序透明地...
在集成Spring+iBatis+JOTM的环境中,Spring主要负责事务策略的配置和管理,iBatis则作为持久层框架,负责SQL的执行,而JOTM作为事务管理器,确保跨数据库的事务一致性。 1. **环境搭建** - 首先,确保安装了JDK ...
JOTM支持XAResource,使得它可以与其他数据库系统、消息队列等资源适配器协同工作,实现跨多个资源的分布式事务。 **3. 集成Spring与JOTM:** 要将JOTM集成到Spring中,首先需要在项目中引入JOTM的依赖。通常,这...
然后,你可以使用`HibernateTransactionManager`,但要注意将其与JOTM的事务管理器配合使用,以确保跨数据源的事务一致性。 总结来说,Spring结合JOTM和Hibernate进行多数据源事务管理,主要涉及以下几个步骤:配置...
这通常涉及到跨数据库操作和分布式事务处理,确保数据的一致性和完整性。以下是一些关于这个主题的重要知识点: 1. **JTA(Java Transaction API)**:JTA是Java平台中用于处理分布式事务的标准API。它允许应用程序...
JTA是Java平台的标准事务API,它允许应用程序进行跨多个数据源(如数据库或消息队列)的全局事务处理。通过JTA,开发者可以编写不关心具体事务管理细节的代码,这样就提高了代码的可移植性和可维护性。 JOTM则是JTA...
5. **XAResource接口**:JOTM与数据库或者其他资源管理系统交互是通过实现XAResource接口来完成的。理解这个接口的实现,有助于你在自己的项目中集成其他资源。 6. **性能优化**:JOTM源码还包含了各种性能优化措施...
在实际开发中,这些JAR文件会被添加到项目的类路径中,以支持JOTM的功能,例如处理跨数据库的事务一致性、管理数据源连接池以及实现定时任务等。理解每个JAR的作用并正确配置,对于成功集成JOTM到项目中至关重要。...
4. **可扩展性**:JOTM支持多种事务资源,如数据库、JMS队列、文件系统等,并且可以方便地添加新的事务资源适配器。 5. **容错性和恢复能力**:JOTM具备事务日志记录功能,即使在系统故障后,也能进行事务恢复,...
在IT行业中,分布式事务处理是复杂系统架构中的一个重要环节,特别是在多数据库或者微服务环境中。...通过上述步骤,开发者能够在Tomcat应用服务器上实现跨数据库的事务一致性,从而构建更健壮的分布式应用。
Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...
这个项目旨在展示如何在Java应用程序中有效地管理和协调数据库事务,特别是对于分布式事务处理。 Spring是一个广泛使用的轻量级应用框架,它提供了一个全面的基础架构,支持面向切面编程(AOP)和依赖注入(DI),...
总的来说,跨多个数据库操作需要精细的事务管理,JTA提供了一个强大的解决方案,而Spring框架则简化了这个过程,使得开发者能够在各种环境下高效地处理多数据库事务。理解和熟练运用这些技术,对于构建健壮的、高...
1. **分布式事务管理**:JOTM能够协调跨越多个资源(如数据库、消息队列等)的事务,确保数据的一致性和完整性。它支持两阶段提交(2PC)协议,这是分布式事务处理中的标准模式。 2. **JTA兼容**:遵循Java EE的JTA...
JOTM作为一个事务协调者,负责管理跨多个资源的事务,确保它们要么全部成功,要么全部失败,这就是ACID(原子性、一致性、隔离性、持久性)原则的体现。在Spring框架中,我们可以利用Spring的声明式事务管理,通过...