我的applicationContext.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-2.5.xsd"> <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://10.129.68.170:3306/jotm1" />
<property name="username" value="root" />
<property name="password" value="root" />
<!--
<property name="validationQuery" value="select current_date()"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
-->
</bean>
<bean id="sessFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds1" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/xa/model/User1.hbm.xml</value>
</list>
</property>
</bean> <bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://10.129.68.170:3306/jotm2" />
<property name="username" value="root" />
<property name="password" value="root" />
<!--
<property name="validationQuery" value="select current_date()"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
-->
</bean>
<bean id="sessFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="ds2" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/xa/model/User2.hbm.xml</value>
</list>
</property>
</bean> <bean id="User1DAO" class="com.xa.dao.User1DAO">
<property name="sessionFactory">
<ref bean="sessFactory1" />
</property>
</bean>
<bean id="User2DAO" class="com.xa.dao.User2DAO">
<property name="sessionFactory">
<ref bean="sessFactory2" />
</property>
</bean>
<bean id="userServiceDS" class="com.xa.service.UserServiceDS">
<property name="dao1" ref="User1DAO" />
<property name="dao2" ref="User2DAO" />
</bean> <!-- JOTM配置 开始 -->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm" />
</bean>
<bean id="myService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTxManager" />
<property name="target">
<bean class="com.xa.service.UserServiceDS">
<property name="dao1" ref="User1DAO" />
<property name="dao2" ref="User2DAO" />
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- JOTM配置 结束 -->
</beans>DS方法中的调用是这样的: public void insertBothUser(User1 user1, User2 user2){
this.insertUser1(user1);
if(true){
throw new RuntimeException();
}
this.insertUser2(user2);
}对应的插入方法如下:public void save(User1 transientInstance) {
log.debug("saving User1 instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
在插入第二时手动抛出运行时异常,但结果是第一个仍插入了,事务没有回滚,请各位兄弟指点一二。
<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-2.5.xsd"> <bean id="ds1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://10.129.68.170:3306/jotm1" />
<property name="username" value="root" />
<property name="password" value="root" />
<!--
<property name="validationQuery" value="select current_date()"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
-->
</bean>
<bean id="sessFactory1" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds1" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/xa/model/User1.hbm.xml</value>
</list>
</property>
</bean> <bean id="ds2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://10.129.68.170:3306/jotm2" />
<property name="username" value="root" />
<property name="password" value="root" />
<!--
<property name="validationQuery" value="select current_date()"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="false"/>
-->
</bean>
<bean id="sessFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="ds2" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/xa/model/User2.hbm.xml</value>
</list>
</property>
</bean> <bean id="User1DAO" class="com.xa.dao.User1DAO">
<property name="sessionFactory">
<ref bean="sessFactory1" />
</property>
</bean>
<bean id="User2DAO" class="com.xa.dao.User2DAO">
<property name="sessionFactory">
<ref bean="sessFactory2" />
</property>
</bean>
<bean id="userServiceDS" class="com.xa.service.UserServiceDS">
<property name="dao1" ref="User1DAO" />
<property name="dao2" ref="User2DAO" />
</bean> <!-- JOTM配置 开始 -->
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction" ref="jotm" />
</bean>
<bean id="myService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTxManager" />
<property name="target">
<bean class="com.xa.service.UserServiceDS">
<property name="dao1" ref="User1DAO" />
<property name="dao2" ref="User2DAO" />
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- JOTM配置 结束 -->
</beans>DS方法中的调用是这样的: public void insertBothUser(User1 user1, User2 user2){
this.insertUser1(user1);
if(true){
throw new RuntimeException();
}
this.insertUser2(user2);
}对应的插入方法如下:public void save(User1 transientInstance) {
log.debug("saving User1 instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
在插入第二时手动抛出运行时异常,但结果是第一个仍插入了,事务没有回滚,请各位兄弟指点一二。
解决方案 »
- Failed to read input解决方案
- enum被当做关键字
- 从java中输入一个地址链接到邮箱中
- JSP中一个怎么都想不通的问题??????
- ejb的发布
- 求解:还是基本上同一个问题jstl
- 查询数据库,输出到excel并下载
- 求助:用JB+WL运行一个servlet,JB编译通过,但运行时抛出异常:Logging Error: Could not set up Cocoon Logger, will use screen inste
- 在WebLogic5.1.0使用EJB
- Java怎么打出这样的乘法表
- Hibernate OSCache 缓存使用问题!
- 大批量数据导入性能方面问题
this.insertUser1(user1);//
this.insertUser2(user2);//
是操作的同一个数据源吗?
private User1DAO dao1;
private User2DAO dao2;
public void insertBothUser(User1 user1, User2 user2){
this.insertUser1(user1);
if(true){
throw new RuntimeException();
}
this.insertUser2(user2);
} public void insertUser1(User1 user1) {
dao1.save(user1);
} public void insertUser2(User2 user2) {
dao2.save(user2);
} public User1DAO getDao1() {
return dao1;
} public void setDao1(User1DAO dao1) {
this.dao1 = dao1;
} public User2DAO getDao2() {
return dao2;
} public void setDao2(User2DAO dao2) {
this.dao2 = dao2;
}
}
如果是同一个数据库,我肯定不使用JTA。JOTM(JTA)不就是为了解决不同数据库的事务问题的么?
看看这个帖子
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.221)(PORT=1521)))(CONNECT_DATA=(SID=oracledb)(SERVER=DEDICATED)))" />
<property name="username" value="extjs" />
<property name="password" value="123" />
</bean>
<bean id="lobHelper" class="org.carf.common.jdbc.oracle.OracleLobHelper" />
<bean id="SequenceIncrementer" class="org.springframework.jdbc.support.incrementer.OracleSequenceMaxValueIncrementer" singleton="false">
<property name="dataSource" ref="jdbcdataSource" />
<property name="incrementerName" value="SQU_" />
</bean>
可以的话给我的发一个您的配置吧,不知道你还有没有.
[email protected]