您的位置:首页 > 编程语言 > Java开发

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

2011-01-01 14:59 627 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: