读书人

一个Bug搞了一晚大家帮帮忙解决思路

发布时间: 2012-03-14 12:01:12 作者: rapoo

一个Bug搞了一晚,大家帮帮忙
以下是异常的相关信息,整了一个晚上也整正常,但每个类我都单独测试过了,而且正常,头都有大了,大家帮帮忙

Java code
2009-6-18 23:41:46 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet default threw exceptionjava.lang.NoClassDefFoundError: org/hibernate/Session    at com.starc.action.sort.SortAction.execute(SortAction.java:38)    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)    at java.lang.reflect.Method.invoke(Method.java:597)    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept


Java code
package com.starc.action.sort;import java.util.Set;import com.opensymphony.xwork2.ActionSupport;import com.starc.dao.ISortDao;import com.starc.dao.impl.SortDaoImpl;import com.starc.hibernate.Sort;/** *  * @author starc *  * the action will be init * */public class SortAction extends ActionSupport {    private Sort sort;    private Set<Sort> childs;     public Set<Sort> getChilds() {        return childs;    }    public void setChilds(Sort parent) {        this.childs = parent.getChildSet();    }    public Sort getSort() {        return sort;    }    public void setSort(Sort sort) {        this.sort = sort;    }    @Override    public String execute() throws Exception {        ISortDao sd=new SortDaoImpl();        sd.findById(1);        return super.execute();    }                        }            


Java code
package com.starc.dao.impl;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import com.starc.dao.HibernateUtils;import com.starc.dao.ISortDao;import com.starc.hibernate.Sort;public class SortDaoImpl implements ISortDao {    public boolean addSort(Sort child, Sort parent) {        boolean state = false;        if (this.check(parent) || !this.check(child) || !parent.isLeaf()) {            child.setParent(parent);            Session session = HibernateUtils.getSession();            Transaction trans = session.beginTransaction();            try {                session.save(child);                trans.commit();                state = true;            } catch (Exception e) {                e.printStackTrace();                trans.rollback();            } finally {                if (session.isOpen()) {                    HibernateUtils.closeSession(session);                }            }        }        return state;    }    public void delete(Sort sort) {        if (this.check(sort)) {            Session session = HibernateUtils.getSession();            Transaction trans = session.beginTransaction();            try {                session.delete(sort);                trans.commit();            } catch (Exception e) {                e.printStackTrace();                trans.rollback();            } finally {                if (session.isOpen()) {                    HibernateUtils.closeSession(session);                }            }        }    }    public Sort findById(int id) {        Sort sort = null;        System.out.println(id);        //到这都正常,就是session这,用测试类也正常        Session session = HibernateUtils.getSession();        Transaction trans = session.beginTransaction();        try {            sort = (Sort) session.get(Sort.class, id);            trans.commit();        } catch (Exception e) {            e.printStackTrace();            trans.rollback();        } finally {                HibernateUtils.closeSession(session);        }        return sort;    }    @SuppressWarnings("unchecked")    public Sort findByName(String name) {        Sort sort = null;        Session session = HibernateUtils.getSession();        Transaction trans = session.beginTransaction();        try {            List list = session.createQuery(                    "from Sort as sort where sort.name=" + name).list();            if (!list.isEmpty()) {                sort = (Sort) list.get(0);            }            trans.commit();        } catch (Exception e) {            e.printStackTrace();            trans.rollback();        } finally {            if (session.isOpen()) {                HibernateUtils.closeSession(session);            }        }        return sort;    }    @SuppressWarnings("unchecked")    public List<Sort> getChilds(Sort sort) {        List<Sort> list = new ArrayList();        Session session = HibernateUtils.getSession();        Transaction trans = session.beginTransaction();        try {            List tmp = session.createQuery(                    "from Sort as sort where sort.parent=" + sort.getId())                    .list();            trans.commit();            Iterator iterator = tmp.iterator();            while (iterator.hasNext()) {                Sort tmpSort = (Sort) iterator.next();                list.add(tmpSort);            }        } catch (Exception e) {            e.printStackTrace();            trans.rollback();        } finally {            if (session.isOpen()) {                HibernateUtils.closeSession(session);            }        }        return list;    }    public Sort getParent(Sort sort) {        Sort parent = null;        sort.getParent();        return parent;    }    public LinkedList<Sort> getPath(Sort sort) {        LinkedList<Sort> path = new LinkedList<Sort>();        while (sort.getParent() != null) {            path.addFirst(sort.getParent());            sort = sort.getParent();        }        return path;    }    public Sort modify(Sort sort) {        Session session = HibernateUtils.getSession();        Transaction trans = session.beginTransaction();        try {            if (this.findById(sort.getId()) != null) {                session.update(sort);                trans.commit();            }        } catch (Exception e) {            e.printStackTrace();            trans.rollback();        } finally {            if (session.isOpen()) {                HibernateUtils.closeSession(session);            }        }        return sort;    }    public boolean check(Sort sort) {        boolean state = false;        Session session = HibernateUtils.getSession();        Transaction trans = session.beginTransaction();        try {            Sort tmpSort = (Sort) session.get(Sort.class, sort.getId());            if (sort.getName() == tmpSort.getName()                    || sort.getParent().getId() == tmpSort.getParent().getId()) {                state = true;            }        } catch (Exception e) {            e.printStackTrace();            trans.rollback();        } finally {            if (session.isOpen()) {                HibernateUtils.closeSession(session);            }        }        return state;    }    public Sort getRoot() {        Sort root = null;        root = this.findById(1);        return root;    }} 



HTML code
<!DOCTYPE hibernate-configuration PUBLIC    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>    <session-factory >    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="hibernate.connection.url">jdbc:mysql://localhost/starc?useUnicode=true&characterEncoding=UTF-8</property>    <property name="hibernate.connection.username">root</property>    <property name="hibernate.connection.password">wenyadong</property>    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>    <property name="show_sql">true</property>                        <mapping resource="com/starc/hibernate/Sort.hbm.xml"/>        <mapping resource="com/starc/hibernate/Attrib.hbm.xml"/>    <!--    <mapping resource="com/starc/hibernate/Sell.hbm.xml"/>    <mapping resource="com/starc/hibernate/Customer.hbm.xml"/>    <mapping resource="com/starc/hibernate/Storage.hbm.xml"/>    <mapping resource="com/starc/hibernate/Stork.hbm.xml"/>    <mapping resource="com/starc/hibernate/Bankrool.hbm.xml"/>         -->    </session-factory></hibernate-configuration>


[解决办法]
NoClassDefFoundError 一般是指你有两个同样的class在classpath上。而且你是在反射的时候报的错,说明container去gloable的ClassLoader去找这个class了。

你查下你的war/ear包里和container的lib下是不是有重复的hibernate.jar,删掉一个就行了

读书人网 >J2EE开发

热点推荐