[Java para Web com JSF e JPA] java.lang.NullPointerException

Olá amigos.

E a sucessão de erros continua… Parece que estou amaldiçoado… kkk… Bem, o que está aparecendo agora após a compilação do projeto é o famoso java.lang.NullPointerException. O assunto é abordado na página 53 do livro, e sei que é causado por uma referência a um atributo ou objeto que não existe. Segui as recomendações do livro, e nada. Ao verificar o Stack Trace, o erro é causado no arquivo JPAUtil.java (linha 33: em = JPAUtil.factory.createEntityManager();), e no arquivo LivroBean.java (linha 37: EntityManager em = JPAUtil.getEntityManager();).

Acabaram-se as minhas ideias… Mais uma vez preciso da ajuda de vocês… :slight_smile:

O projeto está no GitHub: https://github.com/fredjr10/livraria-espirita

Obrigado pela ajuda e pela paciência!

Abraços.

O seu projeto tem dois arquivos de configuração para o hibernate que é o hibernate.cfg.xml e o persistence.xml. Acho que isso pode estar dando conflito. Acho que por padrão ele está pegando o arquivo hibernate.cfg.xml para configurações do banco, por isso ele está dando nullpoint, pois não encontra “biblioteca” de
Persistence.createEntityManagerFactory(“biblioteca”);

Olá Gracyane.

Eliminei o arquivo hibernate.cfg.xml e mantive o padrão do livros, que é o persistence.xml. Não funcionou. O erro continua ocorrendo. :disappointed_relieved:

Eu utilizo o Eclipse em meus projetos. Na hierarquia de pacotes eu coloco o arquivo persistence.xml no seguinte caminho:

src/main/resources/META-INF/persistence.xml

Até onde eu sei esse é o local padrão deste arquivo. É preciso criar o diretório META-INF dentro de resources e dentro de META-INF vai o persistence.xml

Vi o seu projeto no github e o arquivo persistence.xml está em um diretório diferente do padrão usado e que costumo utilizar em meus projetos.

Eu uso o NetBeans, atualmente na versão 8.1. Por padrão ele cria os arquivos de configuração na estrutura de projeto como foi postado no GitHub. Mesmo assim fiz as alterações sugeridas, e as mesmas não surtiram o efeito desejado.

vc ja olho no conteúdo do seu war se o persistence.xml esta na dentro da pasta META-INF

  • webapp/classes/META-INF/persistence.xml

Olà Danilo.

O arquivo está na pasta certa, conforme você mencionou.

Olá @fred_jr10, eu olhei o seu projeto no Github, e acho que identifiquei seu problema. No persistence.xml, está faltando as informações para realizar a conexão com o banco, como a url do banco de dados, usuario e senha para autentificação. Pois os arquivos persistence.xml e o hibernate.cfg.xml apesar de serem utilizados para a mesma função, são arquivos diferentes que não se complementam, é tanto que na classe JPAUtil, você chama o persistence.xml .

Adicione as linhas de código:

    <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
      <property name="javax.persistence.jdbc.url"  value="jdbc:mysql://localhost:3306/biblioteca" />
      <property name="javax.persistence.jdbc.user"  value="SeuUsuario" />
      <property name="javax.persistence.jdbc.password"  value="SuaSenha" />

Testa e me informa se deu certo.

Olá Raniere.

Fiz as alterações, mas o erro continua. O( stack trace informa que o problema está em Biblioteca.JPAUtil.getEntityManager(JPAUtil.java:33) e em Biblioteca.LivroBean.salva(LivroBean.java:37), mas não percebi o que pode estar errado.