Problemas com Hibernate e JSP

Bom dia!

Estou encontrando problemas com a interação JSP-Hibernate.

O que estou tentando fazer é persistir uma classe (um recado com remetente, destinatário, título e texto) em banco de dados, com Hibernate, a partir de uma página web - um teste para uma aplicação maior.

Ao preencher o formulário com as informações do recado, o botão "OK" redireciona para uma página onde uma user tag captura os atributos adequados da página, monta o javabean e o persiste.

O problema é que, ao que tudo indica, o mecanismo JSP não está conseguindo acessar os JARs do Hibernate e eu recebo a seguinte mensagem de erro ao chegar à página onde os dados devem ser persistidos:

java.lang.NoClassDefFoundError: org/hibernate/Session
	java.lang.Class.getDeclaredMethods0(Native Method)
	java.lang.Class.privateGetDeclaredMethods(Unknown Source)
	java.lang.Class.getDeclaredMethods(Unknown Source)
	java.beans.Introspector$1.run(Unknown Source)
	java.security.AccessController.doPrivileged(Native Method)
	java.beans.Introspector.getPublicDeclaredMethods(Unknown Source)
	java.beans.Introspector.getTargetMethodInfo(Unknown Source)
	java.beans.Introspector.getBeanInfo(Unknown Source)
	java.beans.Introspector.getBeanInfo(Unknown Source)
	org.apache.jasper.compiler.Generator$TagHandlerInfo.<init>(Generator.java:3678)
	org.apache.jasper.compiler.Generator$GenerateVisitor.getTagHandlerInfo(Generator.java:2100)
	org.apache.jasper.compiler.Generator$GenerateVisitor.visit(Generator.java:1579)
	org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1441)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
	org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2213)
	org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2219)
	org.apache.jasper.compiler.Node$Root.accept(Node.java:456)
	org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2163)
	org.apache.jasper.compiler.Generator.generate(Generator.java:3270)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:189)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:267)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:255)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:556)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:293)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Fico grato por qualquer ajuda.

Um grande abraço e muita paz!

Julio

Bom você está correto o JSP não encontrou o jar do hibernate.
Você fez o import na página JSP desse org.hibernate.Session?
Ou faltou colocar o jar no lugar certo, geralmente dentro de seu-site / web-inf / lib.

:roll:

Bem, eu estou usando uma taglib e não uma porção de código JSP direto na página, assim, não creio que o import seja necessário.

Ainda, eu não estava colocando as bibliotecas do hibernate no diretório WEBCONTENT/WEB-INF/lib.

Coloquei os imports na página (nunca se sabe…) e os jars no diretório correto, mas a mensagem de erro permaneceu.

Ainda assim, obrigado pela dica, jtsato! :slight_smile:

Infelizmente, prossegue o problema.

Informação adicional: estou usando o Eclipse (WTP) e o servidor é o Tomcat, ambos em suas últimas versões.

Mais uma informação adicional:

Fiz um teste substituindo org.hibernate.Session por org.hibernate.classic.Session e o mecanismo JSP aceitou aquela classe, mas passou a não aceitar org.hibernate.cfg.Configuration, que eu uso para capturar uma sessão única para toda a aplicação.

Bem, acabei descobrindo uma coisa óbvia… :?

Não basta ter os JARs do Hibernate fisicamente copiados para a pasta WEB-INF/lib… é preciso que os JARs referenciados no classpath sejam exatamente aqueles que estão em WEB-INF/lib. Certamente que eu deveria ter pensado nesse “pequeno detalhe”!! :oops: :smiley:

De qualquer forma, agora tenho um segundo problema:

Uma vez rodando o sistema, o Hibernate não consegue encontrar o driver do PostgreSQL, como se pode ver adiante:


org.hibernate.HibernateException: JDBC Driver class not found: org.postgresql.Driver
	at org.hibernate.connection.DriverManagerConnectionProvider.configure(DriverManagerConnectionProvider.java:66)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:124)
	at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:56)
	at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:366)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:60)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1830)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1150)
	at database.SessionHelper.initialize(SessionHelper.java:134)
	at database.SessionHelper.getInstance(SessionHelper.java:65)
	at msg.Message.save(Message.java:92)
	at taglibs.ProcessTagSupport.doStartTag(ProcessTagSupport.java:76)
	at org.apache.jsp.output_jsp._jspService(org.apache.jsp.output_jsp:91)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)

Já rodei um aplicativo desktop de teste com a mesma configuração do Hibernate e tudo foi OK. Ainda, já copiei o arquivo postgresql-8.1-407.jdbc3.jar para o diretóirio WEB-INF/lib e o referenciei a partir de lá.

Agradeço se alguém puder auxiliar a resolver esse problema! :slight_smile:

Acabei encontrando a solução:

É necessário colocar o arquivo do driver do Postgre nos seguintes diretórios (partindo do diretório de instalação do Tomcat: Tomcat5.5\)

Tomcat5.5\common\lib
Tomcat5.5\server\lib

Assim rodou perfeitamente.

De qualquer forma, obrigado a todos!