• 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
  • 相关阅读:
    Win7下VS2010、IIS7配置常见问题收集
    ASP.NET 4.0尚未在 Web 服务器上注册 解决方法
    jQuery
    玩转OpenStack
    ubuntu14.04开启root用户 设置root密码 配置国内镜像源 设置分辨率
    JavaScripts基础
    css
    微信小程序Nginx环境配置
    html语言
    Python并发编程-redis-3.0.5 源码安装
  • 原文地址:https://www.cnblogs.com/wj/p/181274.html
Copyright © 2020-2023  润新知