`
fengzgxing
  • 浏览: 242964 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

OpenSessionInViewFilter的相关问题

阅读更多
   Spring为我们解决最让人头痛的难题之一,Hibernate的Session的关闭与开启问题。
Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。而Spring为我们提供的OpenSessionInViewFilter过滤器为我们很好的解决了这个问题。OpenSessionInViewFilter的主要功能是使每个请求过程绑定一个 Hibernate Session,即使最初的事务已经完成了,也可以在 Web 层进行延迟加载的操作。OpenSessionInViewFilter 过滤器将 Hibernate Session 绑定到请求线程中,它将自动被 Spring 的事务管理器探测到。所以 OpenSessionInViewFilter 适用于 Service 层使用HibernateTransactionManager 或 JtaTransactionManager 进行事务管理的环境,也可以用于非事务只读的数据操作中。

<!--OpenSessionInViewFilter配置,其实是一个又繁琐性能又低的东西,以后再也不想用到-->  
        <filter>  
                <filter-name>OpenSessionInViewFilter</filter-name>  
                <filter-class>  
                         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
                </filter-class>  
                <!-- singleSession默认为true,若设为false则等于没用OpenSessionInView -->  
                <init-param>  
                        <param-name>singleSession</param-name>  
                        <param-value>true</param-value>  
                </init-param>  
        </filter>  
        <filter-mapping>  
                <filter-name>OpenSessionInViewFilter</filter-name>  
                <url-pattern>/*</url-pattern>  
        </filter-mapping>  
  
        <!--Spring Context listener-->  
        <listener>  
                <listener-class>  
                         org.springframework.web.context.ContextLoaderListener   
                </listener-class>  
        </listener>  
  
<!--让spring知道事务管理的bean所在-->  
     <context-param>   
        <param-name>contextConfigLocation</param-name>   
        <param-value>/WEB-INF/applicationContext*.xml</param-value>   
    </context-param>   

<!--struts 2.0 过滤器配置-->
<filter>
        <filter-name>struts</filter-name>
        <filter-class>    org.apache.struts2.dispatcher.FilterDispatcher   </filter-class>
</filter>
<filter-mapping>
        <filter-name>struts</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>


有可能会提示找不 sessionFactory 解决办法:
OpenSessionInViewFilter的方要作用就是可以在 Web 层进行延迟加载的操作

OpenSessionInViewFilter构造器原码

Java代码
public OpenSessionInViewFilter()  
{  
    sessionFactoryBeanName = "sessionFactory";  
    singleSession = true;  


    public OpenSessionInViewFilter()
    {
        sessionFactoryBeanName = "sessionFactory";
        singleSession = true;
    }

可以通过修改web.xml中过滤器配置,如下
Java代码
<filter>  
    <filter-name>hibernateFilter</filter-name>  
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
    <init-param>  
        <param-name>sessionFactoryBeanName</param-name>  
        <param-value>sessionFactory_wap</param-value>  
    </init-param>  
</filter> 

分享到:
评论

相关推荐

    关于OpenSessionInViewFilter的学习

    5. 最终,当视图渲染完成后,OpenSessionInViewFilter会关闭Session,释放相关资源,结束这次请求处理。 使用OpenSessionInViewFilter时需要注意以下几点: 1. **事务管理**:OpenSessionInViewFilter并不负责事务...

    懒加载异常解决.docx

    - 在高并发场景下,需要注意OpenSessionInViewFilter可能会导致的性能问题,因为它使得Session的生命周期变长,增加了Session占用资源的时间。 - 如果项目中同时使用了其他Session管理机制,需要确保它们之间不会...

    SSH项目整合示例【OpenSessionInView】所用到的jar包

    OpenSessionInView(OSIV)模式是SSH整合中常见的一种优化策略,它在用户的一次HTTP请求过程中保持Hibernate Session,避免了多次打开和关闭Session,减少了N+1查询问题,提高了性能。 **Spring** 是一个全面的企业...

    jar包(struts2.0.8+spring2.0+hibernate3.2)

    在实际项目中,这样的集成方案可以帮助开发团队快速开发出高效、稳定的Java Web应用,但同时也需要注意版本兼容性、性能优化以及安全问题。例如,Struts2框架在后续版本中修复了一些安全漏洞,因此在使用旧版本时需...

    过滤器对于session周期的控制

    例如,在上面的例子中,`OpenSessionInViewFilter`被配置在`webwork`过滤器之前,这是为了确保在处理Struts2相关的请求之前,Session已经被打开。 #### 单个Session vs 多个Session 当`singleSession`参数设置为`...

    spring框架登录初始化数据与struct2权限设置等相关知识

    为了避免这类问题,通常采用`OpenSessionInViewFilter`来处理懒加载问题。 - **OpenSessionInViewFilter的工作原理**: - **线程绑定**:`OpenSessionInViewFilter`的主要作用是将`HibernateSession`绑定到当前...

    struts-hibernate-sprint开发详解 乱码问题 连接池

    同时,配置`OpenSessionInViewFilter`(懒加载过滤器)以处理Hibernate的懒加载问题。接着,配置Struts2的FilterDispatcher,确保所有请求都被Struts2拦截和处理。 最后,`applicationContext.xml`是Spring的核心...

    spring框架中常用的配置

    Spring框架还提供了一系列的过滤器来处理Web应用中的请求,例如OpenSessionInViewFilter用于解决Hibernate懒加载问题。 - **OpenSessionInViewFilter**:此过滤器在请求处理开始时打开一个Hibernate会话,在请求...

    spring中lazy=“true”的正常读取关联表(用opensessioninview)

    为了解决这个问题,Spring提供了一个过滤器 `OpenSessionInViewFilter` 或者 `OpenSessionInViewInterceptor`,通常简称为OSIV(Open Session In View)模式。 OSIV模式的核心思想是在Controller层和View层之间保持...

    错误及解决方案.pdf

    它允许在对象第一次被访问时才加载该对象的相关数据,而不是在创建对象时就加载所有的数据。但是,如果在访问延迟加载的数据时,对应的Hibernate会话已经关闭,则会抛出LazyInitializationException异常。这种异常...

    S2SH的配置

    本次讨论将围绕给定的`web.xml`和`struts.xml`配置文件进行深入解析,并结合这些配置文件中的具体内容来阐述相关的知识点。 ## 二、`web.xml`配置分析 ### 2.1 Spring配置 在`web.xml`文件中,首先定义了Spring的...

    Hibernate4.1环境搭建

    &lt;filter-class&gt;org.springframework.orm.hibernate4.support.OpenSessionInViewFilter &lt;filter-name&gt;HibernateOpenSession *.action ``` - 这个过滤器的作用是在每个HTTP请求开始时开启一个Hibernate ...

    Struts+Hibernate+Spring的整合方法

    8. **处理Hibernate延迟加载**:使用`OpenSessionInViewFilter`过滤器,确保Session在整个HTTP请求期间保持打开状态,解决懒加载问题。配置过滤器映射到所有.do请求。 9. **处理只读模式异常**:由于...

    spring学习笔记

    1. **OpenSessionInViewFilter**:解决 Hibernate 的 Session 在请求处理过程中的生命周期管理问题。 - **问题**:确保在请求处理过程中,同一个线程内有一个且只有一个 Hibernate Session 实例。 - **解决方案**...

    ssh配置文件

    - **Hibernate会话管理过滤器**:OpenSessionInViewFilter确保在每个请求的生命周期内保持一个打开的Hibernate Session,从而实现懒加载: ```xml &lt;filter-name&gt;OpenSessionInViewFilter &lt;filter-class&gt;org....

    Hibernate 与 MyFaces的整合

    Spring框架下的`OpenSessionInViewFilter`是一个典型例子,只需在`web.xml`中进行配置即可轻松实现。 四、最佳实践与注意事项 - **细粒度控制**:确保Session和事务的控制符合应用的具体需求,避免不必要的资源浪费...

    spring面试题大全

    4. 解决OpenSessionInView问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在一次HTTP请求中保持Hibernate Session的开放状态,以解决懒加载异常。 Spring的事务管理分为编程式和声明式...

    HIBERNATE4开发文档,HIBERNATE4的变化

    为了解决这个问题,可以添加`OpenSessionInViewFilter`过滤器,确保在视图渲染期间保持session打开。 5. **分页查询的注意事项** - Hibernate4中,如果你在进行分页查询时遇到“ResultSet may only be accessed in...

    SSH整合的简单操作

    - 在`web.xml`中设置Spring的`ContextLoaderListener`监听器加载上下文,以及`OpenSessionInViewFilter`过滤器,确保每个请求都有一个打开的Session。 - 配置Struts2的Filter,确保请求匹配`.action`结尾的URL,...

    搭建SSH框架总结.doc

    7. **配置OpenSessionInView模式**:在`web.xml`中配置`OpenSessionInViewFilter`,目的是解决在HTTP请求结束后才提交事务导致的懒加载问题。通过在视图渲染阶段保持数据库会话,可以确保所有延迟加载的数据都能正确...

Global site tag (gtag.js) - Google Analytics