WARN - Unhandled Exception thrown: class org.hibernate.TransactionException
ERROR - Servlet.service() for servlet action threw exception
org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction.java:149)
at com.teach.hibernate.dao.UserDAO.valid(UserDAO.java:34)
at com.teach.struts.actions.LoginAction.valid(LoginAction.java:44)
at com.teach.struts.actions.LoginAction.execute(LoginAction.java:29)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:743)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    package com.teach.hibernate.dao;import com.teach.hibernate.beans.User;
    import com.teach.hibernate.HibernateSessionFactory;
    import org.hibernate.HibernateException;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;public class UserDAO {
    public User valid(String username, String password)
    throws HibernateException {
    Session session = null;
    Transaction tx = null;
    User user = null;
    try {
    session = HibernateSessionFactory.currentSession();
    tx = session.beginTransaction(); Query query = session
    .createQuery("from User where username=? and password=?");
    query.setString(0, username.trim());
    query.setString(1, password.trim()); user = (User) query.uniqueResult(); query = null; tx.commit();
    } catch (HibernateException e) {
    throw e;
    } finally {
    if (tx != null) {
    tx.rollback();
    }
    HibernateSessionFactory.closeSession();
    }
    return user;
    }}
      

  2.   

    package com.teach.struts.actions;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMessage;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import com.teach.struts.forms.LoginForm;
    import com.teach.hibernate.dao.UserDAO;
    import com.teach.hibernate.beans.User;
    public class LoginAction extends Action{
    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception{
    ActionErrors errors = new ActionErrors();
    ActionForward forward = new ActionForward();
    LoginForm loginForm = (LoginForm) form;

    int typeId  = loginForm.getTypeId();
    String username = loginForm.getUsername();
    String password = loginForm.getPassword();

    HttpSession session = request.getSession(false);
    if (session != null) {
    session.invalidate();
    }
    session = request.getSession(true);
    boolean flag = valid(loginForm);
    System.out.println("flag" + flag);
    if (flag = true){if (typeId == 0) forward = mapping.findForward("admin_edu");
    if (typeId == 1) forward = mapping.findForward("teacher_edu");
    if (typeId == 2) forward = mapping.findForward("student_edu");
    }else{
    errors.add(ActionErrors.GLOBAL_MESSAGE, new ActionMessage(
    "login.message.failed"));
    forward = mapping.findForward("failure");
    }
    return forward;

    }
    private boolean valid(LoginForm loginForm) {
    UserDAO userDAO = new UserDAO();
    User user = userDAO.valid(loginForm.getUsername(), loginForm.getPassword());
    if (user != null) {
    return true; 
    } else {
    return false;
    }
    }}