zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    ASP.NET 后台页面无法识别服务器控件ID
    HTML5 <li> <ol> <ul> 用法
    【转】船体分段测量 船舶精度管理
    【转】2000国家大地控制网
    【转】水准原点
    【转】城市CORS系统建设
    【转】我国常用的高程系统
    【转】地图的分幅与编号
    【转】大地测量系统和参考框架
    【转】国家天文大地网
  • 原文地址:https://www.cnblogs.com/wj/p/181274.html
Copyright © 2011-2022 走看看