Olá pessoal!
Implementei um pool de conexões para utilizar na minha aplicação WEB, mas não estou conseguindo criar as conexões, dá exceção com a mensagem “No Suitable Driver”.
Coloquei o nome da classe para o driver do PostgreSQL no web.xml, como um e testei em um Servlet com Class.forName(), achou o driver no meu classpath numa boa, não gerou exceção nem nada…
Tenho uma classe listener que cria um objeto como pool de conexões durante a inicialização da aplicação. Usei um servlet para testar, tentando pegar um objeto Connection através do método getConnection do meu pool. Dá “No Suitable Driver”.
Ficaria agradecido se alguém pudesse dar uma olhada no meu código abaixo e ver se está tudo certinho ou se estou esquecendo de alguma coisa… Tentei seguir este artigo:
http://today.java.net/pub/a/today/2005/11/17/app-managed-datasources-with-commons-dbcp.html
Se alguém puder me dar umas dicas, agradeço!
Segue minha implementação:
package br.com.shh.cshagn.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDataSource;
import org.apache.commons.pool.impl.GenericObjectPool;
public class ConnectionPool {
private ConnectionFactory connectionFactory;
private PoolableConnectionFactory pcf;
private GenericObjectPool _pool;
private PoolingDataSource poolingDataSource;
public ConnectionPool(String className, String url,
String username, String password){
try{
Class.forName(className);
}
catch(ClassNotFoundException e){
System.out.println("Driver nao encontrado...");
}
connectionFactory = new DriverManagerConnectionFactory(url,
username,
password);
_pool = new GenericObjectPool(null);
_pool.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_BLOCK) ;
pcf = new PoolableConnectionFactory(connectionFactory,_pool,null,
null,false,true);
poolingDataSource = new PoolingDataSource();
poolingDataSource.setPool(_pool);
}
public Connection getConnection() throws SQLException{
return poolingDataSource.getConnection();
}
public int getActiveConnections(){
return _pool.getNumActive();
}
public int getIdleConnections(){
return _pool.getNumIdle();
}
}
Obrigado!
[EDITADO]
Bom pessoal, consegui ajeitar as coisas aqui… Coloquei o jar do driver no lib do tomcat, não apenas na minha aplicação e dai foi…
Funciona muito bem, o pool controla direitinho as conexões abertas/fechadas.
Fiz uma alteração e coloquei mais uma parâmetro de inicialização no web.xml, para determinar o número máximo de conexões do pool. Vamos ver se depois em produção vai aguetnar o tranco, mas por enquanto parece muito bom esse framework!
[/EDITADO]