隨筆-13  評(píng)論-9  文章-9  trackbacks-0
          統(tǒng)觀spring事務(wù),圍繞著兩個(gè)核心PlatformTransactionManager和TransactionStatus

          spring提供了幾個(gè)關(guān)于事務(wù)處理的類:?
          TransactionDefinition?//事務(wù)屬性定義
          TranscationStatus?//代表了當(dāng)前的事務(wù),可以提交,回滾。
          PlatformTransactionManager這個(gè)是spring提供的用于管理事務(wù)的基礎(chǔ)接口,其下有一個(gè)實(shí)現(xiàn)的抽象類AbstractPlatformTransactionManager,我們使用的事務(wù)管理類例如DataSourceTransactionManager等都是這個(gè)類的子類。

          一般事務(wù)定義步驟:
          TransactionDefinition td = new TransactionDefinition();
          TransactionStatus ts = transactionManager.getTransaction(td);
          try
          { //do sth
          ? transactionManager.commit(ts);
          }
          catch(Exception e){transactionManager.rollback(ts);}
          ?

          spring提供的事務(wù)管理可以分為兩類:編程式的和聲明式的。編程式的,比較靈活,但是代碼量大,存在重復(fù)的代碼比較多;聲明式的比編程式的更靈活。

          編程式主要使用transactionTemplate。省略了部分的提交,回滾,一系列的事務(wù)對(duì)象定義,需注入事務(wù)管理對(duì)象.
          void add()
          {
          ??? transactionTemplate.execute( new TransactionCallback(){
          ??????? pulic Object doInTransaction(TransactionStatus ts)
          ?????? { //do sth}
          ??? }
          }

          聲明式:
          使用TransactionProxyFactoryBean:
          <bean id="userManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ??<property name="transactionManager"><ref bean="transactionManager"/></property>
          ??<property name="target"><ref local="userManagerTarget"/></property>
          ??<property name="transactionAttributes">
          ???<props>
          ????<prop key="insert*">PROPAGATION_REQUIRED</prop>
          ????<prop key="update*">PROPAGATION_REQUIRED</prop>
          ????<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
          ???</props>
          ??</property>
          ?</bean>

          圍繞Poxy的動(dòng)態(tài)代理 能夠自動(dòng)的提交和回滾事務(wù)
          org.springframework.transaction.interceptor.TransactionProxyFactoryBean
          • PROPAGATION_REQUIRED--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù)。這是最常見的選擇。
          • PROPAGATION_SUPPORTS--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。
          • PROPAGATION_MANDATORY--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。
          • PROPAGATION_REQUIRES_NEW--新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。
          • PROPAGATION_NOT_SUPPORTED--以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
          • PROPAGATION_NEVER--以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
          • PROPAGATION_NESTED--如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則進(jìn)行與PROPAGATION_REQUIRED類似的操作。
          posted on 2006-06-23 15:35 Dragonofson 閱讀(14332) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 玉田县| 沙洋县| 新源县| 崇礼县| 廊坊市| 黄石市| 库车县| 观塘区| 齐齐哈尔市| 澎湖县| 友谊县| 绩溪县| 兰考县| 兖州市| 南阳市| 宾川县| 晴隆县| 钦州市| 利津县| 无锡市| 石林| 双牌县| 兴国县| 滦平县| 通海县| 无锡市| 射洪县| 珲春市| 松潘县| 鞍山市| 万山特区| 苏尼特右旗| 阿图什市| 芜湖市| 江达县| 尚志市| 赣榆县| 梅河口市| 宁国市| 大足县| 桂平市|