Fórum Problema ao executar um MB na JPA #8952

31/08/2009

0

Bom dia, andei assistindo as video-aulas do Dyego, e ao tentar executar a pagina para listar todos os "products", apareceu o seguinte erro:

java.lang.ClassNotFoundException: javax.persistence.Persistence.


aqui vai minha JPAUtil

package br.com.loja.util;

import java.io.Serializable;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;

public class JPAUtil {

    private static JPAUtil me;

    private EntityManagerFactory emf;

    private JPAUtil() {

        emf = Persistence.createEntityManagerFactory("bancoLocal");
}

    public static JPAUtil getInstance() {

        if (me == null) {
            me = new JPAUtil();
        }

        return me;
    }

    public EntityManager getEntityManager() {

        EntityManager toReturn = emf.createEntityManager();
        toReturn.getTransaction().begin();

        return toReturn;
    }

    @SuppressWarnings("unchecked")
    public <T> List<T> getList(Class<T> classToCast, String jpql,
            Object... parameters) {

        List toReturn = null;
        EntityManager em = getEntityManager();
        Query qr = em.createQuery(jpql);
        for (int i = 0; i < parameters.length; i++) {
            qr.setParameter(i + 1, parameters[i]);

        }

        toReturn = qr.getResultList();
        em.getTransaction().commit();
        em.close();
        return toReturn;

    }

    public <T> T getEntity(Class<T> entityClass, Serializable pk) {

        EntityManager em = getEntityManager();
        T toReturn = em.find(entityClass, pk);
        em.getTransaction().commit();
        em.close();

        return toReturn;
    }

}


e da erro nessa linha:

  emf = Persistence.createEntityManagerFactory("bancoLocal");


Detalhe, eu rodei no debbug, e ele me retorna o emf NULL.

Alguém poderia me ajudar?


Euclides Filizola

Euclides Filizola

Responder

Posts

31/08/2009

Henrique Weissmann

Olá, o problema ocorreu porque o JAR que contém as classes referentes ao JPA não foi distribuido junto com a sua aplicação: Como consequência, a classe javax.persistence.Persistence não foi encontrada, gerando a excessão abaixo: java.lang.ClassNotFoundException: javax.persistence.Persistence. Verifique os jars disponibilizados com seu sistema e tente novamente. Esta excessão irá desaparecer.
Responder

Gostei + 0

31/08/2009

Euclides Filizola

aqui está o meu erro:



HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception


root cause

java.lang.NoClassDefFoundError: javax/persistence/Persistence
    br.com.loja.util.JPAUtil.<init>(JPAUtil.java:19)
    br.com.loja.util.JPAUtil.getInstance(JPAUtil.java:25)
    br.com.loja.dao.ProductDAO.getAllProducts(ProductDAO.java:45)
    br.com.loja.ManagedBean.ProductMB.<init>(ProductMB.java:14)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.lang.reflect.Constructor.newInstance(Unknown Source)
    java.lang.Class.newInstance0(Unknown Source)
    java.lang.Class.newInstance(Unknown Source)
    com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:277)
    com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:531)
    com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
    org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
    org.apache.el.parser.AstValue.getValue(AstValue.java:103)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    javax.faces.component.UIData.getValue(UIData.java:582)
    javax.faces.component.UIData.getDataModel(UIData.java:1063)
    javax.faces.component.UIData.setRowIndex(UIData.java:417)
    com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
    javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
    javax.faces.component.UIData.encodeBegin(UIData.java:879)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
    com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)


root cause

java.lang.ClassNotFoundException: javax.persistence.Persistence
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
    org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
    java.lang.ClassLoader.loadClassInternal(Unknown Source)
    br.com.loja.util.JPAUtil.<init>(JPAUtil.java:19)
    br.com.loja.util.JPAUtil.getInstance(JPAUtil.java:25)
    br.com.loja.dao.ProductDAO.getAllProducts(ProductDAO.java:45)
    br.com.loja.ManagedBean.ProductMB.<init>(ProductMB.java:14)
    sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    java.lang.reflect.Constructor.newInstance(Unknown Source)
    java.lang.Class.newInstance0(Unknown Source)
    java.lang.Class.newInstance(Unknown Source)
    com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:277)
    com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:531)
    com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
    javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
    org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
    org.apache.el.parser.AstValue.getValue(AstValue.java:103)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    javax.faces.component.UIData.getValue(UIData.java:582)
    javax.faces.component.UIData.getDataModel(UIData.java:1063)
    javax.faces.component.UIData.setRowIndex(UIData.java:417)
    com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
    javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
    javax.faces.component.UIData.encodeBegin(UIData.java:879)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
    javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
    com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.



. aqui estão todas os meus jars instalados:

ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-validator.jar
jboss-archive-browsing.jar
ehcache-1.3.0.jar
hibernate-entitymanager.jar
antlr-2.7.6.jar
asm.jar
asm-attrs.jar
c3p0-0.9.1.2.jar
cglib-2.1.3.jar
cglib-nodep-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
hibernate3.jar
javassist.jar
jta.jar
log4j-1.2.11.jar
asm-2.2.3.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar

....
Responder

Gostei + 0

31/08/2009

Henrique Weissmann

Se não me engano, o nome do jar que está faltando é jpa.jar. Neste jar se encontram as interfaces definidas para esta JSR. Você também terá de fornecer os jars da implementação do Hibernate referentes ao padrão JPA.
Responder

Gostei + 0

31/08/2009

Euclides Filizola

Baixei o jpa.jar, coloquei as libs que estavam faltando....

continua o mesmo erro.. !
Responder

Gostei + 0

31/08/2009

Henrique Weissmann

