关于OpenSessionInViewFilter有一篇详细文章,http://blog.csdn.net/westwindwing/archive/2007/01/23/1490802.aspx,正如文章中描述的一样,hibernate的session由spring来管理,每次在执行请求时,使用的是一个 session,可以使其延迟执行,缓冲数据,那么在高访问量和处理的时候,就无法快速的访问,这个时候需要将OpenSessionInViewFilter模式转换成"singleSession"="false",通过这个设置每次请求将创建一个session,用完后关闭。
下面是一个错误报告。
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1182)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:692)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:690)
由上面的错误可以看到,是由于配置执行用了readOnly,那么保存的时候就不能写操作。在applicationContext.xml中设置
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true" propagation="REQUIRED" />
<tx:method name="load*" read-only="true" propagation="REQUIRED" />
<tx:method name="find*" read-only="true" propagation="REQUIRED" />
,保存是没有设置read-only="true",那么为什么不能写操作,这个确实比较迷茫,但是将"singleSession"="false",设成false后,就能执行写操作,这个还没有找到具体原因,暂且让其设置成false,待找到根源后,再做详细分析。
分享到:
相关推荐
OpenSessionInViewFilter是Spring框架中一个非常重要的组件,主要用于解决数据访问...这个文档应该包含了OpenSessionInViewFilter的源码分析、配置示例以及常见问题的解答,对理解该过滤器的功能和工作原理非常有帮助。
涉及到了多个知识点,包括 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>...
- `OpenSessionInViewFilter` 是Spring提供的一个过滤器,用于解决数据访问层(DAO)在Web请求结束时无法关闭Session的问题,防止出现Session过早关闭导致的事务问题。`sessionFactoryBeanName`参数指定了...
为了避免字符集问题,还可以在`web.xml`中配置`CharacterEncodingFilter`过滤器,强制所有HTTP请求使用UTF-8编码: ```xml <filter-name>characterEncoding <filter-class>org.springframework.web.filter....
- **`IntrospectorCleanupListener`**:用于清理JavaBeans Introspector缓存,防止内存泄漏问题。 ### 2.2 Hibernate配置 为了实现事务的一致性,通常会在`web.xml`中配置一个过滤器,用以开启Session的生命周期与...
- Hibernate的`OpenSessionInViewFilter`用于解决在多层调用中保持数据库连接的问题。它将Hibernate Session的生命周期扩展到整个HTTP请求,确保在页面渲染完成之前都能访问到数据库。`sessionFactoryBeanName`参数...
Spring框架还提供了一系列的过滤器来处理Web应用中的请求,例如OpenSessionInViewFilter用于解决Hibernate懒加载问题。 - **OpenSessionInViewFilter**:此过滤器在请求处理开始时打开一个Hibernate会话,在请求...
SSH+Flex配置是一种常见的Java Web开发技术组合,用于构建高效、可扩展的Web应用程序。SSH分别代表Struts2(一个MVC框架)、Hibernate(一个对象关系映射框架)和Spring(一个全面的企业级应用框架)。Flex是Adobe...
- **IntrospectorCleanupListener**:这是一个Spring提供的监听器,用于防止`java.beans.Introspector`类引发的内存泄漏问题。将其配置在`ContextLoaderListener`之前可以确保先清理再初始化Spring容器。 - **...
- **Hibernate 会话管理**:同样通过 `<filter>` 和 `<filter-mapping>` 配置了 `OpenSessionInViewFilter`,用于管理 Hibernate 的会话生命周期。`singleSession` 参数被设置为 `true` 表示使用单一会话模式,即每...
- `<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>`:OSIV模式允许在视图层(如JSP)处理请求时仍然保持数据库会话,以解决延迟绑定问题。`...
其次,JSP页面配置也是处理编码问题的关键步骤。在每个JSP页面的顶部,通常会有如下声明: ```jsp ;charset=UTF-8" language="java" %> ``` 这行代码告诉服务器此JSP页面的字符集为UTF-8,确保JSP编译后的HTML页面在...
在`web.xml`中,Struts2的配置通过`StrutsPrepareAndExecuteFilter`进行,而Spring与Hibernate的集成则通过`OpenSessionInViewFilter`实现。这些配置保证了请求到达时,Struts2能正确处理请求,同时Spring能够管理和...
通过配置OpenSessionInViewFilter,可以在很大程度上解决懒加载异常的问题,尤其是在Java Web应用中使用Hibernate等ORM框架时。当然,还需要根据实际项目的具体情况,灵活调整和优化配置,以达到最佳的性能和稳定性...
本文将深入解析SSH框架整合的配置文件,旨在为开发者提供全面的理解与指导。 ### SSH框架整合的核心:配置文件 #### 1. **web.xml** —— Servlet容器的配置文件 `web.xml`是Web应用程序的核心配置文件,用于配置...
通过在web.xml中配置`OpenSessionInViewFilter`,可以实现持久化层的事务与视图渲染的无缝结合,提高应用性能。 ##### 2. **Struts-config.xml与Spring集成** 当Spring与Struts框架集成时,可以通过`...
Spring 配置问题 Spring是SSH架构的核心,其配置是否正确直接影响到整个系统的运行稳定性。 **具体问题:** - 在Spring配置文件`struts.xml`中,需要正确地引用`applicationContext.xml`中的bean定义。 - 在...