Hibernate + VRaptor3 - Problemas log4j.xml

7 respostas
rsspa

Boa noite,
Sou novo no fórum assim como usando hibernate e o vraptor. Vou realizar um curso de VRaptor final de semana que vem. Para conseguir absorver mais o que irá ser passado em aula resolvi por conta própria antecipar o aprendizado. Para isso peguei a apostila fj28 da caelum e estou estudando.

Na parte de configurar o VRpator, utilizei um tutorial encontrado na internet.
http://felipeassoline.wordpress.com/2010/02/27/configurando-projeto-netbeans-vraptor/

Bem, até aí consegui fazer tudo. O problema é que após configurar o VRaptor dessa maneiro não consigo acessar mais o banco de dados com o Hibernate. Quando executo a minha função de alterar algum elemento no banco de dados acontece os seguinte retorno (Utilizo o Netbeans).

Hibernate: 
    select
        produto0_.id as id0_0_,
        produto0_.descricao as descricao0_0_,
        produto0_.nome as nome0_0_,
        produto0_.preco as preco0_0_ 
    from
        Produto produto0_ 
    where
        produto0_.id=?
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.com.fj28.modelo.Produto#1]
        at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:377)
        at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:79)
        at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:68)
        at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
        at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
        at br.com.fj28.modelo.Produto$$EnhancerByCGLIB$$4c0b8f3c.setPreco(<generated>)
        at br.com.fj28.testes.AlteracaoDeProduto.alteraProduto(AlteracaoDeProduto.java:26)
        at br.com.fj28.testes.AlteracaoDeProduto.main(AlteracaoDeProduto.java:19)
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 2 segundos)

Quando executo a função de remover acontece...

Hibernate: 
    select
        produto0_.id as id2_0_,
        produto0_.descricao as descricao2_0_,
        produto0_.nome as nome2_0_,
        produto0_.preco as preco2_0_ 
    from
        Produto produto0_ 
    where
        produto0_.id=?
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.com.fj28.modelo.Produto#1]
        at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:377)
        at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:79)
        at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:68)
        at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
        at org.hibernate.engine.StatefulPersistenceContext.unproxyAndReassociate(StatefulPersistenceContext.java:571)
        at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:68)
        at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
        at org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)
        at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)
        at br.com.fj28.dao.ProdutoDao.remove(ProdutoDao.java:42)
        at br.com.fj28.testes.RemocaoDeProduto.main(RemocaoDeProduto.java:20)
Java Result: 1
Criei um classe controller como mostrada abaixo.
package br.com.fj28.controllers;

import br.com.caelum.vraptor.Resource;
import br.com.fj28.dao.ProdutoDao;
import br.com.fj28.modelo.Produto;
import java.util.List;

/**
 *
 * @author Usuario
 */
@Resource
public class ProdutosController {

    private final ProdutoDao dao;

    public ProdutosController(ProdutoDao dao) {
        this.dao = dao;
    }

    public List<Produto> lista() {
        return dao.listaTudo();
    }
}
Criei também o arquivo WEB-INF/jsp/produtos/lista.jsp com a seguinte estrutura.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>Nome</th>
                    <th>Descricao</th>
                    <th>Preço</th>
                </tr>
            </thead>
            <tbody>
                <c:forEach items="${produtoList}" var="produto">
                    <tr>
                        <td>${produto.nome }</td>
                        <td>${produto.descricao }</td>
                        <td>${produto.praco }</td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
    </body>
</html>
Quando tento acessar a página pelo browser acontece um erro HTTP Status 500 e é mostrado no terminal do Tomcat o seguinte.
15/01/2011 16:23:54 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/fj28] appears to have started a thread named [com.google.common.base.internal.Finalizer] but has failed to stop it. This is very likely to create a memory leak.
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
log4j:WARN No appenders could be found for logger (br.com.caelum.vraptor.config.BasicConfiguration).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    select
        this_.id as id0_0_,
        this_.descricao as descricao0_0_,
        this_.nome as nome0_0_,
        this_.preco as preco0_0_ 
    from
        Produto this_
Creio que o problema esteja no meu log4j.xml, porém não sei o que fazer. Meu arquivo log4j.xml está na pasta src do meu projeto e com a seguinte configuração.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                                value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n"/>
        </layout>
    </appender>

    <category name="org.vraptor">
        <priority value="INFO" />
        <appender-ref ref="stdout" />
    </category>

    <category name="com.thoughtworks">
        <priority value="INFO" />
        <appender-ref ref="stdout" />
    </category>
                
    <category name="br.com.caelum.vraptor">
        <priority value="DEBUG" />
        <appender-ref ref="stdout" />
    </category>
        
    <category name="org.springframework">
        <priority value="INFO" />
        <appender-ref ref="stdout" />
    </category>
    
    <category name="org.hibernate">
        <priority value="DEBUG" />
        <appender-ref ref="stdout" />
    </category>
 
</log4j:configuration>

Alguém poderia me ajudar?

Obrigado.

7 Respostas

Lucas_Cavalcanti

o erro:

Exception in thread “main” org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.com.fj28.modelo.Produto#1]

não existe nenhum produto com id 1 no banco e vc está tentando usá-lo no banco, por isso o problema.

rsspa

Putz, que vergonha.

Não tinha reparado a linha abaixo na minha classe altera e remove produtos.

