[Ajuda] - Configurar VRaptor 3 + Spring + Hibernate

Olá pessoal, estou seguindo a apostila FJ-28, e cheguei na parte de configurar a integração com o Spring, mas está dando um erro…

Criei o arquivo applicationContext.xml com o conteudo que estava na apostila…

Não estou conseguindo identificar qual é esse erro… será que está faltando algum JAR ??
Alguem já passou por este problema?? e poderia me dar uma luz ?

Obrigado

Att.
Leonardo Lima

arquivo applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
	<tx:annotation-driven />
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:/hibernate.cfg.xml</value>
		</property>
	</bean>
</beans>

ERRO:

11:03:23,580  INFO [XmlBeanDefinitionReader] Loading XML bean definitions from class path resource [applicationContext.xml]
16/01/2010 11:03:24 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter vraptor
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/tx]
Offending resource: class path resource [applicationContext.xml]

	at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
	at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
	at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:284)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1332)
	at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1325)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:136)
	at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:93)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:126)
	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:92)
	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130)
	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
	at br.com.caelum.vraptor.ioc.spring.DefaultSpringLocator.getApplicationContext(DefaultSpringLocator.java:41)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.getParentApplicationContext(SpringProvider.java:96)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:73)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:107)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:100)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275)
	at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3800)
	at org.apache.catalina.core.StandardContext.start(StandardContext.java:4450)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
	at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
	at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
	at org.apache.catalina.core.StandardService.start(StandardService.java:516)
	at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:583)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
16/01/2010 11:03:24 org.apache.catalina.core.StandardContext start
SEVERE: Error filterStart

Eu estava relendo a apostila e achei que escrito para remover a notação @Component da classe responsável por criar as Sessions, mas já o fiz e não mudou nada…
Segue abaixo a minha classe…

package br.eventos.util;

import java.lang.reflect.Method;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import net.vidageek.mirror.dsl.Mirror;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.SessionFactoryUtils;

import br.com.caelum.vraptor.ioc.ApplicationScoped;
import br.com.caelum.vraptor.ioc.ComponentFactory;
import br.com.caelum.vraptor.proxy.MethodInvocation;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.proxy.SuperMethod;

@ApplicationScoped
public class HibernateSessionFactory implements ComponentFactory<Session> {

	private final SessionFactory factory;
	private final Proxifier proxifier;
	private Session session;

	public HibernateSessionFactory(SessionFactory factory, Proxifier proxifier) {
		this.factory = factory;
		this.proxifier = proxifier;
	}

	@Override
	public Session getInstance() {
		return this.session;
	}

	@PostConstruct
	public void openSession() {
		// this.session = factory.openSession();
		this.session = proxifier.proxify(Session.class,
				new MethodInvocation<Session>() {
					public Object intercept(Session proxy, Method method,
							Object[] args, SuperMethod superMethod) {
						Session sessionDoSpring = SessionFactoryUtils
								.doGetSession(factory, true);
						return new Mirror().on(sessionDoSpring).invoke()
								.method(method).withArgs(args);
					}
				});
	}

	@PreDestroy
	public void closeSession() {
		this.session.close();
	}
}

faça o download do spring 3.0 http://www.springsource.org/download e adicione o jar do módulo transaction na sua aplicação…

o VRaptor só vem com os módulos do spring necessários pra ele rodar, como vc tah usando um módulo extra, vc precisa adicionar o jar

rsrs Lucas cê é phoda!!!
era isto mesmo rsrs
então só para comentar pela apostila não comenta nada que tem de adicionar estes Jar´s e na verdade tive de adicionar os seguintes
org.springframework.orm-3.0.0.RELEASE.jar
org.springframework.jdbc-3.0.0.RELEASE.jar
org.springframework.transaction-3.0.0.RELEASE.jar

bom agora compilou pelo menos, rsrs vou ver se funcionou :stuck_out_tongue:

muito obrigado!!!

Lucas, agora o erro mudou…

