Problemas Tomcat + Hibernate

2 respostas
Gleison_Silva

Pessoal,

Sou iniciante em Hibernate... estava tentando colocar para rodar o exemplo que vem no Hibernate Referente (Quick Start With Tomcat) e encontrei problemas... criei uma classe idêntica à que o tutorial mostra e tentei usá-la a partir de um jsp, como se segue:

Endereco e = new Endereco();

e.setEndereco("Rua Itajubá");
e.setNumero("150");
e.setComplemento("Apto 102");
e.setBairro("Jd Andere");
e.setCidade("Varginha");
e.setUf("MG");
e.setCep(37006400);
e.setTipo('C');

Session s = HibernateUtil.currentSession();
Transaction t = s.beginTransaction();
s.save(e);
t.commit();
HibernateUtil.closeSession();

Quando chamo a página dá o erro:

exception 

javax.servlet.ServletException
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
	org.apache.jsp.jsp.teste.hbm_jsp._jspService(hbm_jsp.java:76)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)


root cause 

java.lang.NoClassDefFoundError
	org.apache.jsp.jsp.teste.hbm_jsp._jspService(hbm_jsp.java:60)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
No log encontrei:
10:18:30,957  INFO Environment:432 - Hibernate 2.1.1
10:18:30,973  INFO Environment:461 - hibernate.properties not found
10:18:30,989  INFO Environment:481 - using CGLIB reflection optimizer
10:18:30,989  INFO Configuration:843 - configuring from resource: /hibernate.cfg.xml
10:18:30,989  INFO Configuration:815 - Configuration resource: /hibernate.cfg.xml
10:18:31,926  INFO Configuration:300 - Mapping resource: Endereco.hbm.xml
10:18:32,114  INFO Binder:225 - Mapping class: gs.cav.modelos.Endereco -> endereco
10:18:32,270  INFO Configuration:998 - Configured SessionFactory: null
10:18:32,270  INFO Configuration:584 - processing one-to-many association mappings
10:18:32,270  INFO Configuration:593 - processing one-to-one association property references
10:18:32,270  INFO Configuration:618 - processing foreign key constraints
10:18:32,317  INFO Dialect:82 - Using dialect: net.sf.hibernate.dialect.MySQLDialect
10:18:32,317  INFO SettingsFactory:62 - Use outer join fetching: true
10:18:32,332  INFO NamingHelper:26 - JNDI InitialContext properties:{}
10:18:32,364  INFO DatasourceConnectionProvider:51 - Using datasource: java:comp/env/jdbc/cav
10:18:32,364  INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)
10:18:32,504  INFO SettingsFactory:89 - Use scrollable result sets: true
10:18:32,504  INFO SettingsFactory:90 - JDBC 2 max batch size: 15
10:18:32,504  INFO SettingsFactory:99 - Query language substitutions: {}
10:18:32,504  INFO SettingsFactory:110 - cache provider: net.sf.ehcache.hibernate.Provider

O que há de errado?

Valeu.

Gleison

2 Respostas

Gleison_Silva

Pessoal, o problema acima eu consegui resolver… faltava adicionar o jta.jar ao lib da minha aplicalção…

Agora estou com outro problema e já tô quase jogando a toalha…

O código jsp é o mesmo. Erro:

net.sf.hibernate.JDBCException: Could not save object net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:744) net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:717) org.apache.jsp.jsp.teste.hbm_jsp._jspService(hbm_jsp.java:62) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133) javax.servlet.http.HttpServlet.service(HttpServlet.java:856) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248) javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

E no log:

16:26:06,531 WARN JDBCExceptionReporter:38 - SQL Error: 0, SQLState: null 16:26:06,531 ERROR JDBCExceptionReporter:46 - Can't call commit when autocommit=true 16:26:06,546 ERROR JDBCExceptionReporter:38 - Could not save object java.sql.SQLException: Can't call commit when autocommit=true at com.mysql.jdbc.Connection.commit(Unknown Source) at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:248) at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:244) at net.sf.hibernate.id.TableGenerator.generate(TableGenerator.java:126) at net.sf.hibernate.id.TableHiLoGenerator.generate(TableHiLoGenerator.java:59) at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:727) at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:717) at org.apache.jsp.jsp.teste.hbm_jsp._jspService(hbm_jsp.java:62) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:564) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:211) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:805) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:696) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:605) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:677) at java.lang.Thread.run(Thread.java:536)

Esse tá bravo de resolver… já tô sem saber o que tentar…

Gleison_Silva

Esqueci uma coisa: no script jsp eu já retirei o t.commit(), ficando dessa maneira:

Session s = HibernateUtil.currentSession();
s.save(e);
s.flush();
HibernateUtil.closeSession();

A classe HibernateUtil:
public class HibernateUtil {
    
    private static final SessionFactory sf;
    
    public static final ThreadLocal session = new ThreadLocal();
    
    static {
        try {
            sf = new Configuration().configure().buildSessionFactory();
        } catch (HibernateException he) {
            throw new RuntimeException("Exception building SessionFactory: " + he.getMessage());
        }
    }
    
    public static Session currentSession() throws HibernateException {
        Session s = (Session) session.get();
        if(s==null) {
            s = sf.openSession();
            session.set(s);
        }
        return s;
    }

    public static void closeSession() throws HibernateException {
        Session s = (Session) session.get();
        session.set(null);
        if(s!=null) s.close();
    }
}
Criado 5 de fevereiro de 2004
Ultima resposta 5 de fev. de 2004
Respostas 2
Participantes 1