Vraptor 3.5.3 erro na injeção de dependência [RESOLVIDO]

Pessoal, to precisando de uma ajuda.
Tenho um sistema que fiz no Vraptor 3.5.0 e funciona legal, ai baixei o vraptor-blank-project que está com a versão 3.5.3 do vraptor e comecei a reescrever o sistema.
Ai começou os erros… quando uso um java.sql.Connection no construtor de uma classe ele da erro e nem sobe o projeto.
Por exemplo: a classe abaixo funciona normal na versão 3.5.0 e na 3.5.3 da um erro “Exception starting filter vraptor”. (erro logo abaixo da classe).

import java.sql.Connection;

import br.com.caelum.vraptor.Resource;

@Resource
public class UsuarioDao {
	
	private Connection conn;

	public UsuarioDao(Connection conn) {
		this.conn = conn;
	}
	
	

}

Erro gerado somente na versão 3.5.3

SEVERE: Exception starting filter vraptor
com.google.inject.CreationException: Guice creation errors:

1) No implementation for java.sql.Connection was bound.
  while locating java.sql.Connection
    for parameter 0 at br.com.checklist.dao.UsuarioDao.<init>(UsuarioDao.java:13)
  at br.com.caelum.vraptor.ioc.guice.GuiceComponentRegistry.bindToConstructor(GuiceComponentRegistry.java:151)

1 error
	at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:435)
	at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:154)
	at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:106)
	at com.google.inject.Guice.createInjector(Guice.java:95)
	at com.google.inject.Guice.createInjector(Guice.java:83)
	at br.com.caelum.vraptor.ioc.guice.GuiceProvider.start(GuiceProvider.java:97)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:119)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:113)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4656)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5309)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Alguem tem idéia do que pode ser? será que teve alguma alteração na versão 3.5.3?
Obrigado

Está faltando um ComponentFactory<Connection> nesse seu projeto novo.

O VRaptor usa ele para criar um Connection para você…

Rafael tenho esse aqui no projeto, seria essa classe?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import br.com.caelum.vraptor.ioc.Component;

@Component
public class ConnectionFactory {
	
	public Connection getConnectionMySql() {

		Connection conn = null;
		
		try {
			
			try {
				Class.forName("com.mysql.jdbc.Driver");
			} catch (ClassNotFoundException e) {
				throw new RuntimeException(e);
			}
			
		conn = DriverManager.getConnection("jdbc:mysql://localhost/acesso_web", "user", "senha");
			
		} catch (SQLException e) {
			throw new RuntimeException(e);
		} 

		return conn;

	}

}

Rafael no projeto tenho também um componente ConnectionSession

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

import javax.annotation.PreDestroy;

import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.SessionScoped;
import br.com.checklist.connection.ConnectionFactory;

@Component
@SessionScoped
public class ConnectionSession {
	
private final Connection conn;
	
	public ConnectionSession() {
		
		this.conn = new ConnectionFactory().getConnectionMySql();
	}

	public Connection getConn() {
		return conn;
	}
		
	@PreDestroy
	public void fechaConn() {
		if (this.conn != null){
			try {
				this.conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		
	}

}

Seria algo parecido, com essa classe, você não consegue receber o Connection… Você precisa ajudar o VRaptor a saber disso… Basta fazer isso:

[code]
@Component
public class ConnectionFactory implements ComponentFactory<Connection> {
Connection conn;

// Vira construtor
public ConnectionFactory() {
try {
try {
Class.forName(“com.mysql.jdbc.Driver”);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}

    conn = DriverManager.getConnection("jdbc:mysql://localhost/acesso_web", "user", "senha");  
          
    } catch (SQLException e) {  
        throw new RuntimeException(e);  
    }   
}

// Adiciona o método da interface
public Connection getInstance() {
return conn;
}

@PreDestroy
public void fechaConn() {
if (this.conn != null){
try {
this.conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

}  

}[/code]

Rafael muito obrigado, agora o projeto esta no ar \o/ , valew pela ajuda.

Só mas uma pergunta, isso não existia antes né? porque procurei no projeto anterior e ele não tem a implementação ComponentFactory e funciona normal.

Isso sempre existiu.

Não tenho como te dizer o motivo de funcionar antes. Mas eu acredito que você estava usando o ConnectionSession em vez de usar o Connection…

Enfim, ambos são péssima prática… Dê uma estudada no Hibernate… Olhe a apostila de VRaptor da Caelum que lá te explica tudo isso…

Blz Rafael, valew mesmo pela ajuda, vou dar uma olhada na apostila.