您的位置:首页 > 理论基础 > 计算机网络

HTTP Status 500 - Write operations are not allowed in read-only mode (FlushMode.MANUAL)

2017-04-29 12:07 459 查看

SSH错误:网页错误信息如下

HTTP Status 500 - Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

这个错误是在用ssh框架时经常碰到的一个问题,错误信息如下:

网页信息:

HTTP Status 500 - Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

type Exception report

message Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

description The server encountered an internal error that prevented it from fulfilling this request.

exception

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

org.springframework.orm.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1126)

org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:619)

org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:616)

org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:341)

org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309)

org.springframework.orm.hibernate5.HibernateTemplate.save(HibernateTemplate.java:616)

cn.fpxty.dao.LinkManDaoImpl.addLinkMan(LinkManDaoImpl.java:11)

cn.fpxty.service.LinkManService.addLinkMan(LinkManService.java:14)

cn.fpxty.action.LinkManAction.addLinkMan(LinkManAction.java:49)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

java.lang.reflect.Method.invoke(Unknown Source)

ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:870)

ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1293)

ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)

com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117)

com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108)

ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1369)

ognl.ASTMethod.getValueBody(ASTMethod.java:90)

ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)

ognl.SimpleNode.getValue(SimpleNode.java:258)

ognl.Ognl.getValue(Ognl.java:494)

ognl.Ognl.getValue(Ognl.java:458)

com.opensymphony.xwork2.ognl.OgnlUtil$2.execute(OgnlUtil.java:309)

com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340)

com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:307)

com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:423)

com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:287)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:250)

org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)

com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)

org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76)

com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)

com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)

com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)

com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)

org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.ja
4000
va:564)

org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

控制台信息:

12:05:26,678 ERROR DefaultDispatcherErrorHandler:42 - Exception occurred during processing request: Write
operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

at org.springframework.orm.hibernate5.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1126)

at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:619)

at org.springframework.orm.hibernate5.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:616)

at org.springframework.orm.hibernate5.HibernateTemplate.doExecute(HibernateTemplate.java:341)

at org.springframework.orm.hibernate5.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:309)

at org.springframework.orm.hibernate5.HibernateTemplate.save(HibernateTemplate.java:616)

at cn.fpxty.dao.LinkManDaoImpl.addLinkMan(LinkManDaoImpl.java:11)

at cn.fpxty.service.LinkManService.addLinkMan(LinkManService.java:14)

at cn.fpxty.action.LinkManAction.addLinkMan(LinkManAction.java:49)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:870)

at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1293)

at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)

at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117)

at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108)

at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1369)

at ognl.ASTMethod.getValueBody(ASTMethod.java:90)

at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)

at ognl.SimpleNode.getValue(SimpleNode.java:258)

at ognl.Ognl.getValue(Ognl.java:494)

at ognl.Ognl.getValue(Ognl.java:458)

at com.opensymphony.xwork2.ognl.OgnlUtil$2.execute(OgnlUtil.java:309)

at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:340)

at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:307)

at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:423)

at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:287)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:250)

at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)

at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)

at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76)

at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)

at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229)

at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)

at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)

at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:244)

at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)

at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564)

at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81)

at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)

at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Unknown Source)

主要代码

这次是在action中获取jsp页面的参数,封装到实体类对象中,然后调用service对象的add方法,service中又调用dao的add方法,最终将数据存储到数据库中。主要代码如下:
LinkManAction.java
package cn.fpxty.action;

import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import cn.fpxty.entity.Customer;
import cn.fpxty.entity.LinkMan;
import cn.fpxty.service.CustomerService;
import cn.fpxty.service.LinkManService;

public class LinkManAction extends ActionSupport implements ModelDriven<LinkMan>{
//模型驱动
private LinkMan linkMan=new LinkMan();
public LinkMan getModel() {
return linkMan;
}

private LinkManService linkManService;
public void setLinkManService(LinkManService linkManService) {
this.linkManService = linkManService;
}
//注入customerService
private CustomerService customerService;
public void setCustomerService(CustomerService customerService) {
this.customerService = customerService;
}

/**
* 1.到新增联系人页面
*/
public String toAddPage(){
List<Customer> listCustomer=customerService.findAll();
ServletActionContext.getRequest().setAttribute("listCustomer", listCustomer);
return "toAddPage";
}

/**
* 2.添加联系人到数据库
*/
public String addLinkMan(){
/*获取页面数据,封装到LinkMan对象中(模型驱动)
* 页面cid数据要封装到LinkMan对象的Customer属性对象中
* 必须在jsp页面中name值写成customer.cid
*/
linkManService.addLinkMan(linkMan);
return "addLinkMan";
}

}


LinkManService.java
package cn.fpxty.service;

import org.springframework.transaction.annotation.Transactional;

import cn.fpxty.dao.LinkManDao;
import cn.fpxty.entity.LinkMan;

public class LinkManService {
private LinkManDao linkManDao;
public void setLinkManDao(LinkManDao linkManDao) {
this.linkManDao = linkManDao;
}
public void addLinkMan(LinkMan linkMan) {
linkManDao.addLinkMan(linkMan);

}

}
LinkManDaoImpl.java
package cn.fpxty.dao;

import org.springframework.orm.hibernate5.support.HibernateDaoSupport;

import cn.fpxty.entity.LinkMan;

public class LinkManDaoImpl extends HibernateDaoSupport implements LinkManDao {

public void addLinkMan(LinkMan linkMan) {
this.getHibernateTemplate().save(linkMan);

}
}

分析原因

这个错误主要是因为用了Spring框架并且三个框架整合后,dao层主要用HibernateTemplate的方法对数据库进行操作,这样必须得添加事务才能不出错。

解决方案

这次用在配置文件中配置,然后在service中采用注解的方式添加事务:
Bean.xml中部分代码:
<!--配置事务管理器  -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- 开启事务扫描,采用注解方式 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
LinkManService.java中

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