Solucionado (ver solução)
Solucionado
(ver solução)
18
respostas

No Persistence provider for EntityManager named livraria

Boa tarde. Já pesquisei no fórum as diversas soluções sugeridas, no stackoverflow, porém o erro permanece na hora de "rodar" a classe PopulaBanco. Já tentei: -> trocar o jar pra versão 8 do sql; -> verificar no Java Build Path no aba Source, se está exclude(None); -> trocar ejb por jpa no persistence.xml; -> verificar se o persistence.xml está dentro do src; -> conferir os jars na WEB-INF/lib.

Alguma sugestão?

obs: Vocês podiam facilitar atualizando o projeto, haja vista que várias pessoas estão tendo o mesmo problema. A gente perde muito tempo tentando solucionar esses problemas.

18 respostas

Olá, Flavio! Tudo bem contigo?

Realmente esse projeto está desatualizado e causa um certo desgaste para ajustar e seguir adiante.

Nós já estamos em cima de toda a Formação Java EE para trazer algumas novidades em breve.

Para que possa seguir com os estudos tomei a liberdade de refazer a estrutura do projeto em Maven e tirei a responsabilidade de anexar arquivos no projeto para trabalhar as dependências somente no pom.xml.

Basta clicar nesse link que começará o download do projeto inicial da aula 03 direto do meu github

Lá também possui os projetos iniciais da Aula 02 e Aula 04

Espero ter ajudado, Flávio!

Um abraço e bons estudos!!!

Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer.

Alterei o compilador e o plugin, mas não alterou em nada. O erro permanece.To usando jdk 8.

  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

Esse erro acima é da pom. Quando rodo o java, recebo no console: Caused by: java.sql.SQLException: Access denied for user 'SEU_USUARIO'@'localhost' (using password: YES) Caused by: org.hibernate.exception.GenericJDBCException: Error calling Driver#connectCaused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Precisa fazer alguma alteração no persistence.xml?

Precisa sim, Flávio!!!

Este erro diz que precisa colocar seu usuário e senha dentro do persistence.xml

            <property name="javax.persistence.jdbc.user" value="SEU_USUARIO" />
            <property name="javax.persistence.jdbc.password" value="SUA_SENHA" />

Feito isso, teremos sucesso

Me dê um retorno!!!

Fico no aguardo!

Um abraço

Não sei qual foi o usuário e senha definida por default. Na tentativa de ajustar dei alguns comandos que vi no stackoverflow e cheguei a isso: Access denied for user 'root'@'localhost' (using password: YES) -> na IDE

No Ubuntu: Access denied for user 'root'@'localhost' (using password: NO)

To tentando seguir uns scripts aqui mas não estou tendo sucesso.

É lamentável. A gente passa a maior parte do tempo nesse curso tentando resolver problemas e conteudo que é o mais importante, nada. Fiz 10 cursos com vocês e no máximo acabava em 2 dias. Esse já vai pra duas semanas. E o pior de tudo, preciso aplicar no meu trabalho. Confesso que to bem desanimado.

Flávio, qual banco de dados você está usando?

Mysql 8

Bacana, Flávio!

Primeiro vamos tentar sem precisar desinstalar e reinstalar o MySQL, tudo bem?

No Ubuntu acaba sendo mais fácil o processo.

Execute os seguintes comandos

sudo service mysql stop
sudo mysqld_safe --skip-grant-tables --skip-syslog --skip-networking

Feche o terminal e abra novamente

mysql -u root

Agora vamos alterar a senha, pois não há como resgatar a atual. No lugar de password dentro dos parênteses coloque sua nova senha entre as aspas simples

UPDATE mysql.user SET authentication_string=PASSWORD('password') WHERE User='root';
FLUSH PRIVILEGES;

Depois segue com os comandos abaixo

mysqladmin shutdown

As vezes esse comando acima funciona conforme abaixo com a nova senha

mysqladmin -u root -p shutdown
sudo service mysql start

Feito esses passos, feche o terminal e abra novamente e digite

sudo mysql -u root -p

e digite a senha que criou

Se não deu certo, vamos reinstala-lo

Primeiro vamos limpar tudo que há de MySQL do seu sistema. Se tiver algum arquivo de banco de dados, aconselho salvar em algum outro lugar

Bóra lá:

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo apt-get remove mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Agora não temos nada de MySQL no seu sistema. Vamos instalar!!

Siga os passos:

Baixar o MySQL

wget -c https://repo.mysql.com//mysql-apt-config_0.8.14-1_all.deb

