一、引子
在分层架构的系统中,业务层(Buiness)通常需要调用多个数据访问层(DAO)方法才能实现1个完整的业务数据处理,这就需要考虑事务的统一管理。除了重量级的COM+外,能否有一种轻量有的事务管理方法呢?我思考良久,也曾在CSDN发贴寻求良方。
二、解决方案
经过数次的试验,决定借鉴如java中JTA的概念,将数据库连接与线程绑定,同一线程中启动的事务即为同一事务。终于可行,不敢独享。具体遵循如下:
1、由‘事务管理器’统一管理事务及数据库连接,防止数据库连接的实例在各层方法中层层传递,甚至做到在某些层次看不到事务及连接,只感觉到对象。
2、‘事务管理器’能够不同的数据源,即需要抽象出数据库连接管理器。
3、同一线程中启动的事务为同一事务。将数据库连接放入到HashTable,并以CurrentTread为key。
4、给数据库事务的标志属性(如:事务是否已经开始)加使用特性(Attribute)ThreadStatic。