读书人

急ssh开发中spring 事务管理出现Write

发布时间: 2012-01-20 18:53:53 作者: rapoo

急!!!ssh开发中spring 事务管理出现Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL)
网上说要在spring中设置对openseesioninviewfilter的管理,我设了可是为什么还是不行呢。
先把applicationContext发给大家看看 帮帮忙!!

Java code
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="    http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-2.0.xsd    http://www.springframework.org/schema/tx    http://www.springframework.org/schema/tx/spring-tx-2.0.xsd    http://www.springframework.org/schema/aop    http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">        </property>        <property name="url" value="jdbc:oracle:thin:@localhost:1521:SUIXIN">        </property>        <property name="username" value="suixin"></property>        <property name="password" value="suixin"></property>    </bean>    <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <property name="dataSource">            <ref bean="dataSource" />        </property>        <property name="hibernateProperties">            <props>                <prop key="hibernate.dialect">                   org.hibernate.dialect.Oracle9Dialect               </prop>                <prop key="hibernate.show_sql">true</prop>            </props>        </property>        <property name="mappingResources">            <list>                <value>/com/neusoft/crm/model/Employee.hbm.xml</value>            </list>        </property>    </bean>    <bean id="employeeDao" class="com.neusoft.crm.dao.hibernate.EmployeeDaoHibernate"        abstract="false" lazy-init="default" autowire="default"        dependency-check="default">        <property name="sessionFactory">            <ref bean="sessionFactory" />        </property>    </bean>    <bean id="employeeManager" class="com.neusoft.service.impl.EmployeeManagerImpl"        abstract="false" lazy-init="default" autowire="default"        dependency-check="default">        <property name="employeeDao">            <ref bean="employeeDao" />        </property>    </bean>    <bean id="addBean" class="com.neusoft.crm.action.EmployeeAction"        scope="prototype">        <property name="employeeManager">            <ref bean="employeeManager" />        </property>    </bean>    <bean id="listBean" class="com.neusoft.crm.action.EmployeeAction"        scope="prototype">        <property name="employeeManager">            <ref bean="employeeManager" />        </property>    </bean>    <bean id="deleteBean" class="com.neusoft.crm.action.EmployeeAction"        scope="prototype">        <property name="employeeManager">            <ref bean="employeeManager" />        </property>    </bean>    <bean id="transactionManager"            class="org.springframework.orm.hibernate3.HibernateTransactionManager">            <property name="sessionFactory">                <ref bean="sessionFactory" />            </property>        </bean>        <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>          <tx:method name="add*" propagation="REQUIRED"/>          <tx:method name="delete*" propagation="REQUIRED"/>          <tx:method name="update*" propagation="REQUIRED"/>          <tx:method name="*" read-only="true"/>         </tx:attributes>         </tx:advice>         <aop:config>            <aop:pointcut id="allManagerMethod" expression="execution (* com.neusoft.crm.service.*.*(..))"/>         <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>         </aop:config></beans> 


下面是struts.xml
Java code
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>   <constant name="struts.objectFactory" value="spring"/>   <!-- /crm/emp/add.action -->  <package name="crm_employee" extends="struts-default" namespace="/emp">   <action name="add" class="addBean" method="add">      <result >list.action</result>   </action>       <action name="list" class="listBean" method="list">      <result >list.jsp</result>   </action>       <action name="delete" class="deleteBean" method="delete">      <result >list.action</result>   </action>  </package></struts>


还有web.xml
Java code
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"        "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>   <constant name="struts.objectFactory" value="spring"/>   <!-- /crm/emp/add.action -->  <package name="crm_employee" extends="struts-default" namespace="/emp">   <action name="add" class="addBean" method="add">      <result >list.action</result>   </action>       <action name="list" class="listBean" method="list">      <result >list.jsp</result>   </action>       <action name="delete" class="deleteBean" method="delete">      <result >list.action</result>   </action>  </package></struts>

JSP页面add.jsp
Java code
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>            <title>add page</title>        <meta http-equiv="pragma" content="no-cache">    <meta http-equiv="cache-control" content="no-cache">    <meta http-equiv="expires" content="0">        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">    <meta http-equiv="description" content="This is my page">    <!--    <link rel="stylesheet" type="text/css" href="styles.css">    -->  </head>    <body>   请输入信息:<br><s:form action="add"> <s:textfield name="employee.name" label="姓名"/><s:textfield name="employee.address" label="地址"/><s:textfield name="employee.phone" label="电话"/><s:submit/></s:form>  </body></html>

出错信息:
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.
org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1095)


org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:634)
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:632)
com.neusoft.crm.dao.hibernate.EmployeeDaoHibernate.add(EmployeeDaoHibernate.java:15)
com.neusoft.service.impl.EmployeeManagerImpl.addEmployee(EmployeeManagerImpl.java:16)
com.neusoft.crm.action.EmployeeAction.add(EmployeeAction.java:38)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
老是有这个错误 困惑好几天了 大家看看怎么回事 谢谢了

[解决办法]
spring2.0的配置不是很熟,
感觉你这句事务管理有点问题:
<tx:method name="*" read-only="true"/>
得改下,你这是匹配所有的方法吧!
[解决办法]
上面的配置看起来都没问题
很有可能是你的Employee.hbm.xml配置问题
[解决办法]
这的问题,execution (* com.neusoft.crm.service.*.*(..))" 你的方法不再这个包中 仔细看一下包名

读书人网 >J2EE开发

热点推荐