`
rexhee
  • 浏览: 1432 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Spring 事务下 openSessionInViewFilter flushMode 的问题

阅读更多
这是 applicationContext.xml

<!--
*************************************
以下定义的是系统中的数据源,class 属性定义了连接数据源的类的路径
<property> 标签定义的是 hibernate 数据源文件的路径
*************************************
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>/WEB-INF/classes/hibernate.cfg.xml</value>
</property>
</bean>


<!--
*************************************
以下定义了 Spring 所提供的 hibernate3 的事务管理器,
该事务管理器采用设值注入的方式使用了 sessionFactory 定义的数据源
*************************************
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">   
    <property name="transactionManager" ref="transactionManager"/>   
    <property name="transactionAttributes"> 
        <props> 
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
                    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
                    <prop key="save*">PROPAGATION_REQUIRED</prop>
                    <prop key="add*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
        </props> 
    </property> 
</bean>
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   
<property name="beanNames"> 
    <value>UserServiceImpl</value> 
</property> 
<property name="interceptorNames">   
        <list>   
<value>transactionInterceptor</value>   
<!--此处增加新的Interceptor -->   
</list>   
</property>   
</bean>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">   
<property name="transactionInterceptor" ref="transactionInterceptor"/>   
</bean>

<bean id="UserServiceImpl" class="service.UserServiceImpl" autowire="byName" />
<!--
*************************************
以下 bean 定义了 Spring 的 HibernateTemplate,
当需要在程序中直接对持久化层进行访问时,
可以直接使用 Spring 提供的 HibernateTemplate 类进行操作
*************************************
-->
<bean id="infoMsgsDAO" class="dao.InfoMsgsDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

<!-- Ajax -->
<bean name="/ajax" class="struts.action.advinfo.AjaxAction">
<property name="userServiceImpl">
<ref bean="UserServiceImpl"/>
</property>
</bean>

这是 UserServiceImpl 代码

import dao.InfoContextlistDAO;
import dao.InfoFeedbackDAO;
import dao.InfoMsgsDAO;

public class UserServiceImpl implements IUserService {

private InfoContextlistDAO infoContextlistDAO;
private InfoFeedbackDAO infoFeedbackDAO;
private InfoMsgsDAO infoMsgsDAO;

public void setInfoContextlistDAO(InfoContextlistDAO infoContextlistDAO){
this.infoContextlistDAO = infoContextlistDAO;
}

public InfoContextlistDAO getInfoContextlistDAO(){
return this.infoContextlistDAO;
}

public void setInfoFeedbackDAO(InfoFeedbackDAO infoFeedbackDAO){
this.infoFeedbackDAO = infoFeedbackDAO;
}

public InfoFeedbackDAO getInfoFeedbackDAO(){
return this.infoFeedbackDAO;
}

public void setInfoMsgsDAO(InfoMsgsDAO infoMsgsDAO){
this.infoMsgsDAO = infoMsgsDAO;
}

public InfoMsgsDAO getInfoMsgsDAO(){
return this.infoMsgsDAO;
}
}


这是 UserServiceImpl 的接口 IUserService

package service;

import dao.InfoContextlistDAO;
import dao.InfoFeedbackDAO;
import dao.InfoMsgsDAO;

public interface IUserService {

public void setInfoContextlistDAO(InfoContextlistDAO infoContextlistDAO);

public InfoContextlistDAO getInfoContextlistDAO();

public void setInfoFeedbackDAO(InfoFeedbackDAO infoFeedbackDAO);

public InfoFeedbackDAO getInfoFeedbackDAO();

public void setInfoMsgsDAO(InfoMsgsDAO infoMsgsDAO);

public InfoMsgsDAO getInfoMsgsDAO();

}



按道理事务也配置成功了,可是为什么还是报这个错误:

javax.servlet.ServletException: 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
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.MemberLimitFilter.doFilter(MemberLimitFilter.java:53)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
分享到:
评论

相关推荐

    OpenSessionInViewFilter

    OpenSessionInViewFilter个人学习总结

    关于OpenSessionInViewFilter的学习

    OpenSessionInViewFilter是Spring框架中一个非常重要的组件,主要用于解决数据访问层(DAO)与视图层(View)之间的事务管理问题。在Web应用中,由于HTTP请求的无状态性,一次请求通常由多个Servlet过滤器、控制器和...

    spring面试题大全

    面试中,Spring的相关问题经常出现,下面将详细解答这些常见面试题。 首先,Spring的优点包括: 1. 分层架构:Spring允许开发者选择需要的模块,避免了不必要的复杂性。 2. POJO(Plain Old Java Object)编程:它...

    马士兵Spring课堂笔记(超级详细版).pdf

    我们可以通过配置XML文件和注解来实现整合,并使用opensessionInviewfilter来解决会话问题。 Spring JDBC面向接口编程 本节讲解了如何使用Spring JDBC来实现面向接口编程。我们可以通过配置XML文件和注解来实现DAO...

    使用Spring引起的错误

    在使用Spring框架时,特别是在与Hibernate结合的情况下,可能会遇到“Write operations are not allowed in read-only mode (FlushMode.NEVER)”这样的异常。这个问题通常发生在使用Spring提供的Open Session In ...

    spring面试题集

    当遇到OpenSessionInView问题时,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor来解决。 Spring的事务管理提供了强大且灵活的机制,主要包括编程式和声明式两种方式: 1. 编程式事务管理:通过...

    spring面试大全

    对于OpenSessionInView模式的问题,Spring 提供了OpenSessionInViewFilter或OpenSessionInViewInterceptor来解决。 7. **事务管理**:Spring 提供了两种事务管理方式:编程式和声明式。编程式事务管理使用...

    Spring hibernate opensessioninview

    综上所述,`OpenSessionInViewFilter`作为一种简化Hibernate Session管理和事务处理的方式,在适当的场景下能够极大地提高开发效率和代码质量。但在使用时也需要注意其潜在的性能影响和其他风险,合理选择是否启用该...

    spring管理struts和hibernate

    - 利用Spring提供的`OpenSessionInView`模式处理事务边界问题,确保每个HTTP请求都运行在一个独立的事务内。 - 在`web.xml`中配置`OpenSessionInViewFilter`过滤器,自动管理事务。 #### 三、总结 通过以上步骤...

    spring2.5学习PPT 传智博客

    - 利用CharacterEncodingFilter和OpenSessionInViewFilter解决编码问题。 通过以上内容的学习,开发者可以深入理解Spring 2.5的核心概念,掌握其在实际开发中的应用,从而提高工作效率和代码质量。

    Struts+hibernate+Spring的整合

    10. **延迟加载问题**:为了处理Hibernate的延迟加载问题,可以使用Spring的`OpenSessionInViewFilter`。这个过滤器确保在一次HTTP请求的整个生命周期内,Hibernate的Session保持打开状态,允许延迟加载在请求结束时...

    java-spring面试题大全

    - 解决OpenSessionInView问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在HTTP请求的整个生命周期中都保持数据库会话。 5. **Spring的事务管理**: - Spring提供了...

    面试知识点总结--spring面试题大全.pdf

    本文将深入探讨Spring面试中常见的知识点,包括Spring的优点、DI(Dependency Injection)的实现方式、IOC(Inversion of Control)的理解、Spring对ORM框架如Hibernate的支持,以及Spring的事务管理。 首先,...

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    解决这个问题的方法有两种:一种是在 web.xml 中使用 Spring 提供的 OpenSessionInViewFilter,另一种是在 application.xml 中配置 OpenSessionInViewFilter。前者通用,后者只能用于 SpringMVC 结构中。 最后,...

    spring面试题

    - **OpenSessionInView**:解决长时间请求导致的事务问题,可通过添加 OpenSessionInViewFilter 或 OpenSessionInViewInterceptor。 5. **Spring 事务管理** - **TransactionDefinition**:定义事务属性,如隔离...

Global site tag (gtag.js) - Google Analytics