21
respostas

[Dúvida] Error creating bean with name 'criadorDeProdutos'

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'criadorDeProdutos': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

Estou com esse erro ao tentar subir o servidor tomcat, alguém pode me ajudar?

21 respostas

Consegue mandar o codigo que esta gerando o erro ?

Provavelmente é algum bean que faltou vc injetar

Boa noite Renato.

Por favor, verifique se tópico abaixo pode ajudar:

https://cursos.alura.com.br/forum/topico-nao-executa-o-criadordeproduto-79059

Bons estudos!

package br.com.caelum;

import javax.annotation.PostConstruct; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.stereotype.Component; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate;

import br.com.caelum.model.Categoria; import br.com.caelum.model.Loja; import br.com.caelum.model.Produto;

@Component public class CriadorDeProdutos {

@PersistenceContext
private EntityManager em;

@Autowired
private JpaTransactionManager transactionManager;

@PostConstruct
public void init() {
    TransactionTemplate template = new TransactionTemplate(
            transactionManager);
    template.execute(new TransactionCallbackWithoutResult() {
        @Override
        protected void doInTransactionWithoutResult(TransactionStatus status) {

            Loja casaDoCodigo = new Loja();
            casaDoCodigo.setNome("Casa do Código");

            em.persist(casaDoCodigo);

            Loja musicalAlegre = new Loja();
            musicalAlegre.setNome("Musical Alegre");

            em.persist(musicalAlegre);

            Categoria tecnologia = new Categoria("Tecnologia");
            em.persist(tecnologia);

            Categoria musica = new Categoria("Música");
            em.persist(musica);

            Produto cursoDeViolao = new Produto();
            cursoDeViolao.setNome("Curso de Violão");
            cursoDeViolao.setLoja(musicalAlegre);
            cursoDeViolao.setPreco(49.0);
            cursoDeViolao
                    .setDescricao("Estude com os melhores professores e aprenda no seu ritmo, sem sair de casa.");
            cursoDeViolao.adicionarCategorias(tecnologia, musica);
            cursoDeViolao
                    .setLinkDaFoto("https://pbs.twimg.com/profile_images/378800000825434860/12136ee913ed4f44860914d44650144e.png");

            em.persist(cursoDeViolao);

            Produto livroDeArquitetura = new Produto();
            livroDeArquitetura
                    .setNome("Introduçao a Arquitetura Java e Design de projetos com Java");
            livroDeArquitetura.setLoja(casaDoCodigo);
            livroDeArquitetura.setPreco(30.0);
            livroDeArquitetura.adicionarCategorias(tecnologia);
            livroDeArquitetura
                    .setDescricao("Neste livro, os autores, conhecidos especialistas da "
                            + " área, apresentam muitos tópicos que aparecem com frequência"
                            + " na plataforma Java, incluindo desde modelagem e design das "
                            + "classes, até detalhes importantes das tecnologias mais utilizadas."
                            + "  Sempre com uma visão técnica e prática capaz de elucidar muitas "
                            + "questões enfrentadas tanto pelo profissional iniciante quanto por "
                            + "aquele que está adquirindo mais experiência na plataforma.");

            livroDeArquitetura
                    .setLinkDaFoto("http://www.arquiteturajava.com.br/img/capa-livro.png");

            em.persist(livroDeArquitetura);

            Produto livroDeSpring = new Produto();
            livroDeSpring.setNome("Vire o jogo com Spring Framework");
            livroDeSpring.setLoja(casaDoCodigo);
            livroDeSpring.setPreco(30.0);
            livroDeSpring.adicionarCategorias(tecnologia);
            livroDeSpring
                    .setDescricao("Criado para simplificar o desenvolvimento de aplicações Java, "
                            + "o Spring se tornou um dos frameworks de mais destaque dentro desse grande ambiente.  "
                            + "Aprenda muito mais que o básico do Spring, desde o tradicional Container de Inversão "
                            + "de Controle e Injeção de Dependências, passando pelos robustos módulos de segurança, "
                            + "transações, programação orientada a aspectos e também o fantástico módulo MVC, o SpringMVC.");

            livroDeSpring
                    .setLinkDaFoto("http://cdn.shopify.com/s/files/1/0155/7645/products/spring-framework-featured_large.png?v=1411567960");

            em.persist(livroDeSpring);

            Produto violao = new Produto();
            violao.setNome("Violão");
            violao.setLoja(musicalAlegre);
            violao.setDescricao("Excelente violão");
            violao.setPreco(500.0);
            violao.adicionarCategorias(musica);
            violao.setLinkDaFoto("http://www.marillac.g12.br/imgs/atividade%20complementar/violao.jpg");

            em.persist(violao);

            Produto flauta = new Produto();
            flauta.setNome("Flauta Doce");
            flauta.setLoja(musicalAlegre);
            flauta.setDescricao("Flauta doce");
            flauta.setPreco(300.0);
            flauta.adicionarCategorias(musica);
            flauta.setLinkDaFoto("http://i.mlcdn.com.br/1500x1500/flauta-doce-germanicayamaha-yrs-23g-204013000.jpg");

            em.persist(flauta);

        }
    });
}

}