Pelo que eu entendi a Session do Hibernate não está sendo encontrada na hora que chama a controller para passar para o Dao… mas não estou conseguindo localizar nos códigos aonde pode estar este erro…
Possivelmente deve ser algo tonto, que eu não endendi, se tiver um tempinho pode dar uma olhada? abaixo tem as classes que estou usando, enquanto isso vou reler o material para ver se acho onde falhei rs

Obrigado!!

classe HibernateSessionFactory

@ApplicationScoped
public class HibernateSessionFactory implements ComponentFactory<Session> {

	private final SessionFactory factory;
	private final Proxifier proxifier;
	private Session session;

	public HibernateSessionFactory(SessionFactory factory, Proxifier proxifier) {
		this.factory = factory;
		this.proxifier = proxifier;
	}

	@Override
	public Session getInstance() {
		return this.session;
	}

	@PostConstruct
	public void openSession() {
		// this.session = factory.openSession();
		this.session = proxifier.proxify(Session.class,
				new MethodInvocation<Session>() {
					public Object intercept(Session proxy, Method method,
							Object[] args, SuperMethod superMethod) {
						Session sessionDoSpring = SessionFactoryUtils
								.doGetSession(factory, true);
						return new Mirror().on(sessionDoSpring).invoke()
								.method(method).withArgs(args);
					}
				});
	}

	@PreDestroy
	public void closeSession() {
		this.session.close();
	}
}

classe AssinanteDao

@Component
public class AssinanteDao {
    private Session session;

    public AssinanteDao(Session session) {
        this.session = session;
    }

    public void salva(Assinante obj) {
        this.session.save(obj);
    }

    public void atualiza(Assinante obj){
        this.session.update(obj);
    }

    public Assinante get(Long assinanteId){
       return (Assinante)this.session.load(Assinante.class, assinanteId);
    }
    
    @SuppressWarnings("unchecked")
	public List<Assinante> listaTudo(){
    	return this.session.createCriteria(Assinante.class).list();
    }
}

classe IndexController

@Resource
public class IndexController {
	private final Result result;
	private final AssinanteDao dao;

	public IndexController(Result result,AssinanteDao dao) {
		this.result = result;
		this.dao = dao;
	}

	@Path("/")
	public void index() {
		result.include("variable", "VRaptor!");

		Assinante assinante = this.dao.get(new Long("5"));
		
		result.include("assinante", assinante);
	}
	
	public List<Assinante> lista(){
		return this.dao.listaTudo();
	}
}

ERRO:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'indexController' defined in file [D:\Tools\apache-win\wtpwebapps\webEventos\WEB-INF\classes\br\eventos\controller\IndexController.class]: Unsatisfied dependency expressed through constructor argument with index 1 of type [br.eventos.dao.AssinanteDao]: : Error creating bean with name 'assinanteDao' defined in file [D:\Tools\apache-win\wtpwebapps\webEventos\WEB-INF\classes\br\eventos\dao\AssinanteDao.class]: Unsatisfied dependency expressed through constructor 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 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 'assinanteDao' defined in file [D:\Tools\apache-win\wtpwebapps\webEventos\WEB-INF\classes\br\eventos\dao\AssinanteDao.class]: Unsatisfied dependency expressed through constructor 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 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: {}
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'assinanteDao' defined in file [D:\Tools\apache-win\wtpwebapps\webEventos\WEB-INF\classes\br\eventos\dao\AssinanteDao.class]: Unsatisfied dependency expressed through constructor 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 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: {}
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:820)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:762)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
	org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

root cause

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: {}
	org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:896)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:765)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
	org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:820)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:762)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
	org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:328)
	org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:240)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:58)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
	br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)

mude a classe hibernate session factory:

@Component
@RequestScoped
public class HibernateSessionFactory implements ComponentFactory<Session> {  

ela não deve ser application, e deve estar anotada com component…

ué…
então a apostila FJ-28 está errada rsrs

“4) O transactionManager precisa de uma SessionFactory configurada. Já temos uma no VRaptor, mas ela não
poderá ser usada. Remova a anotação @Component do CriadorDeSessionFactory, e adicione o bean que cria
uma SessionFactory no Spring:”

