Java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration

Pessoal, estou aprendendo hibernate e segui alguns exemplos da apostila fj21 da caelum.
Eu tenho uma pág. jsp que chama um servlet e nesse servlet é chamada a classe HibernateFactory que retorna uma sessão.

Mas ocorre o erro abaixo.

25/07/2008 21:36:15 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet ServletIncluirProdutoApostilaCaelum threw exception java.lang.NoClassDefFoundError: org/hibernate/cfg/AnnotationConfiguration at br.com.wincomp.loja.HibernateFactory.<clinit>(HibernateFactory.java:11) at br.com.wincomp.loja.ServletIncluirProdutoApostilaCaelum.doGet(ServletIncluirProdutoApostilaCaelum.java:29) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)

E dá o erro na seguinte linha do HibernateFactory

[color=red]Eu criei uma classe para testar e funcionou normalmente[/color], mas ao tentar com a HibernateFactory, dá o erro acima.

Classe de teste onde funciona normalmente

[code]package br.com.wincomp.loja

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class TesteDeConfiguracao {

public static void main(String[] args) {

	// Cria uma configuração para a classe Produto
	AnnotationConfiguration cfg = new AnnotationConfiguration();
	System.out.println("***Instanciou AnnotationConfiguration***");
	cfg.addAnnotatedClass(Produtos.class);
	System.out.println("***Adicionou a classe produtos***");
	SessionFactory factory = cfg.buildSessionFactory();
	System.out.println("***Criou a SessionFactory***");
	// cria a sessão
	Session session = factory.openSession();
	System.out.println("***Criou a Session***");
	// fecha a sessão
	session.close();
	System.out.println("***Fechou a sessão***");
	factory.close();
	System.out.println("***Fechou a factory***");
}

}[/code]

Seguem as saídas do console ao executar o código acima.

***Instanciou AnnotationConfiguration*** ***Adicionou a classe produtos*** ***Criou a SessionFactory*** ***Criou a Session*** ***Fechou a sessão*** ***Fechou a factory***

Não deve ser problema de lib, caso contrário, não funcionaria a classe de teste, ou estou errado? Eu adicionei todas as libs referentes ao hibernate

Abaixo estão os códigos:
O jsp chama o servlet abaixo que está mapeado no web.xml

[code]br.com.wincomp.loja;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;

public class ServletIncluirProdutoApostilaCaelum extends HttpServlet{

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
	
	Double codigo = Double.parseDouble(request.getParameter("codigo"));
	String descricao = request.getParameter("descricao");
	String preco = request.getParameter("preco");
	String status = request.getParameter("status");
	
	response.setContentType("text/html;charset=UTF-8");
	PrintWriter out = response.getWriter();
	
	out.print("<html>");
	out.print("<body>");
	
	try{
		Session session = new HibernateFactory().getSession();
		Produtos p = new Produtos();
		p.setCodigo(codigo);
		p.setDescricao(descricao);
		p.setPreco(preco);
		p.setStatus(status);
		session.save(p);
		System.out.println("Código do produto: " + p.getCodigo());
		out.println("<h2>Operação efetuada com sucesso!!!</h2>");
		session.close();
	}catch(Exception e){
		out.println("<h2>"+e.getMessage()+"</h2>");	
	}
	out.println("<body>");
	out.println("<html>");
	out.close();
}	

}[/code]

O HibernateFactory

[code]package br.com.wincomp.loja;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateFactory {

private static SessionFactory factory;
	static {
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		cfg.addAnnotatedClass(Produtos.class);
		factory = cfg.buildSessionFactory();
	}
public Session getSession() {
	return factory.openSession();
}

}[/code]

O hibernate.properties está no src do projeto

hibernate.dialect org.hibernate.dialect.OracleDialect hibernate.connection.driver_class oracle.jdbc.OracleDriver hibernate.connection.url jdbc:oracle:thin:@localhost:1521:dba1 hibernate.connection.username user hibernate.connection.password xxxx

Se puderam dar uma ajuda, eu agradeço.

Você está com o JAR hibernate-annotations.jar no classpath ?

Na verdade, o erro era porque as libs estavam no classpath, mas não estavam na pasta WEB-INF\lib, foi só adicionar o jar do annotations que funcionou.