[Resolvido] UnsatisfiedDependencyException no vRaptor ao tentar criar um novo cadastro

Galera, estou com a seguinte dificuldade:

Na tela de Login(IndexController) tem um “cadastre-se”(EmpresaController), nele era para abrir um form de cadastro para que o usuário possa entrar no sistema

no meu controller eu tenho

    @Get("/empresa/criarEmpresa")
    public void novo(Empresa entity) {
        result
                .include("perfilList", PerfilType.values())
                .include("entity", entity);
    }

que é o responsável por abrir a pagina… porem recebo o erro no log do tomcat:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'empresaBusiness': Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.persistence.EntityManager]: : No matching bean of type [javax.persistence.EntityManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.persistence.EntityManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

O erro é bem simples… o vraptor não conseguir criar esse controller provavelmente tem uma dependência chamada “empresaBusiness” e ela depende da sua EntityManager…

vc pode utilizar a integração com vraptor + JPA (http://vraptor.caelum.com.br/pt/docs/componentes-utilitarios-opcionais/)

EmpresaBusiness esta gerenciada pelo vRaptor:

@Component
public class EmpresaBusiness extends GenericBusiness<Empresa> implements EmpresaRepository {
    
    public EmpresaBusiness(EntityManager manager) {
        super(manager);
    }

Dessa forma.

Exato, mas ele não gerencia o EntityManager.

É aí que ele dá o erro… ele precisa que alguém forneça essa entityManager

vc pode fazer como mosstrado nesse post(http://wbotelhos.com/2010/02/23/jpa-e-vraptor-3)

ou tb pode fazer com que o vraptor injete uma pra vc…
dah uma olhada na documentação.

mas se vc tiver utilizando o vraptor antes da versão 3.5 vc pode add isso no seu web.xml

<context-param>  
        <param-name>br.com.caelum.vraptor.packages</param-name>  
        <param-value>br.com.caelum.vraptor.util.jpa</param-value>  
</context-param>  

<context-param>  
        <param-name>br.com.caelum.vraptor.provider</param-name>  
        <param-value>br.com.caelum.vraptor.util.jpa.JPACustomProvider</param-value>  
</context-param> 

Segui o post do wbotelhos, adicionei o

	<context-param>
	    <param-name>br.com.caelum.vraptor.packages</param-name>
	    <param-value>br.com.caelum.vraptor.util.jpa</param-value>
	</context-param>

no web.xml

até onde entendi, para que as entidades sejam injetadas basta esse parametro no vRaptor sem a necessidade de criar um CustomProvider, porem na minha aplicação continua o mesmo erro.

Estou usando o VRaptor 3.5.1

Como vc está utilizando o vraptor 3.5 vc só precisa add essa dependência: (caso esteja utilizando o maven, se não, add o vraptor-jpa-1.0.0.jar na pasta lib)

<dependency>
        <groupId>br.com.caelum.vraptor</groupId>
        <artifactId>vraptor-jpa</artifactId>
        <version>1.0.0</version>
    </dependency>

Seu objeto vai continuar da msm forma.

@Component  
public class EmpresaBusiness extends GenericBusiness<Empresa> implements EmpresaRepository {  
      
    public EmpresaBusiness(EntityManager manager) {  
        super(manager);  
    }
}

testa aí! abrass

Ao adicionar a dependência ele mostra no log:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactoryCreator': Invocation of init method failed; nested exception is javax.persistence.PersistenceException: No Persistence provider for EntityManager named default

Preciso adicionar alguma anotação a mais nessa nova versão ?

qual versão do hibernate vc está usando?

provavelmente está faltando alguma lib…

como está o seu pom.xml?

hibernate-core-3.6.6.Final.jar

esse é o que veio junto na pasta lib do vRaptor.
tenho um persistence.xml no src/META-INF

as libs do hibernate que tenho aqui são:
hibernate-commons-annotations-3.2.0.Final.jar
hibernate-core-3.6.6.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-validator-5.0.0.Final.jar

Não estou usando Maven…

Realmente… Faltava uma lib
a hibernate-entitymanager.jar

Obrigado pela atenção… :slight_smile: