- 浏览: 938067 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (423)
- mysql (37)
- hibernate (3)
- struts (9)
- spring (33)
- dom4j (2)
- junit (0)
- exception (1)
- 随笔杂谈 (12)
- google app engine (1)
- XMPP (1)
- OAuth安全授权 (1)
- 版本控制 (8)
- 心情感悟 (0)
- core java (19)
- log4j (7)
- jquery (12)
- javascript (10)
- 网站性能优化及工具 (11)
- 服务器架设配置等 (38)
- EXT (4)
- 正则表达式 (5)
- 日志统计分析 (2)
- htmlparse (4)
- httpclient (5)
- java随笔 (5)
- dhtmlxtree (1)
- freemarke (5)
- memcached (6)
- javamail (5)
- Linux命令 (10)
- 应用监控cpu web jdbc等 (4)
- jmagick (9)
- 第三方缓存策略 (9)
- ORM (2)
- hadoop (2)
- 大数据量处理 (8)
- 经典 (1)
- 权限设计 (1)
- andriod (1)
- mybatis (12)
- redis (24)
- 数据结构_算法 (5)
- 分布式系统 (1)
- php (1)
- 网络编程 (3)
- 服务器部署 (3)
- ios (2)
- IM (23)
- mina (1)
- 视讯和语音 (1)
- 代码生成 (1)
- 架构 (4)
- 建模工具 (1)
- oracle (4)
- solr (10)
- 构建工具 (7)
- html5 (1)
- nginx (5)
- css (1)
- 大数据-分布式 (2)
- 设计模式 (2)
- mq (2)
- jvm调优 (8)
- 并发编程 (2)
- 搜索引擎 (1)
- UML (2)
最新评论
-
天使建站:
jquery获取网页里多选框checkbox选中项的值的方法及 ...
JS jQuery分别获取选中的复选框值 -
abao1:
发现一个小问题 sortAndSave方法中的for循环 第二 ...
完整java实现外部排序 -
西巴拉古呀那:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
消息系统kafka介绍 -
成大大的:
Kafka分布式消息系统实 ...
消息系统kafka介绍
摘自:http://www.yybean.com/opensessioninviewfilter-role-and-configuration
一、作用
Spring为我们解决Hibernate的Session的关闭与开启问题。
Hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常
(eg: org.hibernate.LazyInitializationException:(LazyInitializationException.java:42)
- failed to lazily initialize a collection of role: cn.easyjava.bean.product.ProductType.childtypes, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: cn.easyjava.bean.product.ProductType.childtypes, no session or session was closed)
用来把一个Hibernate Session和一次完整的请求过程对应的线程相绑定。目的是为了实现"Open Session in View"的模式。例如: 它允许在事务提交之后延迟加载显示所需要的对象。
而Spring为我们提供的OpenSessionInViewFilter过滤器为我们很好的解决了这个问题。OpenSessionInViewFilter的主要功能是用来把一个Hibernate Session和一次完整的请求过程对应的线程相绑定。目的是为了实现"Open Session in View"的模式。例如: 它允许在事务提交之后延迟加载显示所需要的对象。
OpenSessionInViewFilter 过滤器将 Hibernate Session 绑定到请求线程中,它将自动被 Spring 的事务管理器探测到。所以 OpenSessionInViewFilter 适用于 Service 层使用HibernateTransactionManager 或 JtaTransactionManager 进行事务管理的环境,也可以用于非事务只读的数据操作中。
二、配置
它有两种配置方式OpenSessionInViewInterceptor和OpenSessionInViewFilter(具体参看SpringSide),功能相同,只是一个在web.xml配置,另一个在application.xml配置而已。
Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据,如 ${ company.employees }。当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。
OpenSessionInViewInterceptor配置
<beans> <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="openSessionInViewInterceptor"/> </list> </property> <property name="mappings"> ... </property> </bean> ... </beans>
OpenSessionInViewFilter配置
<web-app> <filter> <filter-name>hibernateFilter</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>hibernateFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> ... </web-app>
三、注意事项
很多人在使用OpenSessionInView过程中提及一个错误:
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) – turn your Session into FlushMode.AUTO or remove ‘readOnly’ marker from transaction definition
看看OpenSessionInViewFilter里的几个方法
发表评论
-
各种数据库(oracle、mysql、sqlserver等)在Spring中数据源的配置和JDBC驱动包
2013-07-16 13:09 2791在开发基于数据库的应 ... -
springmvc rest框架搭建中遇到的问题-xml转换错误
2013-01-18 11:26 1979.bean to xml显示的xml不是我往Model ... -
spring3.5 mvc json view bug MappingJacksonJsonView
2013-01-18 11:27 1521在返回单一model的json的时候。 MappingJa ... -
Spring MVC的多视图解析器配置及与Freemarker的集成
2013-01-18 11:27 3658http://my249645546.iteye.com/ ... -
xStream完美转换XML、JSON
2013-01-17 16:02 1229http://www.cnblogs.com/hoojo/a ... -
SpringMVC 中整合JSON、XML视图一
2013-01-17 16:01 1340http://www.cnblogs.com/hoojo/a ... -
Spring MVC 之 视图解析器ResourceBundleViewResolver
2013-01-17 10:45 1256http://blog.csdn.net/q34982 ... -
spring3mvc自定义多视图解析器
2013-01-17 10:41 1641使用视图名后缀来判断选择相应的视图解析器自定义一个视图解析器 ... -
spring3.0.6 使用context:property-placeholder载不进属性
2012-12-15 14:43 1357我用spring3.0.6+mybatis3.0.6+myba ... -
Spring定时任务的多种使用方法总结
2012-10-18 09:48 1699这里使用的是Spring2.5,需要的jar包:spring. ... -
Spring3.0 + 自定义注解实现操作日志记录功能
2012-03-12 09:34 1467最近项目组长分配给我一个任务,让我完成一个操作日志的管理功能。 ... -
spring mvc例子
2012-03-11 11:35 2057使用拦截器 和Struts2一样,Spring MVC也可以 ... -
在 Spring Bean 內取得 HttpServletRequest
2011-10-11 16:13 1200使用 Java 去開發 Web 應用程式時,大部份時候都會使用 ... -
spring3+freemark自定义标签
2011-10-09 18:27 2731<bean id="viewResolver& ... -
spring httpinvoke 例子
2011-04-21 17:15 1188http://ajava.org/course/open/11 ... -
Spring基于注解的缓存配置--EHCache AND OSCache
2011-04-02 23:38 2321本文将构建一个普通工程来说明spring注解缓存的使用方式,关 ... -
使用 ActiveMQ 示例
2011-03-30 17:38 1347企业中各项目中相互协作的时候可能用得到消息通知机制。比如有 ... -
使用Spring HTTP invoker进行远程调用
2011-03-30 10:34 1678使用Spring HTTP invoker进行远程调用Spri ... -
Java Spring2.5 Remote Invoke HTTP Invoker远程调用
2011-03-30 08:42 1934近日,一个项目涉及到系统间接口调用,考虑到系统间用的都是j ... -
Spring AOP不能拦截同一个对象内方法的嵌套调用
2011-03-30 08:27 2270在开发基于 Spring 的应用的过程中碰到了一个 ...
相关推荐
NULL 博文链接:https://yanzhenwei.iteye.com/blog/1701164
涉及到了多个知识点,包括 Spring 配置、Hibernate 配置、Struts2 配置、ConnectionPool 配置、数据库配置、事务管理、OpenSessionInViewFilter 配置、web.xml 配置、依赖注入、Struts2 和 Spring 整合、Hibernate ...
在`web.xml`中配置Spring监听器以初始化Spring容器,并添加`OpenSessionInViewFilter`以解决懒加载问题: ```xml <listener-class>org.springframework.web.context.ContextLoaderListener <filter-name>...
在Java Web开发中,SSH(Struts2、...综上所述,SSH整合是一个涉及多个层次和组件的过程,需要细心配置并理解每个部分的作用,以实现高效、稳定的Web应用。在实际开发中,还需要考虑错误处理、安全性和性能优化等方面。
在SSH配置中,SSH指的是Struts2、Spring和Hibernate三个开源框架的组合,...配置文件的每个部分都有其特定作用,共同构成了一个完整的Web应用架构。在实际项目中,根据具体需求,这些配置可能会有所不同或更加复杂。
SSH+Flex配置是一种常见的Java Web开发技术组合,用于构建高效、可扩展的Web应用程序。SSH分别代表Struts2(一个MVC框架)、Hibernate(一个对象关系映射框架)和Spring(一个全面的企业级应用框架)。Flex是Adobe...
通过这些配置,SSH框架能够协同工作,提供数据持久化(Hibernate)、业务逻辑控制(Struts2)和依赖注入及事务管理(Spring)等功能,极大地提高了开发效率和代码的可维护性。在实际项目中,开发者可以根据具体需求...
在`web.xml`中,Struts2的配置通过`StrutsPrepareAndExecuteFilter`进行,而Spring与Hibernate的集成则通过`OpenSessionInViewFilter`实现。这些配置保证了请求到达时,Struts2能正确处理请求,同时Spring能够管理和...
本篇将深入讲解Java Servlet过滤器的配置,包括`EncodingFilter`类的使用、jsp页面配置以及`web.xml`文件的配置。 首先,`EncodingFilter`是一个常见的过滤器,主要用于解决HTTP请求和响应中的编码问题。在处理中文...
解决这个问题的方法是在Web应用中使用OpenSessionInViewFilter,同时在Hibernate配置中指定`current_session_context_class`,让Spring管理Hibernate的Session。 在提供的Demo中,这些配置和原则得到了实践。Demo...
总的来说,搭建SSH框架涉及多个配置文件的修改和组件的整合,理解每个步骤的作用和配置的含义对于有效地开发和维护Java Web应用至关重要。在实际操作中,还需要根据具体需求和环境进行适当的调整。
在使用这个压缩包时,开发者需要按照一定的顺序进行配置:首先设置Hibernate的连接信息和实体映射,然后在Spring中配置数据源、事务管理器和Hibernate SessionFactory,接着配置Struts2的动作类、结果类型和拦截器。...
9. **配置Spring监听器和OpenSessionInViewFilter**: - 在`web.xml`中配置Spring的`ContextLoaderListener`,用于初始化Spring应用上下文。同时,添加`OpenSessionInViewFilter`,以解决多线程环境下Hibernate的...
添加两个过滤器,一个是 `CharacterEncodingFilter` 用于设置请求和响应的编码,另一个是 `OpenSessionInViewFilter`,它在视图层保持 Hibernate Session,以解决数据持久化的问题。 3. **配置事务管理**: 在 ...
2. **配置dataSource和SessionFactory**:在Spring的配置文件中,你需要配置数据源(dataSource)和SessionFactory,这样可以将Hibernate的配置集成到Spring中,通常可以移除单独的hibernate.cfg.xml文件。...
在Web应用的配置文件Web.xml中,有两个重要的配置部分:一是OpenSessionInView(OSIV)模式,通过`OpenSessionInViewFilter`确保在每次HTTP请求中都保持一个有效的Hibernate Session,避免了懒加载异常。二是设置...
在Web应用中,为了确保每次请求都能获得新的Session,通常会配置openSessionInViewFilter,保证数据操作的正确性。 整合SSH的步骤如下: 1. 引入SSH相关的jar包,确保版本兼容。Struts和Hibernate的jar包可以从IDE...
下面是一个使用 OpenSessionInViewFilter 的示例配置: ```xml <filter-name>OpenSessionInViewFilter <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter <filter-name>...
在实际项目中,开发者需要根据业务需求,编写Action类、Service接口及实现、DAO接口及实现、实体类,并在配置文件中定义它们的bean,同时配置事务管理、数据源、拦截器等。此外,还需要创建JSP或FreeMarker等视图层...
`web.xml`是Servlet容器的配置文件,除了Struts2和Spring的配置外,还包含了`OpenSessionInViewFilter`,这个过滤器使得在HTTP请求的整个生命周期中,Hibernate的Session都保持打开状态,从而方便进行事务管理和数据...