写操作不允许在只读模式(FlushMode.MANUAL) [英] Write operations are not allowed in read-only mode (FlushMode.MANUAL)

查看:178
本文介绍了写操作不允许在只读模式(FlushMode.MANUAL)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的很新使用Spring
我正在用JSF + Hibernate + Spring开发一个简单的JEE应用程序
当我尝试更新DAO
上的值时,我遇到了一些问题确定这个问题与Spring配置xml文件有关,但是我找不到是什么。



这是我的配置文件:

 <?xml version =1.0encoding =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:c =http://www.springframework.org/schema/c
xmlns :context =http://www.springframework.org/schema/context
xmlns:flow =http://www.springframework.org/schema/webflow-config
xmlns:jee =http://www.springframework.org/schema/jee
xmlns:jms =http://www.springframework.org/schema/jms
xmlns:lang =http: //www.springframework.org/schema/lang
xmlns:osgi =http://www.springframework.org/schema/osgi
xmlns:p =http:// www。 springframework.org/schema/p
xmlns:tx =http://www.springframework.org/schema/tx
xmlns:util =http://www.springframework.org/ schema / util

xsi:schemaLocation =http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans /spring-beans-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/ webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd
http://www.springframework.org/schema/jee http:// www .springframework.org / schema / jee / spring-jee-4.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms -4.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.0.xsd
http:// www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
http://www.springframework.org/schema/tx http:/ /www.springframework.org/schema/tx/spri ng-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
>

< context:annotation-config />
< context:component-scan base-package =com.javarevolutions/>

< bean id =dataSourceclass =org.springframework.jdbc.datasource.DriverManagerDataSource>
< property name =driverClassNamevalue =com.mysql.jdbc.Driver/>
< property name =usernamevalue =netbeans/>
< property name =passwordvalue =netbeans/>
< / bean>


< bean id =sessionFactoryclass =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
< property name =dataSource>
< ref bean =dataSource/>
< / property>

< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.MySQLDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< /道具>
< / property>

< property name =mappingResources>
< list>
< value> /com/javarevolutions/jhs/persistence/Login.hbm.xml< / value>
<值> /com/javarevolutions/jhs/persistence/Alumnos.hbm.xml< /值>
< value> /com/javarevolutions/jhs/persistence/Articulos.hbm.xml< / value>
< / list>
< / property>
< / bean>

<! - DAOS - >
< bean id =loginDAOclass =com.javarevolutions.jdbc.dao.ImplLogin>
< property name =sessionFactoryref =sessionFactory>< / property>
< / bean>
< bean id =alumnoDAOclass =com.javarevolutions.jdbc.dao.ImplAlumno>
< property name =sessionFactoryref =sessionFactory>< / property>
< / bean>

<! - BOS - >
< bean id =loginBOclass =com.javarevolutions.jhs.bo.LoginImplBO>
< property name =loginDAOref =loginDAO>< / property>
< / bean>
< bean id =alumnoBOclass =com.javarevolutions.jhs.bo.AlumnoImplBO>
< property name =alumnoDAOref =alumnoDAO>< / property>
< / bean>



< / beans>

这是DAO声明

/

  * 
*要更改此许可证标题,请在项目属性中选择许可证标题。
*要更改此模板文件,请选择工具|模板
*并在编辑器中打开模板。
* /
package com.javarevolutions.jdbc.dao;

import com.javarevolutions.jhs.persistence.Alumnos;
import java.util.List;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
$ b / **
*
* @author Mol
* /
public class ImplAlumno extends HibernateDaoSupport implements IfaceAlumno {

@Override
public void insert(Alumnos obj){
//getHibernateTemplate().getSessionFactory().getCurrentSession().setFlushMode(org.hibernate.FlushMode.AUTO);
getHibernateTemplate()。save(obj);


@Override
public void delete(Alumnos obj){
getHibernateTemplate()。delete(obj);
}

@Override
public void update(Alumnos obj){
getHibernateTemplate()。merge(obj);
}

@覆盖
公共列表< Alumnos> getAll(){
List< Object> lista = getHibernateTemplate()。find(from Alumnos);
return(List< Alumnos>)(Object)lista;
}

}

这是LOG p>

