spring.net 分散式交易 實現方式 多資料庫並發訪問下 服務層 交易管理 .net下交易管理

來源:互聯網
上載者:User
      首先要強調太強大了,微軟雖然提供了scope來支援分散式交易,但是,只是對sql server支援的很好,system.data.oracleclient不支援分散式交易,今天有時間測試了下spring.net的多資料庫同步事務,成功了,感謝spring.net,做的很好,現在將我的設定檔及server層代碼copy如下:
     1、設定檔
<?xml version="1.0" encoding="utf-8" ?><objects xmlns="http://www.springframework.net" xmlns:aop = "http://www.springframework.net/aop" xmlns:db="http://www.springframework.net/database"     xmlns:tx="http://www.springframework.net/tx"><!--spring.net的交易管理員  但是要用到spring.net自身dao實現--><db:provider id="dbProvider"   provider="System.Data.SqlClient"   connectionString="server=192.168.1.82;database=HLJ_InfoManager;user id=sa;password=sa;Pooling=true;Min Pool Size=10;Max Pool Size=50;Connection Lifetime=30;Connection Timeout=30;"/><!--spring.net訪問oracle的配置方法 --><db:provider id="dbProviderOracle"  provider="System.Data.OracleClient"  connectionString="Data Source=ORA99;User ID=pda;Password=pda;"/>    <!--如果spring.net對其它資料庫的支援不太好的話,可以考慮用odbc這種通用的資料庫連接方式    --><!--adoTemplate--><object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data"><property name="DbProvider" ref="dbProvider"/><property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/></object><object id="adoTemplateOracle" type="Spring.Data.Core.AdoTemplate, Spring.Data"><property name="DbProvider" ref="dbProviderOracle"/><property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/></object><!--交易管理員--><object id="transactionManager"   type="Spring.Data.Core.AdoPlatformTransactionManager, Spring.Data">   <property name="DbProvider" ref="dbProvider"/></object><object id="transactionManagerOracle"   type="Spring.Data.Core.AdoPlatformTransactionManager, Spring.Data"><property name="DbProvider" ref="dbProviderOracle"/></object><!--fun list--><object id="IUserFun" type="com.gs.im.bl.system.impl.UserFunImpl, com.gs.im.bl"><property name="AdoTemplate" ref="adoTemplate"/><property name="AdoTemplateOracle" ref="adoTemplateOracle"/></object><!--自訂驅動方式(根據方法的名字判斷事務的類型)--><tx:advice id="txAdvice" transaction-manager="transactionManager"><!-- the transactional semantics...--><tx:attributes><!-- all methods starting with 'get' are read-only --><tx:method name="Get*" read-only="true"/><!-- other methods use the default transaction settings (see below) --><tx:method name="Do*"/></tx:attributes></tx:advice><tx:advice id="txAdvice1" transaction-manager="transactionManagerOracle"><!-- the transactional semantics...--><tx:attributes><!-- all methods starting with 'get' are read-only --><tx:method name="Get*" read-only="true"/><!-- other methods use the default transaction settings (see below) --><tx:method name="Do*"/></tx:attributes></tx:advice><object id="serviceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop"><property name="pattern" value="com.gs.im.bl.*"/></object><aop:config><aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice"/><aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice1"/></aop:config></objects>

2、server層代碼的寫法,本樣是在server層配置的交易管理

         public void DoAdd()        {           Base_UsersDao base_UsersDao = this.GetDao<Base_UsersDao>();            Base_Users user = new Base_Users            {                LogName = "張三",                UserName = "張三瘋"            };            // 向sqlserver 插入資料()            this.AdoTemplate.ExecuteNonQuery(CommandType.Text, "insert into base_users (logname, username) values ('張三', '張三瘋')");    //向oracle插入資料            this.AdoTemplateOracle.ExecuteNonQuery(CommandType.Text, "insert into base_users (logname, username) values ('張三', '張三瘋')");            throw new ApplicationException("同時更新oracle跟sql server資料庫spring.net的事務起不起作用呢?");}

備忘,實際中server層會去調用不同的dao對象去操作資料庫的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.