【良少的专栏】

余好读书,乐思善疑。有过目不忘之能,亦有掩卷即忘之病,故尝攥文以记之。

用户操作
[即时聊天] [发私信] [加为好友]
沈东良ID:shendl
255246次访问,排名242好友5人,关注者111
shendl的文章
原创 106 篇
翻译 4 篇
转载 20 篇
评论 581 篇
沈东良的公告

遭遇骗子恶意欺诈,奋战中!!!

最近评论
domemy:Linux 环境下的多核调试
— Intel + Totalview 强强联合!
目前,在软件开发行业,各种性能优异的调试工具层出不穷。但是,它们中的绝大部分都只支持windows环境。即使能支持linux平台,操作起来也很不方便。因此,对于长期在linux上编写程序的开发人员来说,如何调试就成了一个令人头痛的问题!Intel软件 和 Total……
shendl:我好象是做成PDF放到CSDN的下载中心了
conan2086:这篇文章很好!可以做成DOC发到CSDN上吗?
方便收藏!最好再把新的心得写进去!
xiangjun_yu:在sun公司下载了三四次 都下载的不完全
不知道什么原因。
谢谢你的资源了。
xiangjun_yu:在sun公司下载了三四次 都下载的不完全
不知道什么原因。
谢谢你的资源了。
文章分类
收藏
    相册
    blog图片
    我的照片
    推荐Blog
    CSDN专家群(RSS)
    博客周刊(RSS)
    张孝祥专栏(RSS)
    我的CSDN作家区
    杨洪波(RSS)
    许式伟的专栏(RSS)
    谭振林(RSS)
    银狐999(RSS)
    阿蒙专栏(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 事务管理最佳实践多余的话之二:Transaction后缀给声明式事务管理带来的好处收藏

    新一篇: 事务管理最佳实践多余的话之三Spring声明式事务管理出错示例与解决之道 | 旧一篇: 事务管理最佳实践多余的话之一“每次请求,一次数据库连接,一次事务”是不是金科玉律?

     
    事务管理最佳实践多余的话之二
    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声明式事务的方法:
    /**
         *使用SPringibatis,主要要配置iBatisSpring声明式事务。
         *@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;
     
     
     

    发表于 @ 2006年11月29日 08:25:00|评论(loading...)|编辑

    新一篇: 事务管理最佳实践多余的话之三Spring声明式事务管理出错示例与解决之道 | 旧一篇: 事务管理最佳实践多余的话之一“每次请求,一次数据库连接,一次事务”是不是金科玉律?

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 沈东良