以下是异常的相关信息,整了一个晚上也整正常,但每个类我都单独测试过了,而且正常,头都有大了,大家帮帮忙
2009-6-18 23:41:46 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet default threw exception
java.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.interceptpackage 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();
}


}



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;
}
}<!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&amp;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>

解决方案 »

  1.   

    NoClassDefFoundError 一般是指你有两个同样的class在classpath上。而且你是在反射的时候报的错,说明container去gloable的ClassLoader去找这个class了。你查下你的war/ear包里和container的lib下是不是有重复的hibernate.jar,删掉一个就行了
      

  2.   

    楼上字字真金,原因是我用Myeclipse的时候自动部署没把hibernate的jar包复制到服务器下