讨论:关于SSH三层框架中的事务处理

第一次在javaeye发帖,好激动……

最近在涉及一个Struts 2,Hibernate 3.2,Spring 2.5的项目。对于Spring的事务处理,有一些疑惑。

之前做过的项目也是SSH的,但分层则是使用了两层,即把service和dao合在了一起。
先来说说之前我这个两层的结构:

首先是一个BaseDaoImpl,这个Dao集成了HibernateDaoSupport,实现了对于数据表的增删改查操作。
例如:修改方法:
public void modifyModel(Object model) throws UpdateException{
		try {
			super.getHibernateTemplate().update(model);
		} catch (Exception ex) {
			logger.error("PersistentBaseDAOImpl:" + model.getClass().getName());
			throw new UpdateException(ex);
		}
	}


都是类似这样的单个业务的逻辑。然后各个业务Dao通过Spring的bean配置,去使用这个BaseDao中的方法来完成自身不同的数据库操作。
如果有这样一个功能,执行UserAction,这个Action中的某个方法会调用UserDao中的getUserContent方法。
在getUserContent方法中,首先调用BaseDao的查询方法,获取了该用户存在,并合法。之后再去调用另一个Dao中的方法,如ContentDao中的getContent方法去获取该用户所发的文章。
总的来说就是在UserDao中的getUserContent方法内,进行了两次对数据库的操作。
那么将这个方法配置到Spring的事务管理中,这两个对数据库的操作就成为了一个事务,根据事务的原子性被统一的管理。
基本就是以下这个图:
UserAction--->UserDao.getUserContent()--即完成验证用户功能,又获取用户文章


现在遇到的是三层结构的逻辑。
UserAction--->UserService.getUserContent()
                 |---UserDao.fineUser()---验证用户
                 |---ContentDao.getContentByUserId()---获取用户文章
如果将UserDao和ContentDao配置在Spring的事务管理中,那么执行UserService中的方法,实际上是执行了两个不同的事务来完成这个逻辑。但是把UserService配置到事务中,感觉又不合逻辑,也没配过。

现在我看来,如果把整个逻辑定义为一个事务,必须要把Service层的方法配置在Spring的事务管理中了。

不知道大家都是怎么处理三层中的事务。

作者: ydxy425 
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

已有 4 人发表回复,猛击->>这里<<-参与讨论


JavaEye推荐



posted @ 2009-12-18 16:17  Fervour  阅读(2923)  评论(0编辑  收藏  举报