Instalação do pacote

sudo dpkg -i mysql-apt-config_0.8.14-1_all.deb

Vai pedir sua senha de usuário do linux

Abrirá um menu e basta selecionar OK e depois mostrará qual será configurado e basta ir com as "setinhas" do teclado até OK e dar Enter. Se não abrir é porque já foi automático. Já aconteceu algumas vezes comigo

Seguindo, vamos atualizar

sudo apt update
sudo apt install mysql-server

Agora ele abrirá uma tela para configurar uma senha de root (a famosa rs). Digite ela e depois confirme novamente

Depois aparecerá algo falando sobre o MySQL. Dê um OK

Use a recomendação de senha forte. Tab e OK

Pronto! Já temos o server instalado

Só para garantir segurança, faça os comandos abaixo

sudo mysql_secure_installation

Virá uma sequencia de perguntas:

  1. Componente de validação de senha. Não precisamos e basta dar Enter
  2. Se queremos trocar a senha que inserimos. Não precisamos e Enter novamente
  3. Se queremos remover usuários anônimos - Sim!!! Digite Y e Enter
  4. Se queremos desabilitar o root remoto - Sim!!! Digite Y e Enter
  5. Quer eliminar o banco de teste? Sim!!! Digite Y e Enter
  6. Recarregar o privilegio das tabelas de acesso? Sim!!! Digite Y e Enter

Zerou!!!

Vamos confirmar o status do serviço

sudo systemctl status mysql

Deve aparecer active (running).

Digite letra q para sair e tudo certo

Se não estiver rodando, rode start no lugar de status

sudo systemctl start mysql

Agora a cereja do bolo. Para que o servidor suba assim que seu sistema inicie, digite

sudo systemctl enable mysql

Fechamos

Digite

sudo mysql -u root -p

e sua senha para iniciar o MySQL

Se deu tudo certo, não esqueça de alterar sua senha no xml e bons estudos

Fico no aguardo para saber se deu tudo certo, Flávio!

Um abraço

Após o segundo comando:

2021-06-15T18:06:52.546042Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2021-06-15T18:06:52.547475Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

Tentei: mkdir -p /var/run/mysqld Recebi: mkdir: cannot create directory ‘/var/run/mysqld’: Permission denied Tentei outros caminhos aqui, mas nada.

Como seria a configuração se utilizasse o postgres? Queira tentar outro bd.

Flávio, vamos tentar partir para reinstalá-lo esse MySQL?

De todos, ele e o Maria são os mais simples de se trabalhar, pelo menos para projetos mais simples

Vamos tentar a partir do comando sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* e siga a sequencia.

Se mesmo asism na der certo, tentaremos outro banco!

Fico no aguardo, meu amigo!

ok. Foi. O que faço na sequência?

Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

Bacana que deu certo, Flavio!

Agora é alterar o usuário e senha no persistence.xml

Acredito que seu usuário seja root e a senha é a que inseriu na configuração.

Outro ponto é como nomeou o banco de dados, como o exemplo abaixo. Neste caso seria livrariadb

<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/livrariadb" />

Aguardo, retorno, Flávio

cara, eu não inseri senha alguma e não configurei nada no bd.

O erro sumiu, mas agora deu problema na conexão: Caused by: java.net.ConnectException: Connection refused The driver has not received any packets from the server. Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

To usando tomcat 9 na porta 8081. Tá sincronizado com o projeto, mas parece não tá ouvindo.

Problema no driver?

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0">

    <persistence-unit name="livraria" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <class>br.com.alura.livraria.modelo.Livro</class>
        <class>br.com.alura.livraria.modelo.Autor</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="password" />

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

Flávio, consegue subir o projeto p/ GitHub e me passar o link?

Assim consigo clonar e rodar aqui na minha máquina

Já coloquei o Java 8 (1.8) e já modifiquei o percistence.xml conforme outro tópico mas nada resolveu

Exception in thread "main" java.lang.ExceptionInInitializerError
    at br.com.caelum.livraria.dao.PopulaBanco.main(PopulaBanco.java:17)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: livraria] Unable to build EntityManagerFactory
solução!

Esta é a conf do persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="livraria" transaction-type="RESOURCE_LOCAL">

           <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>br.com.caelum.livraria.modelo.Livro</class>
        <class>br.com.caelum.livraria.modelo.Autor</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://172.17.0.2/livrariadb" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="123456" />

            <property name="hibernate.hbm2ddl.auto" value="update" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
        </properties>
    </persistence-unit>

</persistence>