上面配置有个小错误,更正下:<bean id="datasource_local" ..............<bean id="datasource_remote" .............2个id不能相同嘛。:P
解决方案 »
- hibernate,mysql数据库,连接正常,可是数个操作后出现Cannot open connection,貌似是连接数太多,求解
- (跪求高手,关于AndroidManifest.xml)
- java通过一个url生成这个网页的图片
- 隆重推出:张孝祥09年经典之作Struts视频教程免费下载
- Hibernate DAO接口问题
- 怎么根据id、父id自动遍历出树形结构xml?
- 请问在JAVA中如何调用DLL,最好能有个详细点的例子。
- 有Apache和Tomcat通过JK2整合的高手进来一试~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 哪位大虾帮我解决xml和java的问题?
- Deployment Descriptor视图无法显示的问题
- 我将是这样学习java的!!!
- 各位大哥,帮我看看下面的情况怎么处理?
你需要建立两个datasource,向你上面的那种明显是不对的,spring中不允许有同名的bean。然后设置两个sessionFactory,然后把datasource注入到相应的sessionFactory中。最后就是配置事务了,是否能使用同一个事务我不清楚,我觉得恐怕不行,除非你在代码中手工注入,把sessionFacotry1和sessionFacotry2注入HibernateTransactionManager或(JTA)中。这需要你新写一个事务处理类来实现。但是我对你的两个数据库使用同一种事务处理方式有些异议,这种做法很少见,而且有欠考虑。
我还是推荐你采用不同的处理方式比较好,配置两个事务处理基类,其余的具体使用只要extends基类就可以了。
我觉得是不是要自己通过继承那些spring已经提供了的TransactionManager(jdbc的, hibernate的,jta的),来写一个TransactionManager, 可以给它注入多个datasource. 重载: doRollback() protected void doRollback(DefaultTransactionStatus status) {
DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction();
Connection con = txObject.getConnectionHolder().getConnection();
if (status.isDebug()) {
logger.debug("Rolling back JDBC transaction on Connection [" + con + "]");
}
try {
con.rollback();
}
catch (SQLException ex) {
throw new TransactionSystemException("Could not roll back JDBC transaction", ex);
}
}里面使用:
con1.rollback();
con2.rollback();但 doRollback () 只传入了一个DefaultTransactionStatus这些都是框架定了的,如果真的修改那么篇幅很大哦,有看后怕的嘛。
对于jta我打算去摸一下。谢谢楼上的3位师兄。
这个帖子不错
http://www.jdon.com/jive/article.jsp?forum=121&thread=18249
我还是推荐你采用不同的处理方式比较好,配置两个事务处理基类,其余的具体使用只要extends基类就可以了
----------------------------------------------------------------
简直胡说八道!楼主的问题用spring很容易实现:配置两个容器管理的数据源、分别配置sessionFactory、最后配置一个Spring提供的JTA事务管理器就行了
<beans> <bean id="myDataSource1" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName value="java:comp/env/jdbc/myds1"/>
</bean> <bean id="myDataSource2" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myds2"/>
</bean> <bean id="mySessionFactory1" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource1"/>
<property name="mappingResources">
<list>
<value>product.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean> <bean id="mySessionFactory2" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource2"/>
<property name="mappingResources">
<list>
<value>inventory.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.OracleDialect</prop>
</props>
</property>
</bean> <bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/> <bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory1"/>
</bean> <bean id="myInventoryDao" class="product.InventoryDaoImpl">
<property name="sessionFactory" ref="mySessionFactory2"/>
</bean> <bean id="myProductServiceTarget" class="product.ProductServiceImpl">
<property name="productDao" ref="myProductDao"/>
<property name="inventoryDao" ref="myInventoryDao"/>
</bean> <bean id="myProductService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="myTxManager"/>
<property name="target" ref="myProductServiceTarget"/>
<property name="transactionAttributes">
<props>
<prop key="increasePrice*">PROPAGATION_REQUIRED</prop>
<prop key="someOtherBusinessMethod">PROPAGATION_REQUIRES_NEW</prop>
<prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean></beans>