Vraptor3

Boa Noite,

Estou desenvolvendo um projeto utilizando o Vraptor3 utilizando o modelo MVC.

O codigo abaixo funciona perfeitamente:

Contexto:
@Resource
public class MainController {

	private final Result result;

	public MainController(Result result) {
		this.result = result;
	}
...
}

No entanto, quando adiciono o Objeto DAO obtenho um erro estranho:

@Resource
public class MainController {

	private final ContratoEletronicoDAO dao;
	private final Result result;

	public MainController(ContratoEletronicoDAO dao, Result result) {
		this.dao=dao;
		this.result = result;
	}
...
}

ERROR: HTTP Status 500 -

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainController' defined in file [C:\Tomcat 6.0\webapps\smsw\WEB-INF\classes\leonardo\lsd\ic\unicamp\smsw\controller\MainController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO]: : No matching bean of type [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO] 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 [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO] 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.NoSuchBeanDefinitionException: No matching bean of type [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO] 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)

Preciso de alguma configuração adicional para utilizar o Objeto DAO no construtor do CONTROLLER?

Essa é a minha Classe DAO

public class ContratoEletronicoDAO
{
	private Connection con;

	public ContratoEletronicoDAO() throws SQLException{
		this.con = ConnectionFactory.getConnection();
	}

	public void adiciona(ContratoEletronico ce) throws ClassNotFoundException, SQLException{
		String sql = "INSERT INTO ContratoEletronico(data,arquivo,nome)VALUES (?,?,?)";

		PreparedStatement stmt = con.prepareStatement(sql);

		stmt.setString(1,ce.getData());
		stmt.setString(2,ce.getArquivo());
		stmt.setString(3,ce.getNome());

		stmt.execute();
		stmt.close();

		con.close();
		
	}
}

Obrigado pela ajuda.

sim, vc precisa anotar o dao com @Component

Oi Lucas,

Mesmo adicionando o @Component continua dando erro

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mainController' defined in file [C:\Tomcat 6.0\webapps\smsw\WEB-INF\classes\leonardo\lsd\ic\unicamp\smsw\controller\MainController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO]: : Error creating bean with name 'contratoEletronicoDAO' defined in file [C:\Tomcat 6.0\webapps\smsw\WEB-INF\classes\leonardo\lsd\ic\unicamp\smsw\dao\ContratoEletronicoDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO]: Constructor threw exception; nested exception is java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.postgresql.Driver); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contratoEletronicoDAO' defined in file [C:\Tomcat 6.0\webapps\smsw\WEB-INF\classes\leonardo\lsd\ic\unicamp\smsw\dao\ContratoEletronicoDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO]: Constructor threw exception; nested exception is java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.postgresql.Driver)
...
	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.BeanCreationException: Error creating bean with name 'contratoEletronicoDAO' defined in file [C:\Tomcat 6.0\webapps\smsw\WEB-INF\classes\leonardo\lsd\ic\unicamp\smsw\dao\ContratoEletronicoDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [leonardo.lsd.ic.unicamp.smsw.dao.ContratoEletronicoDAO]: Constructor threw exception; nested exception is java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.postgresql.Driver)
...
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:946)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:890)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
....

Também adicionei o driver do postgres no PATH da aplicação WebContent/WEB-INF/lib/postgresql-8.4-701.jdbc4.jar

Alguma outra orientação?

Obrigado.

DAO

package leonardo.lsd.ic.unicamp.smsw.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import br.com.caelum.vraptor.ioc.Component;
import leonardo.lsd.ic.unicamp.smsw.jdbc.ConnectionFactory;
import leonardo.lsd.ic.unicamp.smsw.model.ContratoEletronico;

@Component
public class ContratoEletronicoDAO
{
	private Connection con;

	public ContratoEletronicoDAO() throws SQLException{
		this.con = ConnectionFactory.getConnection();
	}

	public void adiciona(ContratoEletronico ce) throws ClassNotFoundException, SQLException{
		String sql = "INSERT INTO ContratoEletronico(data,arquivo,nome)VALUES (?,?,?)";

		PreparedStatement stmt = con.prepareStatement(sql);

		stmt.setString(1,ce.getData());
		stmt.setString(2,ce.getArquivo());
		stmt.setString(3,ce.getNome());

		stmt.execute();
		stmt.close();

		con.close();

	}
}

o problema não é com o VRaptor… é com o seu driver do postgresql:

java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.postgresql.Driver

a parte do vraptor tá funcionando… dá uma olhada no jar do postgresql, e vê se ele não foi compilado numa versão do java incompatível com a sua

Valeu pela força lucas.
Funcionou.