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.