javax.servlet.ServletException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
cn.zg.filter.EncodingFilter.doFilter(EncodingFilter.java:35)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
root cause org.springframework.transaction.TransactionSystemException: Could not roll back Hibernate transaction; nested exception is org.hibernate.TransactionException: JDBC rollback failed
org.springframework.orm.hibernate3.HibernateTransactionManager.doRollback(HibernateTransactionManager.java:606)
org.springframework.transaction.support.AbstractPlatformTransactionManager.doRollbackOnCommitException(AbstractPlatformTransactionManager.java:633)
org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:528)
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:473)
org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:267)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
$Proxy8.login(Unknown Source)
cn.zg.action.ShaolinAdminAction.login(ShaolinAdminAction.java:40)
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:585)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
cn.zg.filter.EncodingFilter.doFilter(EncodingFilter.java:35)
com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)

解决方案 »

  1.   

    cn.zg.action.ShaolinAdminAction.login(ShaolinAdminAction.java:40)
      

  2.   

    那行我查了,没有问题,本地运行都没有问题,在服务器上运行一阵子之后会出现这个问题。
    感觉与spring的hibernate事务管理有关系。但不知道问题在那里。
      

  3.   

    贴一个流程登陆的吧
    ================action======================
    public class ShaolinAdminAction extends DispatchAction { private ShaolinAdminManagerI manager = null; public void setShaolinAdminManagerI(ShaolinAdminManagerI manager) {
    this.manager = manager;
    }
             public ActionForward login(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    ActionMessages errors = new ActionMessages();
    DynaValidatorForm df = (DynaValidatorForm) form;
    String userName = df.getString("userName");
    String password = df.getString("password");
    String login = manager.login(userName, password, request
    .getRemoteAddr());
    if (StringUtils.isNotEmpty(login)) {
    request.getSession().setAttribute("ADMIN_NAME", login);
    return mapping.findForward(SUCCESS);
    } else {
    errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
    "errors.login"));
    saveErrors(request, errors);
    return mapping.getInputForward();
    }
    }
    }
    ====================对应的配置文件====================
    <bean name="/login" class="cn.zg.action.ShaolinAdminAction"
    singleton="false">
    <property name="shaolinAdminManagerI">
    <ref bean="shaolinAdminManager" />
    </property>
    </bean>======================service===========================
    public class ShaolinAdminManager extends BaseManager implements
    ShaolinAdminManagerI { protected ShaolinAdminDAOI dao; public void setShaolinAdminDAOI(ShaolinAdminDAOI dao) {
    this.dao = dao;
    }
             
             public String login(String userName, String password, String ip) {
    ShaolinAdmin shaolinAdmin = dao.login(userName, password, ip);
    if (shaolinAdmin != null) {
    dao.updateObject(shaolinAdmin);
    return shaolinAdmin.getAdminName();
    }
    return null;
    }
    }
    ===================dao======================
    public class ShaolinAdminDAO extends BaseDAO implements ShaolinAdminDAOI {public ShaolinAdmin login(String userName, String password, String ip) {
    String hql = "select obj from ShaolinAdmin obj where obj.adminName='"
    + userName + "' and obj.adminPass='" + password + "'";
    List l = getObjects(hql, 0, 1);
    if (l != null && l.size() > 0) {
    ShaolinAdmin shaolinAdmin = (ShaolinAdmin) l.get(0);
    shaolinAdmin.setLastLogin(new Date());
    shaolinAdmin.setLastIp(ip);
    return shaolinAdmin;
    }
    return null;
    }
    }
      

  4.   

    /*
     *@作者:赵刚 2006-6-14
     */
    package cn.zg.dao.impl;import java.io.Serializable;
    import java.util.List;import org.hibernate.Query;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import cn.zg.dao.BaseDAOI;public class BaseDAO extends HibernateDaoSupport implements BaseDAOI {
    protected int count = 0; public void setCount(String hql) {
    Query query = getHibernateTemplate().getSessionFactory().openSession()
    .createQuery(hql);
    this.count = Integer.parseInt(query.uniqueResult().toString());
    } public List getObjects(String hql, int start, int range) {
    Query query = getHibernateTemplate().getSessionFactory().openSession()
    .createQuery(hql);
    query.setFirstResult(start);
    if (range > 0) {
    query.setMaxResults(range);
    }
    return query.list();
    } public Integer saveObject(Object o) {
    Integer i = (Integer) getHibernateTemplate().save(o);
    System.out.println(i);
    //getSession().beginTransaction().commit();
    return i;
    } public void removeObject(Object o) {
    getHibernateTemplate().delete(o);
    } public void updateObject(Object o) {
    getHibernateTemplate().update(o);
    } public Object getObject(Class clazz, Serializable id) {
    return getHibernateTemplate().load(clazz, id, null);
    } public int getCount() {
    return this.count;
    }}
      

  5.   

    cn.zg.action.ShaolinAdminAction.login(ShaolinAdminAction.java:40)
      

  6.   

    <bean id="mySessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
    <value>classpath:/hibernate.cfg.xml</value>
    </property>
    </bean> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
    <bean id="myTransactionManager"
    class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="mySessionFactory" />
    </property>
    </bean>