• Castle实践4-Automatic Transaction Management Facility


            在进入第五节的NHibernate Facility之前,先介绍Automatic Transaction Management Facility,它是一个用于自动化管理事务的Facility,根据执行的方法是否抛出异常来决定“提交”或者“回滚”事务。
            Automatic Transaction Management Facility很简单,是辅助性质的Facility。它通过特性来使用的。使用的两个特性都是上一节所介绍的Castle.Services.Transaction中的,分别是:
    1)TransactionalAttribute:用于类,表明使用自动事务管理的。
    2)TransactionAttribute:用于方法,指定方法使用的事务模式和隔离级别。

    以下是使用方法:

    WindsorContainer container = new WindsorContainer(store);
    container.AddFacility( 
    "auto.transaction"new TransactionFacility() );

    [Transactional]
    public class BusinessClass
    {
      
    public void Load(int id)
      {
        
      }

      [Transaction(TransactionMode.Requires)]
      
    public '''virtual''' void Save(Data data)
      {
        
      }
    }

            这个Facility一般和其他的Facility一起使用。容器会对声明了TransactionAttribute的方法注入一个拦截器(Interceptor),拦截器依赖于一个ITransactionManager。
            它使用ITransactionManager来产生一个事务trans,然后在调用trans.Begin()之后执行方法处理,最后根据方法是否发生异常来trans.Commit()或者trans.Rollback(),最后是调用ITransactionManager.Dispose(trans)来释放资源。这样它就完成了事务自动化过程。
            需要注意的是:如果你在容器注册使用自动事务管理的组件不是以一个接口来注册的,那么在需要自动事务管理的方法必须声明为:virtual。为什么这样做?你需要了解动态代理的实现机制:http://www.zeroport.net/default.aspx/Repository.DynamicProxy
  • 相关阅读:
    phpcms 短信替换
    phpcms 搭建宣传网站首页
    JDK 8
    MySQL 5.6 date 与 string 的转换和比较
    Illustration of Git branching and merge
    Anti-pattern(反模式)
    Design Patterns笔记
    MyBatis小抄
    MyBatis MapperScannerConfigurer
    MyBatis 批量插入数据对插入记录数的限制
  • 原文地址:https://www.cnblogs.com/wj/p/181274.html
Copyright © 2020-2023  润新知