Deu certo aqui!!!

Valeu mesmo rsrs, sabe para quem mandar essas erratas da FJ-28 ?!

Valeu!

Esse seu HibernateSessionFactory é a classe CriadorDeSession da apostila… não a CriadorDeSessionFactory…

manda pra mim mesmo =)
lucas.cavalcanticaelum.com.br

Obrigado =)

opa voltei…
testei aqui com ApplicationScoped, e deu certo…
desculpa a pergunta, mas ApplicationScoped não seria melhor ??

no caso do Session não… pq vc geralmente quer uma Session aberta por requisição… senão mais de um usuário poderia compartilhar a mesma Session, e não dá certo…

no caso do SessionFactory TEM que ser ApplicationScoped… mas o SessionFactory está sendo criado pelo próprio Spring, então não se preocupe com ele

[]s

opa eu de novo…

rsrs
na apostila também há um código que estou curioso…

No Capítulo 15 - Apêndice - Integrando VRaptor e Spring - Exercícios: Transaction Manager - Página 129

há a a seguinte declaração:
public class ProdutoDao implements ProdutoRepository {

Procurei essa classe ProdutoRepository mas não achei nada, voce sabe o que seria ela ? qual o papel dela?

Valeu

ProdutoRepository é só uma interface que contém todos os métodos públicos do ProdutoDao…

Ela não é realmente necessária, apesar de ser boa prática sempre receber interfaces como dependências, e não classes concretas…

se vc quiser criar essa interface, é só colocar os métodos públicos do dao nela, e receber a interface como dependência de tudo que precisaria do ProdutoDao…

De qqer forma, obrigado por avisar, vou tirar isso da apostila…

Lucas,

eu implementei a integração do VRaptor com o Spring da forma que está indicado na apostila FJ28, só que ta dando o seguinte erro na hora que eu tento listar os produtos:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘produtosController’ defined in file [D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\goodbuy\WEB-INF\classes\br\com\caelum\goodbuy\controller\ProdutosController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.goodbuy.dao.ProdutoDao]: : Error creating bean with name ‘produtoDao’ defined in file [D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\goodbuy\WEB-INF\classes\br\com\caelum\goodbuy\dao\ProdutoDao.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/aspectj/autoproxy/AspectJAwareAdvisorAutoProxyCreator$PartiallyComparableAdvisorHolder; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘produtoDao’ defined in file [D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\goodbuy\WEB-INF\classes\br\com\caelum\goodbuy\dao\ProdutoDao.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/aspectj/autoproxy/AspectJAwareAdvisorAutoProxyCreator$PartiallyComparableAdvisorHolder
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:730)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:398)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:388)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1140)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:242)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘produtoDao’ defined in file [D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\goodbuy\WEB-INF\classes\br\com\caelum\goodbuy\dao\ProdutoDao.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/aspectj/autoproxy/AspectJAwareAdvisorAutoProxyCreator$PartiallyComparableAdvisorHolder
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:398)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:388)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1140)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:242)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

root cause

java.lang.NoClassDefFoundError: org/springframework/aop/aspectj/autoproxy/AspectJAwareAdvisorAutoProxyCreator$PartiallyComparableAdvisorHolder
org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.sortAdvisors(AspectJAwareAdvisorAutoProxyCreator.java:74)
org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:90)
org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:68)
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:359)
org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:322)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:407)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1426)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:844)
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:786)
org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)
org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:329)
org.springframework.web.context.request.AbstractRequestAttributesScope.get(AbstractRequestAttributesScope.java:43)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:398)
org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:388)
org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1140)
org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:242)
br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:41)
br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65)
br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)

As minhas classes estão assim:
@ApplicationScoped
public class CriadorDeSessionFactory implements ComponentFactory {

private SessionFactory factory;

@PostConstruct
public void abre() {
	AnnotationConfiguration configuration = new AnnotationConfiguration();
	configuration.configure();
	this.factory = configuration.buildSessionFactory();
}

/**
 * Aquisição de SessionFactory
 * @return SessionFactory
 */
public SessionFactory getInstance() {
	return factory;
}

@PreDestroy
public void fecha() {
	this.factory.close();
}

}

@Component
@RequestScoped
public class CriadorDeSession implements ComponentFactory{

private final SessionFactory factory;
private final Proxifier proxifier;
private Session session;

public CriadorDeSession(SessionFactory factory, Proxifier proxifier) {
	this.factory = factory;
	this.proxifier = proxifier;
}

@PostConstruct
public void abre() {
	this.session = proxifier.proxify(Session.class, new MethodInvocation<Session>() {
		public Object intercept(Session proxy, Method method, Object[] args, SuperMethod superMethod) {
			Session sessionDoSpring = SessionFactoryUtils.doGetSession(factory, true);
			return new Mirror().on(sessionDoSpring).invoke().method(method).withArgs(args);
		}
	});
}

/**
 * Aquisição de Sessão
 * @return Session
 */
public Session getInstance() {
	return this.session;
}

@PreDestroy
public void fecha() {
	this.session.close();
}

}

@Component
public class ProdutoDao {

private final Session session;

public ProdutoDao(Session session) {
	this.session = session;
}

@SuppressWarnings("unchecked")
public List<Produto> listaTudo() {
	return this.session.createCriteria(Produto.class).list();
}

/**
 * Recupera o produto no banco de dados
 * @param id
 */
public Produto carrega(Long id) {
	return (Produto) this.session.load(Produto.class, id);
}

/**
 * Recupera o produto no banco de dados pelo nome
 * @param nome
 */
public Produto carregaPorNome(String nome) {
	Produto produto;
	Criteria crit = this.session.createCriteria(Produto.class);
	crit.add(Restrictions.eq("nome", nome));
	crit.setMaxResults(1);
	@SuppressWarnings("unchecked")
	List<Produto> lista = crit.list(); 
	produto = lista.get(0);
	return produto;
}

/**
 * Grava o produto no banco de dados
 * @param produto
 */
@Transactional
public void salva(Produto produto) {
	this.session.save(produto);
}

/**
 * Atualiza o produto no banco de dados
 * @param produto
 */
@Transactional
public void atualiza(Produto produto) {
	this.session.update(produto);
}

/**
 * Exclui o produto no banco de dados
 * @param produto
 */
@Transactional
public void exclui(Produto produto) {
	this.session.delete(produto);
}

@SuppressWarnings("unchecked")
public List<Produto> busca(String nome) {
	return session.createCriteria(Produto.class).add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE)).list();
}

public void recarrega(Produto produto) {
	session.refresh(produto);
}

}

@Resource
public class ProdutosController {

private ProdutoDao dao;
private final Result result;
private final Validator validator;

public ProdutosController(ProdutoDao dao, Result result, Validator validator) {
	this.dao = dao;
	this.result = result;
	this.validator = validator;
}

@Path("/produtos/novo")
@Get
@Restrito
public void formulario() {
}

@Path("/produtos")
@Get
public List<Produto> lista() {
	return dao.listaTudo();
}

@Path("/produtos")
@Post
@Restrito
public void adiciona(final Produto produto) {
	validaProduto(produto, 0);
	dao.salva(produto);
	result.redirectTo(ProdutosController.class).lista();
}

@Path("/produtos/{id}")
@Get
@Restrito
public Produto edita(Long id) {
	return dao.carrega(id);
}

@Path("/produtos/{produto.id}")
@Put
@Restrito
public void altera(Produto produto) {
	validaProduto(produto, 1);
	dao.atualiza(produto);
	result.redirectTo(ProdutosController.class).lista();
}

@Path("/produtos/{id}")
@Delete
@Restrito
public void remove(Long id) {
	Produto produto = dao.carrega(id);
	dao.exclui(produto);
	result.redirectTo(ProdutosController.class).lista();
}

public List<Produto> busca(String nome) {
	result.include("nome", nome);
	return dao.busca(nome);
}

@Get @Path("/produtos/busca.json")
public void buscaJson(String q) {
	result.use(json()).from(dao.busca(q))
		.exclude("id", "descricao", "preco")
		.serialize();
}

private void validaProduto(final Produto produto, int metodo) {
	validator.checking(new Validations() {{
		that(produto.getNome() != null && produto.getNome().length() >= 3,
		"produto.nome", "nome.obrigatorio");
		
		that(produto.getDescricao() != null && produto.getDescricao().length() > 0 && produto.getDescricao().length() <= 40,
		"produto.descricao", "descricao.obrigatoria");
		
		that(produto.getPreco() != null && produto.getPreco() > 0.0,
		"produto.preco", "preco.positivo");
	}});
	switch (metodo) {
	case 0:
		validator.onErrorUse(page()).of(ProdutosController.class).formulario();
		break;
	case 1:
		validator.onErrorUse(page()).of(ProdutosController.class).edita(produto.getId());
	default:
		break;
	}
	validator.onErrorUse(page()).of(ProdutosController.class).formulario();
}

}

