spring.net + nhibernate 多数据库的支持,以及跨数据库的事物处理的讨论

来源:互联网 发布:地图线路制作软件 编辑:程序博客网 时间:2024/06/15 19:13

现在项目基本都是多数据库的数据存储方式,但sh架构的对多数据库架构的支持好像没发现什么好的解决方案。尤其采用了spring.net的事物aop后,感觉对多数据库的事物处理更费劲。可能是本人水平太低吧。

 

目前项目中,对多数据数据库的支持,就是每一个数据库配置相应的sessionFactory、transactionMananger与transactionInterceptor。在dao层实现3个对象的注入。可是此方式并不能实现跨数据的事物处理。这可是大问题。为此,索性不用spring.net提供的事物处理模块,或对于跨数据库采用自己的事物处理方式。其实spring.net的事物处理是采用aop方式,那何不项目中自己写一个事物aop实现多数据库的事物支持以及跨数据库的事物处理呢?

 

实现的代码就不贴了,原理如下:

 

1.  创建一个TransactionOptionAttribute事物选择类继承自Attribute

     TransactionOptionAttribute类中关联System.Transaction的TransactionScopeOption枚举

 

2.  创建一个TransactionAdvice事物建议继承IMethodInterceptor

 

     根据TransactionOptionAttribute的事物枚举值创建System.Transaction的TransactionScope的对象实现跨数据库的事物处理

 

3. 给客户端的方法添加TransactionOption的事物声明。

 

4. 别忘了,在系统中启动分布式事务处理的服务。

 

这个是个比较土鳖的方式来实现对支持多数据库以及事物的支持。但感觉还实用,呵呵~

原创粉丝点击