在博客上看到“系统设计应关注并发性 ”文章中提到的有关分布式异构数据库的事务处理,好象大家都没有办法。
就像大家都知道的,在一个事务Commit后,这个事务再进行Roolback已经是无效的了。
那么我们可以在事务未Cmmit之前就可以Catch到Exception的。
比如:目前有两个Connection :一个为本地SQL 数据库的Connection,叫LocalConnection,另一个是服务器上的Oracle的Connection叫OracleConnection。
当前LocalConnection上有两个操作,OracleConnection上也有两个操作,我们先把两个事务Open()
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/dot.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/dot.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](/Images/OutliningIndicators/None.gif)
这样的话,如果有异常的话,两个事务都不会提交的。
不知道这样的方式,存不存在不正确的,欢迎大家讨论。
我在SPL中用这个这种方式实现的,测试也通过了。