Você está incluindo os jars necessários no arquivo .war que será enviado ao seu servidor de aplicações? Faça o seguinte teste: uma vez gerado o seu arquivo .war, abra-o com um software extrator como FilZip, Winzip ou qualquer outro e verifique se no diretório WEB-INF/libs presentes no arquivo se encontram os arquivos que você incluiu. Caso não estejam presentes, pode ser que estejam disponíveis para a sua IDE, porém esta esteja configurada para não incluir estes arquivos no pacote war a ser gerado.
Responder

Gostei + 0

31/08/2009

Euclides Filizola

eu ainda não terminei o projeto. Por isso não coloquei num arquivo *.war. Agora aconteceu um detalhe, eu coloquei o jpa.jar para rodar dentro do servidor, ou seja, dentro das libs do tomcat, dae ele me retornou outro erro agora. Quando eu rodo a aplicação, me retorna o seguinte erro:

31/08/2009 11:40:56 com.sun.faces.application.ApplicationAssociate createAndMaybeStoreManagedBeans
SEVERE: JSF1001: Managedbean productMB could not be created.
31/08/2009 11:40:56 com.sun.facelets.FaceletViewHandler handleRenderException
SEVERE: Error Rendering View[/pages/listProducts.xhtml]
javax.faces.FacesException: javax.faces.FacesException: Cant instantiate class: br.com.loja.ManagedBean.ProductMB.. No Persistence provider for EntityManager named conexao
    at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:541)
    at com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:82)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
    at org.apache.el.parser.AstIdentifier.getValue(AstIdentifier.java:61)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:103)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    at javax.faces.component.UIData.getValue(UIData.java:582)
    at javax.faces.component.UIData.getDataModel(UIData.java:1063)
    at javax.faces.component.UIData.setRowIndex(UIData.java:417)
    at com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
    at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
    at javax.faces.component.UIData.encodeBegin(UIData.java:879)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    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)
Caused by: javax.faces.FacesException: Cant instantiate class: br.com.loja.ManagedBean.ProductMB.. No Persistence provider for EntityManager named conexao
    at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:282)
    at com.sun.faces.application.ApplicationAssociate.createAndMaybeStoreManagedBeans(ApplicationAssociate.java:531)
    ... 35 more
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named conexao
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
    at br.com.loja.util.JPAUtil.<init>(JPAUtil.java:19)
    at br.com.loja.util.JPAUtil.getInstance(JPAUtil.java:25)
    at br.com.loja.dao.ProductDAO.getAllProducts(ProductDAO.java:45)
    at br.com.loja.ManagedBean.ProductMB.<init>(ProductMB.java:14)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.sun.faces.config.ManagedBeanFactoryImpl.newInstance(ManagedBeanFactoryImpl.java:277)
    ... 36 more
31/08/2009 11:40:56 com.sun.faces.application.ApplicationAssociate createAndMaybeStoreManagedBeans
SEVERE: JSF1001: Managedbean productMB could not be created.


e dentro do meu projeto, dentro de src, eu tenho uma pasta chamada META-INF, que contém o persistence.xml

detalhe, eu testo todos os meus DAO's, utilizando o JUnit Test, e funcionam beleza, todos passam OK.

Responder

Gostei + 0

31/08/2009

Euclides Filizola

e ae...

nada ?
Responder

Gostei + 0

31/08/2009

Henrique Weissmann

Euclides, já vi isto acontecer algumas vezes: o problema normalmente consiste no fato do class loader do container de aplicações ser customizado. Visto que você precisa carregar as configurações do JPA que se encontram dentro do arquivo persistence.xml, provavelmente está carregando o arquivo como recurso (chamando o método Class.getResourceAsStream("endereço"). Sugestão: coloque o arquivo persistence.xml dentro dos pacotes da sua classe, e não dentro do diretório WEB-INF. E ao carregá-lo, carregue-o chamando o método getClass().getClassLoader().getResourceAsStream("caminho para o arquivo.xml")
Responder

Gostei + 0

31/08/2009

Euclides Filizola

Meu arquivo persistence.xml está dentro de SRC\META-INF. Não entendi a tua chamada, pois eu chamo o persistence, através de um entityManagerFactory.

emf = Persistence.createEntityManagerFactory("bancoLocal");

é assim que chamo.
Responder

Gostei + 0

01/09/2009

Euclides Filizola

e ae , nada ?
Responder

Gostei + 0

01/09/2009

Dyego Carmo

Olá !

Tudo bem ?


Procure em todo o seu codigo fonte o nome "conexao" e cole aqui os trechos que esta utilizando ele por favor...

Ou zipe seu codigo fonte e envie para que eu consiga dar uma olhada :)
Responder

Gostei + 0

01/09/2009

Euclides Filizola

Olá Dyego, agradeço a atenção. Mas já resolvi meu problema por si só. Era apenas as bibliotecas do hibernate, que estavam em versões de incompatibilidades, ou seja, de acordo com aquela tabela que possui no site hibernate.org. Assim sendo, retirei todas as libs, e fui colocando uma por uma. E então aqui ficaram as libs que estou utilizando:

antlr-2.7.6
c3p0-0.9.1
cglib-2.2
common-annotations
commons-beanutils
commons-collections-3.1
commons-digester
commons-logging
dom4j-1.6.1
ejb3-persistence
hibernate3
hibernate-annotations
hibernate-commons-annotations
hibernate-entitymanager
hibernate-validator
javassist-3.9.0.GA
jsf-facelets
jsf-tlds
jstl
jta-1.1
log4j
postgresql-8.3dev-601.jdbc4
slf4j-api-1.5.8
slf4j-log4j12
standard

Agradeço a atenção

Abraços.
Responder

Gostei + 0

01/09/2009

Dyego Carmo

OK ,

Estou marcando este chamado como concluído.

Qualquer coisa me avise !

Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar