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.