为什么TransactionsCope不回滚分布式交易?
-
08-10-2019 - |
题
我正在使用一个称为的对象持久框架 生态 用于将数据更新为SQL Server。我注意到,如果我创建了一个TransactionsCope,然后在我的第一次交易承诺后故意抛出异常,但是在我的第二笔交易提交之前,第一个数据库已更新,而第二个数据库则没有。
我认为,一旦分布式事务协调器在主DB上运行时,我只需要做众多更新即可创建TransactionsCope?
谁能想到为什么这会通过允许使用第一个数据库更新但不使用第二个情况的情况?
解决方案
知道了!
ECO支持以下数据库...
- 黑鱼
- DB2
- 火鸟
- Mimer
- mysql
- nexusdb
- Oracle
- sqlite
- SQLServer
- Sybase
- Borland数据提供商
- Borland数据库Express(DBX)
我记得今天早上,其中一些不支持连接池,因此在抽象的PersistenceMapper类中,Eco已实施了自己的连接池。这就是发生的事情
- 应用开始
- 我选择将我的对象映射信息存储在数据库本身中,因此Eco获得连接并读取该映射信息
- Eco返回到游泳池的连接,但其自己的池
- 我稍后开始分布式交易
- 我将对象更新到数据库
- 生态从其自己的池检索连接
结果,连接未在当前的分布式交易中列入。考虑到SQLConnection进行自己的合并,将persistencemappersqlserver.maxpoolsize设置为零是可以接受的。
现在,它使用SQLConnection组件来处理连接的创建/处置,不仅该组件将连接池池进行池,而且还正确处理了分布式交易!
我写信给开发人员,让他们知道他们应该标记这一属性过时。
不隶属于 StackOverflow