众所周知hibernate的lazy问题。当session关闭后,再想延迟加载对象就会报出 no session or session was closed的错误
后spring提供了OpenSessionInView解决了此问题,大概原理是这样的首先获得SessionFactory,然后通过SessionFactory获得一个Session。然后执行真正的Action代码,最后根据情况将Hibernate的Session进行关闭。
配置方法
1.filter配置
web.xml
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
2.将struts以plugin形式注入到spring的ioc中
struts-config.xml
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/action-servlet.xml" />
</plug-in>
3.action beans
action-servlet.xml
<bean name="/orgInit/orgInit"
class="jarod.javaeye.action.orgInit.OrgInitAction" >
<property name="orgInitService">
<ref bean="orgInitServiceImpl" />
</property>
</bean>
...
我测试的结果是不可将action beans放入application-context.xml中,直接注入spring
相关参考和前辈出现过的问题
http://www.iteye.com/topic/17501性能问题
http://www.iteye.com/topic/15057采用struts配置中容易出现的问题
http://www.iteye.com/topic/9668有关OpenSessionInView模式的问题
分享到:
相关推荐
-- OpenSessionInView配置 --> <filter-name>openSessionInViewFilter <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter <filter-name>openSessionInViewFilter ...
### Spring + Hibernate OpenSessionInView 模式的理解和应用 在Java Web开发中,Spring与Hibernate作为两个重要的框架,经常被一起使用来实现业务逻辑与数据持久化的处理。而在使用这两个框架时,为了更好地管理...
2. **启用OpenSessionInView过滤器**:在web.xml中配置OpenSessionInViewFilter,该过滤器会在HTTP请求开始时开启一个新的Hibernate Session,并在请求结束时提交或回滚事务并关闭Session。 3. **编写业务逻辑**:在...
在此配置中,我们定义了一个名为`openSessionInViewInterceptor`的拦截器,并将它绑定到了一个特定的URL映射上。需要注意的是,必须指定`sessionFactory`的引用。 ##### 2. OpenSessionInViewFilter配置 ```xml ...
同时,需要注意的是,OpenSessionInView模式虽然方便,但也会带来潜在的问题,如事务边界不清晰和会话泄漏。因此,在实际应用中,应结合具体需求谨慎使用,并考虑使用更现代的解决方案,如Spring Data JPA的...
配置OpenSessionInView过滤器**: 为了确保在一个请求生命周期内只开启一次Session,可以使用Spring提供的`OpenSessionInViewFilter`。其配置如下: ```xml <filter-name>openSessionInView <filter-class>org....
OpenSessionInView(OSIV)模式是SSH整合中常见的一种优化策略,它在用户的一次HTTP请求过程中保持Hibernate Session,避免了多次打开和关闭Session,减少了N+1查询问题,提高了性能。 **Spring** 是一个全面的企业...
通过在Web应用的配置文件(如web.xml)中添加该过滤器,可以全局设定请求和响应的字符编码,确保数据在传输过程中的正确性。 配置`CharacterEncodingFilter`通常如下: ```xml <filter-name>...
- **配置延迟加载时使用OpenSessionInView**: OpenSessionInView是一种技术,用于解决Hibernate在多线程环境下的一级缓存问题。通过在web.xml中配置`OpenSessionInViewFilter`,可以实现持久化层的事务与视图渲染...
OpenSessionInViewFilter是Spring框架中一个非常重要的组件,主要用于解决数据访问...这个文档应该包含了OpenSessionInViewFilter的源码分析、配置示例以及常见问题的解答,对理解该过滤器的功能和工作原理非常有帮助。
- 配置OpenSessionInView过滤器以实现懒加载: ```xml <filter-name>openSessionInView <filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter <filter-name>...
在整合JSF、Spring和Hibernate时,通常会使用Spring的OpenSessionInView模式来处理数据库会话。这能确保在HTTP请求的整个生命周期内保持有效的Hibernate Session,从而避免可能出现的数据访问问题。 至于压缩包中的...
`数据库.txt` 可能包含了关于数据库设计、SQL查询优化或其他数据库管理方面的内容,而 `osiv` 文件则可能详细阐述了OSIV的工作原理或如何在项目中配置和使用。 总结来说,`lazy="true"` 是一种有效的性能优化策略,...
**表格13**: web.xml配置文件OpenSessionInView设置(必需设置) ```xml <filter-name>openSessionInViewFilter <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter ...
本方案主要探讨如何在基于Hibernate和Spring框架的环境中实现多数据库的管理,特别是在`OpenSessionInView`模式下的配置。 首先,我们看到在`applicationContext.xml`配置文件中定义了两个数据源,一个用于读操作...
在整合过程中,首先需要在`web.xml`中配置监听器,以便在Web应用启动时加载Spring的配置文件,如`applicationContext.xml`。配置完成后,Spring会根据配置文件管理各个bean,实现依赖注入。 二、Hibernate框架集成 ...
8. **配置OpenSessionInView过滤器**: - Spring提供了一个名为`OpenSessionInViewFilter`的过滤器,用于解决在Web应用中处理请求时的事务边界问题。它确保每个HTTP请求都有一个开启的Hibernate Session。 - 配置...
3,在web.xml中配置 spring 的 OpenSessionInView 过滤器(解决抛LazyInitializationException的问题) 1,配置 <!-- 配置 spring 的 OpenSessionInView 过滤器 --> <filter-name>OpenSessionInView ...
在Spring中,通过开启`<tx:annotation-driven>`和配置`HibernateTransactionManager`,结合特定的拦截器,可以实现OpenSessionInView。 5. **整合过程**:SSH整合涉及配置多个文件,包括web.xml(应用部署描述符)...