Renato.

Envie seu projeto, a versão do java que está utilizando e também a versão do Tomcat para podermos analisar.

Bons estudos!!

versao do java

versao do tomcat

Segue o link do projeto

https://drive.google.com/drive/folders/1z3y6acatweeNht5XlXwSqx8r9UavKQzl?usp=share_link

Bom dia Renato.

O Link do projeto está com a pasta em branco. Poderia confirmar?

Bom dia Renato.

Verifique se sua classe JpaConfigurator.java possui o método LocalContainerEntityManagerFactoryBean anotado com @Bean conforme exemplo abaixo. Eu consegui reproduzir seu cenário comentando o @Bean desse método.

Arquivo: JpaConfigurator.java

//código omitido

    @Bean
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory(
            DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactory.setPackagesToScan("br.com.caelum");
        entityManagerFactory.setDataSource(dataSource);


//código omitido

Bons estudos!

Eu tirei a annotation @bean do metodo LocalContainerEntityManagerFactoryBean e ainda continua dando esses erros.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'criadorDeProdutos': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available

Oi.

Como seu código agora apareceu lá na pasta, consegui executar localmente. No entanto, não foi possível reproduzir o mesmo cenário que o seu. Talvez seja alguma sujeira de cache no Tomcat ou algo assim, por favor, execute o clean conforme print abaixo. Faça tanto "clean" quanto "clean Tomcat working directory"

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fiz tanto "clean" quanto o "clean Tomcat working directory", subi o servidor tomcat e ainda está com o mesmo erro, tentei remover o servidor e suas configurações e adicionar novamente e mesmo assim nao resolveu o problema, qual a versão do mysql está sendo usada nesse curso?

Renato.

Realizei o teste aqui com MySQL 8, tanto com seu código quanto o original do curso.

Me manda todo o código da classe JpaConfigurator

Segue

package br.com.caelum;

import java.beans.PropertyVetoException;
import java.util.Properties;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

@Configuration
@EnableTransactionManagement
public class JpaConfigurator {

    @Bean
    public DataSource getDataSource() throws PropertyVetoException {

        ComboPooledDataSource dataSource = new ComboPooledDataSource();

        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        dataSource.setJdbcUrl("jdbc:mysql://localhost/projeto_jpa");

        dataSource.setMinPoolSize(3);
        dataSource.setMaxPoolSize(5);

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean getEntityManagerFactory(
            DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

        entityManagerFactory.setPackagesToScan("br.com.caelum");
        entityManagerFactory.setDataSource(dataSource);

        entityManagerFactory
                .setJpaVendorAdapter(new HibernateJpaVendorAdapter());

        Properties props = new Properties();

        props.setProperty("hibernate.dialect",
                "org.hibernate.dialect.MySQL5InnoDBDialect");
        props.setProperty("hibernate.show_sql", "true");
        props.setProperty("hibernate.hbm2ddl.auto", "create-drop");

        entityManagerFactory.setJpaProperties(props);
        return entityManagerFactory;
    }

    @Bean
    public JpaTransactionManager getTransactionManager(EntityManagerFactory emf) {
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(emf);

        return transactionManager;
    }

}

o codigo da classe JpaConfigurator está igual e ainda está dando o mesmo erro, manda o código da classe CriadorDeProdutos

Boa noite Renato.

Este é o projeto inteiro do início do capítulo 6: https://s3.amazonaws.com/caelum-online-public/jpa-avancado/stages/capitulo-6.zip

importei esse projeto no eclipse e subi o servidor tomcat e está dando esses erros

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getEntityManagerFactory' defined in class path resource [br/com/caelum/JpaConfigurator.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

Caused by: org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution

Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!

Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.

Renato

Neste caso precisa subir o banco de dados pois parece que não conseguiu estabelecer conexão. Caso esteja no ar, por favor verifique essa thread: https://cursos.alura.com.br/forum/topico-error-creating-bean-with-name-getentitymanagerfactory-111200

apliquei as alterações sugeridas pelo colega nessa thread e está dando esse erro agora

GRAVE: Parse error in application web.xml file at [file:/C:/Users/renat/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/projeto-jpa-2/WEB-INF/web.xml] org.xml.sax.SAXParseException; systemId: file:/C:/Users/renat/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/projeto-jpa-2/WEB-INF/web.xml; lineNumber: 4; columnNumber: 59; As estruturas do documento XML devem começar e terminar com a mesma entidade.

segue o meu arquivo web.xml

Servlet 3.0 Web Application