请教关于DAO事务控制

07-06-14 cscs31
在设计DAO的时候,我有个疑问,不知道大家是怎么解决的?
在Client端(Service)调用DAO接口的时候,我想是如下情况
Dao1 d1 = Spring.getBean("dao1");
Dao2 d2 = Spring.getBean("dao2");
d1.save(obj1);
d2.update(obj2);
然后在这个代码的基础上的事务控制,是做在一个地方的,如果写全应该是如下伪代码:
tx = manager.getTransaction();
tx.beginTransaction();
d1.save(obj1);
d2.update(obj2);
tx.commitTransaction();
大概是这个样子,没有写全,在这里事务的控制能否抽象出来在一个地方做?是不是要用AOP来实现?因为每个dao中的方法我不想做事务控制,我感觉dao是一个相对独立的操作。
请大家指教...

[该贴被cscs31于2007年06月15日 12:21修改过]

[该贴被cscs31于2007年06月15日 13:41修改过]

[该贴被cscs31于2007年06月15日 13:43修改过]

banq
2007-06-15 15:50
可以提高到Service中使用JTA来实现事务。

注意:你的调用DAO方式:Dao1 d1 = Spring.getBean("dao1");有误,业务层Service和DAO层是同在一个Spring容器中,不能以getBean这样容器外调用方式调用,直接使用IOC注射即可。

cscs31
2007-06-15 16:51
不好意思不太懂SPRING,如果我直接用getBean是会有Exception抛出吗?
IOC注射,主要是哪几句API?

gougou3250
2007-06-15 18:05
不需要代码,直接在SPRING的配置文件里配类之间的调用关系,可以用构造方法或者SET方法来实现注入,找书看一下,非常简单的

gougou3250
2007-06-15 18:07
用aop来做,当有update , insert , delete操作时,自动调用transaction

cscs31
2007-06-19 09:29
谢谢各个,我想了一下,多个操作的可能不太多,大多是单个的操作,那么用AOP的方法比较好,还有就是多个操作用AOP可能不太好实现。
所以决定单个用AOP,多个的直接在DAO层前加一层调用层,然后再在Service层中调用。折中吧...