分布式事务管理System.Transactions.TransactionScope

此分布式数据库事务管理需开启 msdtc服务,它是微软分布式传输协调程序http://blog.sina.com.cn/s/blog_53a072c10100towp.html

-----------测试代码-----------  

//需引用 System.Transactions;

 

  //IBatisNetDAL.CustomDAL的db链接设置为|DataDirectory|iBatisDemo_Data.mdf

   Demo.SpringUse.IBLL.IProductBLL productMgr = (Demo.SpringUse.BLL.ProductBLL)
                    Spring.Context.Support.ContextRegistry.GetContext().GetObject("ProductBLL");

   //IBatisNetDAL.ProductDAL的db链接设置为|DataDirectory|Copy of iBatisDemo_Data.MDF

           Demo.SpringUse.IBLL.ICustomBLL customBLLMgr = (Demo.SpringUse.BLL.CustomBLL)
               Spring.Context.Support.ContextRegistry.GetContext().GetObject("CustomBLL");

            IList l1 = productMgr.SelectAll();
            IList l2 = customBLLMgr.SelectAll();


            using (TransactionScope scope = new TransactionScope())
            {
                //http://blog.sina.com.cn/s/blog_53a072c10100towp.html
                //需开启 msdtc.exe服务,它是微软分布式传输协调程序
               Demo.SpringUse.Model.Custom c = newDemo.SpringUse.Model.Custom();
                c.Address = "test1" + DateTime.Now.Ticks;
                c.CustomName = "myname" + DateTime.Now.Ticks;
                c.IsMember = true;

               Demo.SpringUse.Model.Product p = newDemo.SpringUse.Model.Product();
                p.ProductName = "pname"+DateTime.Now.Ticks;
                p.NormalPrice = DateTime.Now.Second;
                p.MemberPrice = DateTime.Now.Minute;

                productMgr.Insert(p);

                customBLLMgr.Insert(c);

                scope.Complete();
            }


            l1 = productMgr.SelectAll();
            l2 = customBLLMgr.SelectAll();

 

-----------------

       //http://blog.sina.com.cn/s/blog_53a072c10100towp.html
                //需开启 msdtc.exe服务,它是微软分布式传输协调程序;
                //oracle数据库须安装相关支持组件
                //http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html
                //http://download.oracle.com/otn/other/ole-oo4o/ODTwithODAC1020221.exe

                //ODAC10.2.0.2.21主要包括:
                //a) Oracle Data Provider for .NET 1.x (10.2.0.2.20)
                //b) Oracle Data Provider for .NET 2.0 (10.2.0.2.20)
                //c) Oracle Database Extensions for .NET 1.x (10.2.0.2.20) -- upgrade only
                //d) Oracle Database Extensions for .NET 2.0 (10.2.0.2.20) -- upgrade only
                //e) Oracle Services for Microsoft Transaction Server (10.2.0.1.0)
                //f) Oracle Provider for OLE DB (10.2.0.2.20)
                //g) Oracle Objects for OLE (10.2.0.2.20)
                //h) Oracle Client (10.2.0.1.0)
                //i) Oracle Universal Installer (10.2.0.2.0)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的分布式事务管理器的代码示例: ```python import uuid import time class TransactionCoordinator: def __init__(self): self.transactions = {} def start_transaction(self, participants): transaction_id = str(uuid.uuid4()) self.transactions[transaction_id] = {'participants': participants, 'status': 'pending'} return transaction_id def commit_transaction(self, transaction_id): if transaction_id not in self.transactions: raise ValueError('Transaction not found') transaction = self.transactions[transaction_id] status = transaction['status'] if status == 'committed': raise ValueError('Transaction already committed') elif status == 'aborted': raise ValueError('Transaction already aborted') for participant in transaction['participants']: try: response = participant.commit(transaction_id) if not response: raise ValueError('Participant returned false') except: raise ValueError('Participant failed to commit') transaction['status'] = 'committed' def abort_transaction(self, transaction_id): if transaction_id not in self.transactions: raise ValueError('Transaction not found') transaction = self.transactions[transaction_id] status = transaction['status'] if status == 'committed': raise ValueError('Transaction already committed') elif status == 'aborted': raise ValueError('Transaction already aborted') for participant in transaction['participants']: try: response = participant.abort(transaction_id) if not response: raise ValueError('Participant returned false') except: raise ValueError('Participant failed to abort') transaction['status'] = 'aborted' class Participant: def __init__(self): self.local_data = {} def commit(self, transaction_id): if transaction_id not in self.local_data: return False time.sleep(1) # simulate network latency del self.local_data[transaction_id] return True def abort(self, transaction_id): if transaction_id not in self.local_data: return False time.sleep(1) # simulate network latency del self.local_data[transaction_id] return True ``` 上面的代码包含两个类:`TransactionCoordinator` 和 `Participant`。 `TransactionCoordinator` 是一个事务协调器,负责协调分布式事务的执行。它有一个 `transactions` 字典来跟踪所有当前进行的交易。`start_transaction` 方法会创建一个新的交易,并返回一个交易 ID。`commit_transaction` 和 `abort_transaction` 方法分别用于提交或中止一个事务。在这些方法中,协调器会向每个参与者发送请求,以提交或中止该事务。 `Participant` 是一个参与者,它有一个 `local_data` 字典来存储每个事务的本地数据。`commit` 和 `abort` 方法分别用于提交或中止一个事务。在这些方法中,参与者会检查本地数据是否包含该事务,然后将其删除。在实际情况中,参与者可能需要执行其他操作,例如在数据库中写入或删除数据。 请注意,上面的代码仅用于示例目的。在实际情况中,您需要考虑更多的情况,例如网络故障和参与者的崩溃。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值