一个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,删掉一个就行了