<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    事務管理最佳實踐多余的話之二
    Transaction 后綴給聲明式事務管理帶來的好處
    ?
    前言
    ?
    Transaction后綴給聲明式事務管理帶來的好處
    這樣,可以提醒接口的實現者和方法的使用者注意到它們對于數據庫連接和事務的依賴。
    實際上,使用*Transaction后綴這樣的命名方式,對于聲明式事務管理也是很有用處的。如,Spring的事務管理中,我們一般使用方法名的匹配來應用聲明式事務。
    一、請看下面的Spring配置:

    <bean?id="txProxyTemplate"?abstract="true"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    ???????
    <property?name="transactionManager"?ref="transactionManager"/>
    ???????
    <property?name="transactionAttributes">
    ???????????
    <props>
    ??????????????
    <prop?key="*">readOnly</prop>
    ??????????????
    <prop?key="add*">PROPAGATION_REQUIRED,-Exception</prop>
    ??????????????
    <prop?key="save*">PROPAGATION_REQUIRED,-Exception</prop>
    ??????????????
    <prop?key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
    ??????????????
    <prop?key="update*">PROPAGATION_REQUIRED,-Exception</prop>
    ??????????????
    <prop?key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
    ??????????????
    <prop?key="remove*">PROPAGATION_REQUIRED,-Exception</prop>
    ??????????????
    <prop?key="query*">PROPAGATION_REQUIRED,?readOnly,-Exception</prop>
    ??????????????
    <prop?key="load*">PROPAGATION_REQUIRED,?-Exception</prop>
    ???????????
    </props>
    ???????
    </property>
    ????
    </bean>


    這是來自于真實項目中的Spring聲明式事務配置。我們對每一個業務層的實現類都應用了這樣的事務配置。
    我們對所有業務服務Service方法使用了只讀事務。對以add,save,modify,update,delete,remove,load開頭的方法都使用了事務。
    但是,實際上,雖然我們開發的軟件一個“信息管理系統”,是圍繞數據庫開發的。但是,在Service層,我們還是有很多不操作數據庫的方法。
    如,單純根據業務邏輯進行計算的,適用緩存進行計算的,執行email發送,文件上傳等等任務的方法,在這種配置下都不分青紅皂白的應用了事務。
    SpringAOP生成的代理對象代理了我們的服務實現類,所有的方法執行前后都被攔截,用來得到和關閉數據庫連接,設置、提交和回滾事務。而不管這個方法是否用到了這個數據庫。
    如果遵照我提出的這個方法,使用*Transaction后綴來標識需要處理事務的方法,那么我們使用Spring聲明式事務時,就可以非常精確、有效的應用事務了!
    二、請看下面的Spring事務配置:

    <!--?UninstallWcmsJbpmProcessDefinition?-->
    ????
    <bean?id="uninstallWcmsJbpmProcessDefinition"?parent="txProxyTemplate">
    ?????????
    <property?name="target">
    ???????????
    <ref?bean="uninstallWcmsJbpmProcessDefinitionTarget"/>
    ???????
    </property>
    ???????
    <property?name="transactionAttributes">
    ???????????
    <props>
    ??????????????
    <prop?key="uninstall*Wcms*Transaction">PROPAGATION_REQUIRED,-Exception</prop>
    ???????????
    </props>
    ???????
    </property>
    ????
    ????
    </bean>


    我們對這個類中以uninstall開頭,中間包含Wcms,最后以Transaction結尾,這樣的規則命名的方法,應用了事務。
    三、部分源代碼:
    (一)2個應用了Spring聲明式事務的方法:

    /**
    ?????*使用SPring的ibatis,主要要配置iBatis的Spring聲明式事務。
    ?????*@throwsException
    ?????*<prop?key="uninstall*Wcms*Transaction">PROPAGATION_REQUIRED,-Exception</prop>
    ?????*1,還要刪除所有?頻道---新聞--工作流表中標記不為1的記錄。
    ?????
    */
    ????publicvoid?uninstallAllWcmsProcessDefinitionsTransaction()?
    throws ?Exception{
    ???????
    /**
    ????????*
    ????????*
    ????????
    */
    ???????
    this .getWcmsSystemChannelProcessdefinitionDao().deleteAll();
    ????????
    this .getWcmsSystemChannelNewsinfoDao().deleteAllProcessingWcmsSystemChannelNewsinfoModule();
    ????????
    ????????
    ???????
    ???????
    ????}
    ????
    /**
    ?????*<prop?key="uninstall*Wcms*Transaction">PROPAGATION_REQUIRED,-Exception</prop>
    ?????*@paramname
    ?????*@throwsException
    ?????
    */
    ????publicvoid?uninstallWcmsSystemChannelProcessdefinitionTransaction(String?name)?
    throws ?Exception{
    ???????
    ???????
    this .getWcmsSystemChannelProcessdefinitionDao().deleteByProcessdefinitionName(name);
    ????????
    this .getWcmsSystemChannelNewsinfoDao().deleteAllProcessingWcmsSystemChannelNewsinfoModuleByProcessdefinitionName(name);
    ???????
    ????}
    ?
    (二)用到的Dao類,用來實際訪問數據庫的2個DAO對象。
    /**
    ?????*SPring管理的ibatis功能
    ?????
    */
    private ?IWcmsSystemChannelProcessdefinitionDao?wcmsSystemChannelProcessdefinitionDao;
    ????
    private ?IWcmsSystemChannelNewsinfoDao?wcmsSystemChannelNewsinfoDao;
    ?

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1419332

    posted on 2006-12-02 17:13 蘆葦 閱讀(233) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 热99re久久精品精品免费| www.999精品视频观看免费| 五月婷婷亚洲综合| 色五月五月丁香亚洲综合网| 热99re久久精品精品免费| 亚洲欧美黑人猛交群| 四虎影院免费视频| 羞羞网站免费观看| 亚洲午夜福利精品无码| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 国产麻豆免费观看91| 亚洲国产AV无码一区二区三区| 在线a亚洲老鸭窝天堂av高清| 色噜噜的亚洲男人的天堂| 国产一区二区三区在线免费| 四虎影视久久久免费观看| 丁香亚洲综合五月天婷婷| 国产97视频人人做人人爱免费| 在线天堂免费观看.WWW| 亚洲日本一线产区和二线产区对比| 国产99久久久久久免费看| 亚洲色成人中文字幕网站| 成全高清在线观看免费| 777亚洲精品乱码久久久久久| j8又粗又长又硬又爽免费视频| 免费福利在线播放| 亚洲成a人不卡在线观看| 日韩高清在线免费看| 国产精品免费久久久久久久久 | 国产午夜鲁丝片AV无码免费| 成人午夜影视全部免费看| 亚洲国产精品国自产拍AV| 成人免费在线看片| 国产精品亚洲色婷婷99久久精品| 四虎永久在线精品免费观看视频| 亚洲精品无码Av人在线观看国产| www亚洲精品久久久乳| 国产亚洲AV夜间福利香蕉149| 免费一级全黄少妇性色生活片| 国产日本一线在线观看免费| 日本亚洲高清乱码中文在线观看|