精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-04-21
事务可以用AOP的方式阿
其实G-roller和Spring中的HibernateTemplate都是不错的选择,可以看代码,还是利用ThreadLocal来解决的,不过加了个Intercepter |
|
返回顶楼 | |
发表时间:2004-04-21
AOP太前卫了,不敢用。。。
回头再研究一下spring先 |
|
返回顶楼 | |
发表时间:2004-04-23
robbin 写道 如果该DAO需要一个细颗粒度的事务的话,那么你就
Session session = HibernateSession.currentSession();; HibernateSession.currentTransaction();; ..... session.flush();; HibernateSession.commitTransaction();; 这样就可以实现一个细颗粒度的事务,而且在该线程执行序列中,接下去的另一个方法调用也是类似: 最好加一句HibernateSession.commitTransaction()吧。 Session session = HibernateSession.currentSession(); HibernateSession.commitTransaction(); HibernateSession.currentTransaction(); ..... session.flush(); HibernateSession.commitTransaction(); |
|
返回顶楼 | |
发表时间:2004-05-25
那么如果DAO类是想做成通用的话,不止是在web应用,而是SWT或者Swing的Application,那么我就要修改这些类的每一个方法咯?
那我还是细粒度吧,哈哈 |
|
返回顶楼 | |
发表时间:2004-05-27
其实用ThreadLocal来管一些本次操作的东西很有用(就是说一些只有本次操作需要共享的,但是用完后又想丢的).
ThreadLocal特别适合web程序,因为它每次的请求都是另开线程的(application程序我没有研究过,本人也没有开发过C/S,不好说). 不过我敢肯定Filter管理一定是超粗粒度,但ThreadLocal不是. 上面实现的HibernateSession代码并不好,因为它还要每次显式地获得事务(请注意JTA与JDBC的事务不同),所以写出的代码就..... 所以我觉得在每次获得session时给它传入一个参数,是参与事务,还是不参与等(不参与就重新分配一个session和开一个事务,默认是当没有事务时,重新开启一个,如果有就参与,这个参数有点像EJB的CMT类型),这样子就可以有效地控制事务的范围,并不是一棒打死掉. 其实用AOP管理最好,因为上面的DAO还是要显示地调用关闭session(当然用Filter不用,但太粗粒度了). 不过我试过了很多AOP都觉得不是很好用,像JBOSS的AOP一定要有它的容器中才方便,要不就要显式调用classLoador.AJ它是静态的.关于spring的AOP,我觉得每次调用那些所以的getBean(..)很烦,再说,spring的配置竟然只有运行到那一刻才知道是否出错了(如果你没有调用那个Bean,就算是配置出错了,它都不知道).naning和另一个aspectwerkz2在研究中.... 当然AOP方面我只是试了一下,并没有深入研究每一个AOP. 上面也是我片面之词.如有说错,请原谅. |
|
返回顶楼 | |
发表时间:2004-05-27
补:用AOP类型的东西,很容易做出一个简单的声明式事务(没有用CGLIB之类的)
|
|
返回顶楼 | |