 Información:Hibernate:选择alumnos0_.matricula作为matricul1_0_,alumnos0_.usuario作为usuario2_0_,alumnos0_.nombre作为nombre3_0_,alumnos0_.app作为app4_0_ ,alumnos0_.apm as apm5_0_,alumnos0_.edad as edad6_0_,alumnos0_.sexo as sexo7_0_,alumnos0_.fecha_registro as fecha_re8_0_ from revolutions.alumnos alumnos0_ 
Advertise:#{alumnoBean.insert}:org.springframework.dao.InvalidDataAccessApiUsageException:在只读模式下不允许写操作(FlushMode.MANUAL):将会话变为FlushMode.COMMIT / AUTO或从事务定义中删除'readOnly'标记。
javax.faces.FacesException:#{} alumnoBean.insert:org.springframework.dao.InvalidDataAccessApiUsageException:写操作都没有只读模式(FlushMode.MANUAL)允许:打开你的会话到FlushMode.COMMIT / AUTO或从交易定义中移除'readOnly'标记。
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax .faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase .execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl .java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.glassfish.tyrus.serv let.TyrusServletFilter.doFilter(TyrusServletFilter.java:295)
处org.apache.catalina.core.ApplicationFilterChain org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
。的doFilter(ApplicationFilterChain.java:214)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve。 java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at co m.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167 )
在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
在org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175 )
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
at org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)

在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:11 2)$在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77 B $ B)
。在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
org .glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)留在组织org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)

。 glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:565)维持在java的org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:545)

。 lang.Thread.run(Thread.java:745)
导致:javax.faces.el.E​​valuationException:org.springframework.dao.InvalidDataAccessApiUsa geException:在只读模式下不允许写操作(FlushMode.MANUAL):将会话变为FlushMode.COMMIT / AUTO或从事务定义中移除'readOnly'标记。
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
.. 。40 more
由org.springframework.dao.InvalidDataAccessApiUsageException导致:在只读模式下不允许写操作(FlushMode.MANUAL):将你的会话变成FlushMode.COMMIT / AUTO,或者从'readOnly'标记中移除'readOnly'标记交易定义。在org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)

。在org.springframework.orm.hibernate4.HibernateTemplate $ 12.doInHibernate(HibernateTemplate.java:620)
在org.springframework.orm.hibernate4.HibernateTemplate $ 12.doInHibernate(HibernateTemplate.java:617)
在org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:340)
在org .springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308)
at org.springframework.orm.hibernate4.HibernateTemplate.save(HibernateTemplate.java:617)
at com.javarevolutions.jdbc .dao.ImplAlumno.insert(ImplAlumno.java:21)
在com.javarevolutions.jhs.bo.AlumnoImplBO.insert(AlumnoImplBO.java:41)
在com.javarevolutions.jsf.bean.BeanAlumno .insert(BeanAlumno.java:159)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.Nati veMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:497)
at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at com .sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 41 more

FATAL:JSF1073:SE公顷interceptado javax.faces.FacesException杜兰特EL procesamiento德INVOKE_APPLICATION 5:UIComponent - 客户端Id =,= Mensaje#{} alumnoBean.insert:org.springframework.dao.InvalidDataAccessApiUsageException:写操作不允许在只读模式(FlushMode.MANUAL):将您的会话变为FlushMode.COMMIT / AUTO或从'readOnly'标记中移除交易定义。
FATAL:#{} alumnoBean.insert:org.springframework.dao.InvalidDataAccessApiUsageException:写操作是不允许在只读模式(FlushMode.MANUAL):打开你的会话到FlushMode.COMMIT / AUTO或删除了readonly '来自交易定义的标记。
javax.faces.FacesException:#{} alumnoBean.insert:org.springframework.dao.InvalidDataAccessApiUsageException:写操作都没有只读模式(FlushMode.MANUAL)允许:打开你的会话到FlushMode.COMMIT / AUTO或从交易定义中移除'readOnly'标记。
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
在com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
在javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
在org.apache.catalina .core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
at org.apache.catalina.core.ApplicationFilterChain .doFilter(ApplicationFilterChain.java:214)
在org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain .java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(Stan dardWrapperValve.java:316)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java: 734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)$ b在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
$ b在org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
。在组织.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
在com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
在org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
在org.glassfish.grizzly.http.server.HttpHa ndler.doHandle(HttpHandler.java:175)
在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9 .execute(ExecutorResolver.java:119)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain .java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112 )美元,org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77 b $ b)
在org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
在org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
在org.glassfish.grizzly.strategies。 WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
。在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)$ B $在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable b .RUN(WorkerThreadIOStrategy.java:137)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:565)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $工人.run(AbstractThreadPool.java:545)
在java.lang.Thread.run(Thread.java:745)
引起:javax.faces.FacesException:#{alumnoBean.insert}:org。 springframework.dao.InvalidDataAccessApiUsageException:在只读模式下不允许写操作(FlushMode.MANUAL):将会话变为FlushMode.COMMIT / AUTO或从事务定义中移除'readOnly'标记。
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax .faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase .execute(InvokeApplicationPhase.java:81)
... 36 more
引起:javax.faces.el.E​​valuationException:org.springframework.dao.InvalidDataAccessApiUsageException:写入操作不允许以只读方式模式(FlushMode.MANUAL):将您的Session变为FlushMode.COMMIT / AUTO或从事务定义中移除只读标记。
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
.. 。40 more
由org.springframework.dao.InvalidDataAccessApiUsageException导致:在只读模式下不允许写操作(FlushMode.MANUAL):将你的会话变成FlushMode.COMMIT / AUTO,或者从'readOnly'标记中移除'readOnly'标记交易定义。在org.springframework.orm.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)

。在org.springframework.orm.hibernate4.HibernateTemplate $ 12.doInHibernate(HibernateTemplate.java:620)
在org.springframework.orm.hibernate4.HibernateTemplate $ 12.doInHibernate(HibernateTemplate.java:617)
在org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:340)
在org .springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308)
at org.springframework.orm.hibernate4.HibernateTemplate.save(HibernateTemplate.java:617)
at com.javarevolutions.jdbc .dao.ImplAlumno.insert(ImplAlumno.java:21)
在com.javarevolutions.jhs.bo.AlumnoImplBO.insert(AlumnoImplBO.java:41)
在com.javarevolutions.jsf.bean.BeanAlumno .insert(BeanAlumno.java:159)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.Nati veMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在java.lang.reflect.Method.invoke(Method.java:497)
at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
at com .sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 41 more


解决方案

我认为您应该添加一个事务管理器bean。 p>

 < tx:annotation-driven /> 

< bean id =transactionManagerclass =org.springframework.orm.hibernate4.HibernateTransactionManager>
< property name =sessionFactoryref =sessionFactory/>
< / bean>



为应该成为交易的方法添加 @Transactional 注解。



希望这有帮助。


I am really new using Spring I am developing a simple JEE application with JSF+Hibernate+Spring I am facing some problems when trying to update values on a DAO I'm sure the problem is related with the Spring configuration xml file, but I can't find out what is.

This is my configuration file:

<?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:c="http://www.springframework.org/schema/c"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:flow="http://www.springframework.org/schema/webflow-config"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:jms="http://www.springframework.org/schema/jms"
       xmlns:lang="http://www.springframework.org/schema/lang"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:util="http://www.springframework.org/schema/util"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
          http://www.springframework.org/schema/webflow-config http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd
          http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
          http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
          http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-4.0.xsd
          http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi-1.2.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
          http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
">

    <context:annotation-config/>
    <context:component-scan base-package="com.javarevolutions"/>           

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/revolutions?zeroDateTimeBehavior=convertToNull"/>
        <property name="username" value="netbeans"/>
        <property name="password" value="netbeans"/>
    </bean> 


    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>    

        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>

        <property name="mappingResources">
            <list>
                <value>/com/javarevolutions/jhs/persistence/Login.hbm.xml</value>
                <value>/com/javarevolutions/jhs/persistence/Alumnos.hbm.xml</value>
                <value>/com/javarevolutions/jhs/persistence/Articulos.hbm.xml</value>
            </list>
        </property>
    </bean>                

    <!--DAOS-->
    <bean id="loginDAO" class="com.javarevolutions.jdbc.dao.ImplLogin">
        <property name="sessionFactory" ref="sessionFactory"></property>
    </bean>
    <bean id="alumnoDAO" class="com.javarevolutions.jdbc.dao.ImplAlumno">
        <property name="sessionFactory" ref="sessionFactory"></property>        
    </bean>        

    <!--BOS-->
    <bean id="loginBO" class="com.javarevolutions.jhs.bo.LoginImplBO">
        <property name="loginDAO" ref="loginDAO"></property>
    </bean>
    <bean id="alumnoBO" class="com.javarevolutions.jhs.bo.AlumnoImplBO">
        <property name="alumnoDAO" ref="alumnoDAO"></property>
    </bean>



