使用AbstractRoutingDataSource无法在JTA分布式事务中切换数据源

等鱼上勾 2013-05-08 02:33:32
我在应用中使用了AbstractRoutingDataSource进行动态数据源切换,但在JTA分布式事务中无法实现多个数据源切换,经过源码分析,主要是在以下代码过程中出现问题:

public static Connection doGetConnection(DataSource dataSource) throws SQLException {
Assert.notNull(dataSource, "No DataSource specified");


//[color=#FF0000]下面的代码就是出现问题的地方,每次都是找上一次绑定的数据源[/color]
ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
if (conHolder != null && (conHolder.hasConnection() || conHolder.isSynchronizedWithTransaction())) {

conHolder.requested();
if (!conHolder.hasConnection()) {
logger.debug("Fetching resumed JDBC Connection from DataSource");
conHolder.setConnection(dataSource.getConnection());
}
return conHolder.getConnection();
}
// Else we either got no holder or an empty thread-bound holder here.

logger.debug("Fetching JDBC Connection from DataSource");
Connection con = dataSource.getConnection();

if (TransactionSynchronizationManager.isSynchronizationActive()) {
logger.debug("Registering transaction synchronization for JDBC Connection");
// Use same Connection for further JDBC actions within the transaction.
// Thread-bound object will get removed by synchronization at transaction completion.
ConnectionHolder holderToUse = conHolder;
if (holderToUse == null) {
holderToUse = new ConnectionHolder(con);
}
else {
holderToUse.setConnection(con);
}
holderToUse.requested();
TransactionSynchronizationManager.registerSynchronization(
new ConnectionSynchronization(holderToUse, dataSource));
holderToUse.setSynchronizedWithTransaction(true);
if (holderToUse != conHolder) {
TransactionSynchronizationManager.bindResource(dataSource, holderToUse);
}
}

return con;
}



请问这个问题有谁碰到过吗?怎么解决?
...全文
329 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
z183348509 2015-07-18
  • 打赏
  • 举报
回复
楼主找到好的解决方案了吗?
gugunnon 2014-07-01
  • 打赏
  • 举报
回复
楼主,我也遇到这个问题了,还望解答一下啊。
ff861 2013-07-30
  • 打赏
  • 举报
回复
楼主,问题最终怎么解决的啊,我也遇到了,还忘解答下啊
h405589168 2013-05-24
  • 打赏
  • 举报
回复
楼主,这个问题解决了吗?我也遇到同样的需求啊,求指点~
小丑哥_V5 2013-05-10
  • 打赏
  • 举报
回复
请参考我的基于spring,security,struts的开源项目 http://blog.csdn.net/shadowsick
等鱼上勾 2013-05-08
  • 打赏
  • 举报
回复
求高人帮助?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