Vraptor 3 + JPA

Boa Noite,

Alguém poderia me ajudar com esse erro???

DAO generico

public class DAO<T> {

	private final Class<T> classe;
	private final EntityManager em;

	public DAO(EntityManager em, Class<T> classe) {
		this.em = em;
		this.classe = classe;
	}
	
	public void adiciona(T t) {
		this.em.persist(t);
	}
	
	public void remove(T t) {
		this.em.remove(t);
	}
	
	public T busca(Integer id) {
		return this.em.find(classe,id);
	}
	
	@SuppressWarnings("unchecked")
	public List<T> lista(){
		return this.em.createQuery("from "+classe.getName()).getResultList();
	}

Meu AlunoDAO

@Component
public class AlunoDAO{
	
	private final DAO<Aluno> dao;
	
	public AlunoDAO(EntityManager em){
		dao = new DAO<Aluno>(em,Aluno.class);
	}
	
	public Aluno busca(Integer id) {
		return dao.busca(id);
	}
	
	public List<Aluno> lista() {
		return dao.lista();
	}	
}

e Minha classe RematriculaController

@Resource
public class RematriculaController {
	
	private final Result result;
	private AlunoDAO dao;
	private Aluno aluno;
	//private List<Aluno> lista;
	
	public RematriculaController(AlunoDAO dao, Result result){
		this.dao = dao;
		this.result = result;
	}

	@Get
	@Path("/login")
	public void login(){}
	
	@Post
	@Path("/login")
	public void efetuaLogin(){
		EntityManager em = new JPAUtil().getEntityManager();
		em.getTransaction().begin();
		
		dao = new AlunoDAO(em);
		Aluno buscaAluno = dao.busca(this.aluno.getId());
		
		if(buscaAluno.equals("")){
			System.out.println("nao acho");
		}else{
			System.out.println("OK");
		}

		em.close();
		result.redirectTo(this).login();
	}
}

Desde já muito obrigado.

vc usou o @Component do VRaptor?

o AlunoDAO está dentro de um jar?

usei sim…logo depois do post eu lembrei e coloquei nele e no DAO genérico. Mas o erro continua…

Não estão em um jar, estão como .java mesmo dentro do projeto

no log acusa algum outro erro? algo referente ao EntityManager?

Sim, Esse é o erro que dá no log

então o erro de verdade é que não tem ninguém criando o EntityManager…

coloque 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>

Lucas,

Coloquei essas linhas no meu web.xml e deu o seguinte erro ao iniciar o servidor. Esse br.com.caelum…é esse mesmo ou deve ser o caminho do meu EntityManager?

segue meu web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>speech</display-name>
	
	<context-param>  
        <param-name>br.com.caelum.vraptor.packages</param-name>  
        <param-value>br.com.caelum.vraptor.util.jpa</param-value>  
    </context-param>  
	<!--
		VRaptor will scan classpath for all @Component and 
		@Resource inside WEB-INF/classes

		If you want to load them also from WEB-INF/lib/ jars, 
		you need to specify from which packages they will
		be loaded, comma separated:
	-->
	
	<!-- 
	<context-param>
        	<param-name>br.com.caelum.vraptor.packages</param-name>
	        <param-value>br.com.caelum.vraptor.blank</param-value>
    </context-param>
     -->
    
	<!--  
	   if you are using a servlet 3.0 container 
		as glassfish 3 or jetty 8, you dont need this
		filter configuration 
	-->
		
	<!-- <context-param>
        	<param-name>br.com.caelum.vraptor.provider</param-name>
	        <param-value>br.com.caelum.vraptor.ioc.guice.GuiceProvider</param-value>
    </context-param>-->
		