Obrigado Lucas, agora vou tentar continuar a apostila. Vou tentar criar o controlado de produtos (capítulo 7 da apostila fj28 - caelum).

Qualquer dúvida volto a postar.

Obrigado.

rsspa

Boa noite,

Continuo estudando a apostila fj28 da caelum. Travei no capítulo 7. Criei uma classe ProdutosController com o seguinte código.
package br.com.fj28.controller;

import br.com.caelum.vraptor.Resource;
import br.com.fj28.dao.ProdutoDao;
import java.util.List;
import br.com.fj28.modelo.Produto;

@Resource
public class ProdutosController {

    private final ProdutoDao dao;

    public ProdutosController(ProdutoDao dao) {
        this.dao = dao;
    }

    public List<Produto> lista() {
        return dao.listaTudo();
    }
}
Minha classe ProdutoDao apresenta o seguinte código.
package br.com.fj28.dao;

import br.com.caelum.vraptor.ioc.Component;
import br.com.fj28.infra.CriadorDeSession;
import br.com.fj28.modelo.Produto;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

@Component
public class ProdutoDao {

    private final Session session;

    public ProdutoDao() {
        this.session = CriadorDeSession.getSession();
    }

    public void salva(Produto produto) throws HibernateException {
        Transaction tx = session.beginTransaction();
        session.save(produto);
        tx.commit();
    }

    public void altera(Produto produto) throws HibernateException {
        Transaction tx = session.beginTransaction();
        session.update(produto);
        tx.commit();
    }

    public void remove(Produto produto) {
        Transaction tx = session.beginTransaction();
        session.delete(produto);
        tx.commit();
    }

    public List<Produto> listaTudo() {
        return this.session.createCriteria(Produto.class).list();
    }
}
Criei um arquivo chamado WEB-INF/jsp/produtos/lista.jsp com o seguinte código.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <table>
            <thead>
                <tr>
                    <th>Nome</th>
                    <th>Descrição</th>
                    <th>Preço</th>
                </tr>
            </thead>
            <tbody>
                <c:forEach items="${produtoList}" var="produto">
                    <tr>
                        <td>${produto.nome }</td>
                        <td>${produto.descricao } </td>
                        <td>${produto.preco }</td>
                    </tr>
                </c:forEach>
        </table>
    </body>
</html>
Uso o Netbeans e o mesmo diz que há um erro na linha
<c:forEach items="${produtoList}" var="produto">
Quando executo no browser http://localhost:8080/fj28/produtos/lista obtenho um HTTP Status 500. No console do Tomcat apresenta o seguinte.
15/01/2011 22:56:49 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
15/01/2011 22:56:49 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
SEVERE: The web application [/fj28] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
15/01/2011 22:56:49 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/fj28] appears to have started a thread named [com.google.common.base.internal.Finalizer] but has failed to stop it. This is very likely to create a memory leak.
15/01/2011 22:56:49 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/fj28] appears to have started a thread named [MySQL Statement Cancellation Timer] but has failed to stop it. This is very likely to create a memory leak.
log4j:ERROR LogMananger.repositorySelector was null likely due to error in class reloading, using NOPLoggerRepository.
log4j:WARN No appenders could be found for logger (br.com.caelum.vraptor.config.BasicConfiguration).
log4j:WARN Please initialize the log4j system properly.
Hibernate: 
    select
        this_.id as id0_0_,
        this_.descricao as descricao0_0_,
        this_.nome as nome0_0_,
        this_.preco as preco0_0_ 
    from
        Produto this_

Alguém sabe me dizer qual meu erro?

Obrigado

rsspa

Boa noite amigos,

Analisei melhor o log e descobri o erro.

Bastou trocar no meu arquivo lista.jsp a linha

pela linha

Obrigado do mesmo jeito galera.

Qualquer outra dúvida postarei aqui.

rsspa

Bom dia,

Estou com um erro na hora de adicionar um produto no banco de dados com o hibernate. O Tomcat dá o seguinte erro no log.

18/01/2011 10:42:28 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet default threw exception br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/event/EventSource; at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:86) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:90) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53) at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 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:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 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:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/event/EventSource; at org.hibernate.validator.event.ValidateEventListener.onPreInsert(ValidateEventListener.java:172) at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:119) at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:42) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187) at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172) at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523) at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519) at br.com.fj28.dao.ProdutoDao.salva(ProdutoDao.java:34) at br.com.fj28.controller.ProdutosController.adiciona(ProdutosController.java:52) 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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57) ... 40 more

Alguém sabe como resolver?

Obrigado.

Lucas_Cavalcanti

java.lang.NoSuchMethodError: org.hibernate.event.PreInsertEvent.getSource()Lorg/hibernate/event/EventSource

isso geralmente significa que vc está usando versões incompatíveis da biblioteca, no caso do hibernate…

quais jars do hibernate estão no classpath?

rsspa

Bom dia Lucas,

Acho que encontrei o problema. Tinha movido meus .jar do vraptor-black-project para a pasta do Netbeans e importado os mesmos para meu projeto. Coloquei as mesmas na pasta WEB-INF/lib e fiz a importação. Não sei se o problema seria o acesso a pasta Arquivos de Programas/Netbeans.

Mesmo assim obrigado.

Criado 15 de janeiro de 2011
Ultima resposta 18 de jan. de 2011
Respostas 7
Participantes 2