</beans>

This is the DAO declaration

/

*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.javarevolutions.jdbc.dao;

import com.javarevolutions.jhs.persistence.Alumnos;
import java.util.List;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;

/**
 *
 * @author Mol
 */
public class ImplAlumno extends HibernateDaoSupport implements IfaceAlumno{

    @Override
    public void insert(Alumnos obj) {
        //getHibernateTemplate().getSessionFactory().getCurrentSession().setFlushMode(org.hibernate.FlushMode.AUTO);
        getHibernateTemplate().save(obj);
    }

    @Override
    public void delete(Alumnos obj) {
        getHibernateTemplate().delete(obj);
    }

    @Override
    public void update(Alumnos obj) {
        getHibernateTemplate().merge(obj);
    }

    @Override
    public List<Alumnos> getAll() {
        List<Object> lista=getHibernateTemplate().find("from Alumnos");
        return (List<Alumnos>)(Object)lista;
    }

}

This is the error LOG

Información:   Hibernate: select alumnos0_.matricula as matricul1_0_, alumnos0_.usuario as usuario2_0_, alumnos0_.nombre as nombre3_0_, alumnos0_.app as app4_0_, alumnos0_.apm as apm5_0_, alumnos0_.edad as edad6_0_, alumnos0_.sexo as sexo7_0_, alumnos0_.fecha_registro as fecha_re8_0_ from revolutions.alumnos alumnos0_
Advertencia:   #{alumnoBean.insert}: 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.
javax.faces.FacesException: #{alumnoBean.insert}: 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 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.el.EvaluationException: 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 javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 40 more
Caused by: 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.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)
    at org.springframework.orm.hibernate4.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:620)
    at org.springframework.orm.hibernate4.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:617)
    at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:340)
    at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308)
    at org.springframework.orm.hibernate4.HibernateTemplate.save(HibernateTemplate.java:617)
    at com.javarevolutions.jdbc.dao.ImplAlumno.insert(ImplAlumno.java:21)
    at com.javarevolutions.jhs.bo.AlumnoImplBO.insert(AlumnoImplBO.java:41)
    at com.javarevolutions.jsf.bean.BeanAlumno.insert(BeanAlumno.java:159)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 41 more

FATAL:   JSF1073: se ha interceptado javax.faces.FacesException durante el procesamiento de INVOKE_APPLICATION 5 : UIComponent-ClientId=, Mensaje=#{alumnoBean.insert}: 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.
FATAL:   #{alumnoBean.insert}: 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.
javax.faces.FacesException: #{alumnoBean.insert}: 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 com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:89)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.glassfish.tyrus.servlet.TyrusServletFilter.doFilter(TyrusServletFilter.java:295)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javax.faces.FacesException: #{alumnoBean.insert}: 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 com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
    at javax.faces.component.UICommand.broadcast(UICommand.java:315)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    ... 36 more
Caused by: javax.faces.el.EvaluationException: 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 javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    ... 40 more
Caused by: 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.hibernate4.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1135)
    at org.springframework.orm.hibernate4.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:620)
    at org.springframework.orm.hibernate4.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:617)
    at org.springframework.orm.hibernate4.HibernateTemplate.doExecute(HibernateTemplate.java:340)
    at org.springframework.orm.hibernate4.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:308)
    at org.springframework.orm.hibernate4.HibernateTemplate.save(HibernateTemplate.java:617)
    at com.javarevolutions.jdbc.dao.ImplAlumno.insert(ImplAlumno.java:21)
    at com.javarevolutions.jhs.bo.AlumnoImplBO.insert(AlumnoImplBO.java:41)
    at com.javarevolutions.jsf.bean.BeanAlumno.insert(BeanAlumno.java:159)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:289)
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:304)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
    ... 41 more

解决方案

I think you should add a transaction manager bean.

<tx:annotation-driven/>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

and

Add the @Transactional annotation for the methods that should be a transaction.

Hope this helps.

这篇关于写操作不允许在只读模式(FlushMode.MANUAL)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