	<filter>
		<filter-name>vraptor</filter-name>
		<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>vraptor</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>REQUEST</dispatcher>
	</filter-mapping>
</web-app>

obrigado

vc tem um persistence.xml no META-INF? a persistence-unit se chama default?

tenho sim!

<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="rematricula">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>br.com.explorenet.speech.modelo.Aluno</class>
		<class>br.com.explorenet.speech.modelo.Cidade</class>
		
		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
			<!-- poderia ser: create,create-drop -->
<!--			<property name="hibernate.hbm2ddl.auto" value="update"/>-->
			<property name="hibernate.show_sql" value="true"/>
			<property name="hibernate.format_sql" value="true"/>
			
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/speech"/>
			<property name="javax.persistence.jdbc.user" value="root"/>
			<property name="javax.persistence.jdbc.password" value=""/>
		</properties>
	</persistence-unit>

</persistence>

Lucas,

Eu achei que essas duas linhas deveriam ter o mesmo nome

Persistence.createEntityManagerFactory(“default”);

Antes tava “rematricula” nas duas. Por que tem que usar default?

Mas deu certo

Muito obrigado Lucas!
vlw mesmo

pq o componente padrão do VRaptor usa default…

Entendi!

Obrigado mais uma vez Lucas

Abração

Lucas,

Aproveitando o post. Estou utilizando o vraptor com hibernate para gerenciar minhas transações e quando rodo no Tomcat 7 tudo funciona, porém quando rodo no Jboss 6.1 Final ocorre o seguinte erro:

[quote]13:49:18,321 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/sicg].[default]] Servlet.service() for servlet default threw exception: org.springfra
mework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘naturezaController’: Unsatisfied dependency expressed through constructor argument wit
h index 1 of type [br.com.egl.sicg.negocio.dao.NaturezaDAO]: : Error creating bean with name ‘naturezaDAOImpl’: Unsatisfied dependency expressed through constructor argum
ent with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as aut
owire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of
type [org.hibernate.Session] 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.UnsatisfiedDependencyException: Error creating bean with name ‘naturezaDAOImpl’: Unsatisfied dependency expressed through c
onstructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] 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 m
atching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotati
ons: {}[/quote]

Meu web.xml

<context-param> <param-name>br.com.caelum.vraptor.packages</param-name> <param-value>br.com.caelum.vraptor.util.hibernate,br.com.bronx.vraptor.saci</param-value> </context-param> <context-param> <param-name>br.com.caelum.vraptor.encoding</param-name> <param-value>UTF-8</param-value> </context-param>

Meu DAO

@Component public class NaturezaDAOImpl extends GenericDAO<Natureza, Long> implements NaturezaDAO { NaturezaDAOImpl(Session session) { super(session); }

Se puder me ajudar agradeço!!!

o jboss tem um problema com scannings, vc tá com o vraptor mais atual? 3.4.1?

Estou com a versão 3.4.0

quando você sobe o servidor aparece algum erro ou warning do vraptor (precisa habilitar o log)?

Lucas,

Ativei o debug e a aplicação é “deployada” normalmente. Porém quando tento acessar qualquer DAO ocorre o erro. Segue ele completo

[quote]15:38:11,149 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/sicg].[default]] Servlet.service() for servlet default threw exception: org.springfra
mework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘naturezaController’: Unsatisfied dependency expressed through constructor argument wit
h index 1 of type [br.com.egl.sicg.negocio.dao.NaturezaDAO]: : Error creating bean with name ‘naturezaDAOImpl’: Unsatisfied dependency expressed through constructor argum
ent with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as aut
owire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of
type [org.hibernate.Session] 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.UnsatisfiedDependencyException: Error creating bean with name ‘naturezaDAOImpl’: Unsatisfied dependency expressed through c
onstructor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] 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 m
atching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotati
ons: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003) [:3.0.5.RELEASE]

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329) [:3.0.5.RELEASE]
    at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:263) [:3.0.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083) [:3.0.5.RELEASE]
    at br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:86) [:]
    at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:46) [:]
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) [:]
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) [:]
    at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69) [:]
    at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) [:]
    at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) [:]
    at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44) [:]
    at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) [:]
    at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58) [:]
    at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89) [:]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:274) [:6.1.0.Final]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.1.0.Final]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [:6.1.0.Final]
    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.1.0.Final]
    at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
    at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.1.0.Final]
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.1.0.Final]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159) [:6.1.0.Final]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
    at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
    at java.lang.Thread.run(Thread.java:619) [:1.6.0_06]

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘naturezaDAOImpl’: Unsatisfied dependency expressed through con
structor argument with index 0 of type [org.hibernate.Session]: : No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qu
alifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No mat
ching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotation
s: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003) [:3.0.5.RELEASE]

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329) [:3.0.5.RELEASE]
    at org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795) [:3.0.5.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723) [:3.0.5.RELEASE]
    ... 41 more

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.Session] found for dependency: expected at least 1 bea
n which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795) [:3.0.5.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723) [:3.0.5.RELEASE]
… 55 more[/quote]

O vraptor não ta injetando o org.hibernate.Session no construtor do meu DAO

Eu entendi que ele não tá injetando… mas se você registrou o pacote do hibernate no web.xml, pode ser que o JBoss não esteja conseguindo escanear o jar,
e quando isso acontece ele dá uma mensagem na inicialização do servidor… dá uma olhada nisso, plz?

Lucas,

Quando aitvei o debug do vraptor verifiquei o arquivo de log e existiam alguns erros relacionados a transação. Dai retirei todos os jar’s do hibernate, jta.jar e validantion-api.jar para que a aplicação utilizasse as lib’s do próprio JBOSS. Com isso, o servidor inicia sem nenhum problema, e o erro só aparece quando tento acessar a aplicação