Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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>