e eu não consegui identificar aonde está o erro.

o erro é:

java.lang.NoClassDefFoundError: org/springframework/aop/aspectj/autoproxy/AspectJAwareAdvisorAutoProxyCreator$PartiallyComparableAdvisorHolder

tá faltando o jar do spring aop… vc se baseou no blank project?

Eu me baseie no projeto goodbuy-auxiliar que está no site do VRaptor e implementei toda a apostila até agora e o jar do aop já está lib do projeto com na imagem em anexo.

eu peguei essas libs na pasta lib/mandatory do VRaptor3 e o org.springframework.jdbc-3.0.4.RELEASE.jar, org.springframework.orm-3.0.4.RELEASE.jar e o org.springframework.transaction-3.0.4.RELEASE.jar eu baixei do site do spring.

Uma outra pergunta:

no meu dao eu devo receber a session como parâmetro no construtor mesmo?

sim, receba a Session pelo construtor

Eu refiz tudo agora iniciando do projeto vraptor-blank e está na seguinte situação:

Executando depois da implementação indicada na apostila e adicionando os .jar necessários pra compilar dá o seguinte erro:

java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable

Ai eu adicinei a lib “aspectjtools-1.6.2.jar” onde tem essa classe que ele está reclamando e deu o seguinte erro:

org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name ‘produtosController’ defined in file
[D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\vraptor_blank\WEB-INF\classes\br\com\caelum\goodbuy\controller\ProdutosController.class]:
Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.goodbuy.dao.ProdutoDao]: :
Error creating bean with name ‘produtoDao’ defined in file
[D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\vraptor_blank\WEB-INF\classes\br\com\caelum\goodbuy\dao\ProdutoDao.class]:
Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException:
Could not generate CGLIB subclass of class [class br.com.caelum.goodbuy.dao.ProdutoDao]:
Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException:
Superclass has no null constructors but no arguments were given; nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name ‘produtoDao’ defined in file
[D:\Desenvolvimento\Estudo.metadata.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\vraptor_blank\WEB-INF\classes\br\com\caelum\goodbuy\dao\ProdutoDao.class]:
Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException:
Could not generate CGLIB subclass of class [class br.com.caelum.goodbuy.dao.ProdutoDao]:
Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException:
Superclass has no null constructors but no arguments were given

Ao que me parece ele não conseguiu criar uma instancia da classe ProdutoDao porque o construtor dela requer um instancia de Session, só que não foi passado nenhuma instância pra ele.

Quando eu usuava o meu CriadorDeSessionFactory eu tinha como marcar ele com @Component que o VRaptor instanciava e passa para o construtor da CriadorDeSession, agora como eu faço para instancia da session do Spring ser passada no construtor da CriadorDeSession?

o construtor do ProdutoDao é publico? o ProdutoDao é final? vc tá com a última versão do VRaptor?

Respondendo as peguntas:

O contrutor do ProdutoDao é público? SIM

O ProdutoDao é final? Vc está falando do atributo produtoDao na minha classe ProdutosController ou da classe ProdutoDao, pq se for o atributo está como final sim.

Vc está com a última versão do VRaptor? Sim, baixei na semana passada no site.