首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • SSH框架的数据锁问题 [已结贴,结贴人:yqh2009]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-17 16:46:06 楼主
    我的项目用struts,hibernate,spring框架,我用用户名yqh登陆,然后注销,再用同一个用户名登陆,就会出现下面的问题:


    HTTP Status 500 -

    --------------------------------------------------------------------------------

    type Exception report

    message

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

    exception

    javax.servlet.ServletException: org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Could not execute JDBC batch update; uncategorized SQLException for SQL [update forum.vip set vip_name=?, vip_pw=?, register_time=?, role=?, grade=?, mark=?, age=?, motto=?, address=?, phone=?, work=? where id=?]; SQL state [41000]; error code [1205]; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
    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.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    servlet.SetCharsetFilter.doFilter(SetCharsetFilter.java:54)


    root cause

    org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Could not execute JDBC batch update; uncategorized SQLException for SQL [update forum.vip set vip_name=?, vip_pw=?, register_time=?, role=?, grade=?, mark=?, age=?, motto=?, address=?, phone=?, work=? where id=?]; SQL state [41000]; error code [1205]; Lock wait timeout exceeded; try restarting transaction; nested exception is java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
    org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:120)
    org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
    org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
    org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:377)
    org.springframework.orm.hibernate3.HibernateTemplate.merge(HibernateTemplate.java:762)
    dao.mysqlImple.VipDAO.addMark(VipDAO.java:192)
    dao.mysqlImple.VipDAO.findByVipNameAndPw(VipDAO.java:223)
    com.struts.actions.LoginAction.in(LoginAction.java:60)
    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:589)
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
    org.apache.struts.actions.MappingDispatchAction.execute(MappingDispatchAction.java:169)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    servlet.SetCharsetFilter.doFilter(SetCharsetFilter.java:54)


    root cause

    java.sql.BatchUpdateException: Lock wait timeout exceeded; try restarting transaction
    com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:656)
    org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
    org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
    org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
    org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
    org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
    org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
    org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:373)
    org.springframework.orm.hibernate3.HibernateTemplate.merge(HibernateTemplate.java:762)
    dao.mysqlImple.VipDAO.addMark(VipDAO.java:192)
    dao.mysqlImple.VipDAO.findByVipNameAndPw(VipDAO.java:223)
    com.struts.actions.LoginAction.in(LoginAction.java:60)
    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:589)
    org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
    org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
    org.apache.struts.actions.MappingDispatchAction.execute(MappingDispatchAction.java:169)
    org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    servlet.SetCharsetFilter.doFilter(SetCharsetFilter.java:54)


    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.


    --------------------------------------------------------------------------------

    Apache Tomcat/6.0.10


    以前我用stauts,hibernate都没有这问题的,我的spring配置文件是这样的:

    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocations"
    value="classpath:hibernate.cfg.xml">
    </property>
    </bean>

    我的hibernate.cfg.xml:

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

    <!-- Generated by MyEclipse Hibernate Tools.                  -->
    <hibernate-configuration>

    <session-factory>
    <property name="connection.username">root </property>
    <property name="connection.url">
    jdbc:mysql://localhost:3306/forum
    </property>
    <property name="dialect">
    org.hibernate.dialect.MySQLDialect
    </property>

    <property name="connection.password">root </property>
    <property name="connection.driver_class">
    com.mysql.jdbc.Driver
    </property>

    <!--
    <property name="show_sql">true </property>
    <property name="hbm2ddl.auto">create </property>-->
    <mapping resource="model/mapping.hbm.xml" />
    </session-factory>

    </hibernate-configuration>
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-17 17:12:221楼 得分:10
    spring配置中的事务管理写了吗?
    写一下事务的传播属性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-17 17:31:482楼 得分:0
    事务管理是这个吗?

    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">


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

    <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
      <property name="transactionManager" ref="transactionManager"> </property>
      <property name="transactionAttributes">
        <props>
          <prop key="save*">PROPAGATION_REQUIRED </prop>
          <prop key="update*">PROPAGATION_REQUIRED </prop>
          <prop key="delete*">PROPAGATION_REQUIRED </prop>
          <prop key="*">PROPAGATION_REQUIRED,readOnly </prop>
        </props>
      </property>
    </bean>

    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
      <property name="interceptorNames">
        <list>
          <value>transactionInterceptor </value>
        </list>
      </property>
    </bean>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-28 11:55:443楼 得分:20
    你用的悲观锁,且有死锁危险。 你还是检查一下代码吧!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-28 15:48:084楼 得分:0
    朋友,有个例子参考吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-03-03 12:05:435楼 得分:0
    Sorry!我只能提供线索,

    你看到了
    Lock wait timeout exceeded; try restarting transaction

    数据库的锁超时了,就是一个数据被2个不同的事务争抢

    去看看数据库死锁的资料吧!!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved