spring2.5 struts2 hibernate3 时事务配置注意的问题 openSessionInViewFilter web.xml

spring +struts + hibernate 时事务配置注意的问题

spring 里配置有 < aop:aspectj-autoproxy /> 也就是对 spring 里配置的 bean 生成代理( java 反射机制和动态代理),以便切面通知

当连接点(方法的执行)退出时,自动代理的对象将会关闭 session ,也就是不能初始化代理,会出现这样的情况比如: hibernate 里配置对象关联,当在连接点加载了一个对象,然后在连接点之后访问另一个对象时(除 ID ), spring 就会抛出:不能初始化代理, no session ,

为了解决这样的问题, spring 引入了 openSessionInViewFilter 过滤器,在 web.xml 配置如下:

< filter >

       < filter-name > openSessionInViewFilter </ filter-name >

       < filter-class >

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

       </ filter-class >

       < init-param >

         < param-name > singleSession </ param-name >

         < param-value > false </ param-value >

       </ init-param >     

    </ filter >

    < filter-mapping >

       < filter-name > openSessionInViewFilter </ filter-name >

       < url-pattern > /* </ url-pattern >

      

    </ filter-mapping >

注意其中的:

< param-name > singleSession </ param-name >

         < param-value > false </ param-value >

配置,默认这个设置是 true, 也就是一个 request 的开始到一个 response 的结束,只用一个 session 来处理 , 而我们配置的切面,只是到 service 层,并没有到 aciton( 注意,我们的 action 通常也是配置为 spring bean), 而在 service 层动态代理已经是关闭了,这样,当你要访问对象关联里其他对象的属性时, spring 同样会抛出:不能初始化代理, no session ,这样我们只要把上面的 true 改为 false ,当访问关联对象时, spring 会打开新的一个 session 来处理,这样也不会对我们的 service 层里的事务造成影响,我们的 service 同样还是使用相同的 session,

我在 hibernate.properties 里的配置是:

hibernate.connection.release_mode after_transaction

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值