Estou tentando implementar um pool de conexão em meu sistema, é um programa Java para desktop, só que acho somente material para java web, alguem sabe me informar qual a maneira mais simples de implementar um pool no meu sistema? Lembrando que eu uso o eclipse! 
Da uma estudada em C3P0. Nao podemos dizer que é o MELHOR, mas vai te atender bem.
amigão não encontrei qse nada sobre ele pra java desktop, nem sei como começa, a funcionalidade já entendi… mas a aplicação está foda!
mas o pool funciona independentemente de que tipo de aplicação vc esta fazendo.
qual sua duvida?
abrasss
rodrigo73 da uma olhada no DBCP e bem legal e facio de si implementar!
o link do guj que o jweibe colocou, tem uma classe pronta eh so dar um ctrl + c e usar. com direito a correções de ViniGodoy.
Esse tópico deve me salvar!! vou dar uma lida aqui!! Agradeço a ajuda galera!
cp30
jdbc:
http://www.mchange.com/projects/c3p0/index.html
hibernate:
https://community.jboss.org/wiki/HowToConfigureTheC3P0ConnectionPool
att,
Apenas setando os dados o pool ja é criado?
não preciso pegar nenhuma informação depois?
[code]ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( “org.postgresql.Driver” ); //loads the jdbc driver
cpds.setJdbcUrl( “jdbc:postgresql://localhost/testdb” );
cpds.setUser(“swaldman”);
cpds.setPassword(“test-password”);
// the settings below are optional – c3p0 can work with defaults
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);[/code]
Boa tarde a todos.
Olha, o Apache Tomcat faz pool de conexões muito bem através do JNDI (Java Name and Directing Interface), dê uma olhada neste tutorial cujo link vai abaixo.
http://docs.oracle.com/javase/jndi/docs.html.
Um abraço.
[quote=rodrigo73]Apenas setando os dados o pool ja é criado?
não preciso pegar nenhuma informação depois?
[code]ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( “org.postgresql.Driver” ); //loads the jdbc driver
cpds.setJdbcUrl( “jdbc:postgresql://localhost/testdb” );
cpds.setUser(“swaldman”);
cpds.setPassword(“test-password”);
// the settings below are optional – c3p0 can work with defaults
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);[/code][/quote]
isso mesmo!
se eu fosse voce usaria a dica do vinigodoy sobre usar a classe BasicDataSource. ela eh bem completa.
[]'s
Desculpem ressucitar esse tópico já um pouco antigo, mas ainda é desse ano.
Acontece que estou pesquisando justamente sobre isso.
E acontece que nas minhas pesquisas o DBCP já parou de ser desenvolvido a mais de dois anos. E parece que o mesmo aconteceu com o C3P0. Então qual seria ainda hoje a melhor opção? Lembrando que é para uso desktop, swing, jdbc, banco oracle.
Obrigado.
nussa ressucitou o tópico!! kkk
cara eu utilizei o C3P0 resolveu blz meu problema, chegando em casa eu posto o códio para vc! ele ajudou muito mesmo!
Estou esperando você postar aqui.
mas acontece que o dbcp parou de ser desenvolvido em 2010, e o c3p0 voltou a ser desenvolvido agora depois de dois anos parados…
ainda são a melhor solução? talvez nesses dois anos tenham aparecido algo que seja melhor…
eu tive problemas com isso cara, e acabei usando o c3p0, reduziu meu tempo de consulta para milisegundos, usei uma classe de conexão central e toda vez que eu precisava concetar chamava ela, assim teria apenas uma fili de querys abertas… estu procurando os arquivos aqui, assim que achar anexo aqui, foi para um sisteminha que fiz, deve estar nos meus backups
Coloquei essa classe para criar o pool e conectar pegando os dados em outra classe.
e coloquei as bibliotecas do c3p0.
package dao;
import java.beans.PropertyVetoException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import Administrador.DadosConn;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class DaoConexao {
private static DaoConexao instance = new DaoConexao();
private Properties props;
ComboPooledDataSource cpds;
private DaoConexao() {
}
public static DaoConexao getInstance() {
return instance;
}
private void configurarDataSourceRAC() {
cpds = new ComboPooledDataSource();
try {
DadosConn d = new DadosConn();
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl(d.getUrl());
cpds.setUser(d.getUsuario());
cpds.setPassword(d.getSenha());
cpds.setMinPoolSize (1);
cpds.setAcquireIncrement (1);
cpds.setMaxPoolSize (2);
cpds.setAcquireRetryDelay(0);
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public synchronized Connection getConexaoRAC(){
if (cpds == null)
configurarDataSourceRAC();
try{
return cpds.getConnection();
}catch (Exception e){
e.printStackTrace();
return null;
}
}
public static void liberarRecursosBD(ResultSet rs, Statement ps, Connection conn){
try{
if (ps != null)
ps.close();
if (rs != null)
rs.close();
if (conn != null)
conn.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
Quando eu precisava fazer uma consulta eu tinha umas classes no package “dao” e puxava as funções nas classes das janelas.
minha função de conectar era assim:
private void conectar() {
try {
DaoConexao daoConexao = DaoConexao.getInstance();
long tempoInicio = System.currentTimeMillis();
con = daoConexao.getConexaoRAC();
comando = con.createStatement();
System.out.println("Sistema OK! - Conectado");
long tempoFim = System.currentTimeMillis();
System.out.println("Tempo: "+(tempoFim - tempoInicio));
} catch (SQLException e) {
imprimeErro("Erro ao conectar", e.getMessage());
}
}
essa função era chamada antes de eu executar a query.
entendi, mas tenho uma outra dúvida…
fazendo assim, todas as estações clientes que irão acessar o banco de dados terão o c3p0 nos seus respectivos jars…
então cada estação teria um pool? o correto não seria um pool para todos?
Seria um pool por estação mesmo… ficaria dentro do JAR
Nesse caso o meu programa acessava um BD mysql simples… sem implementação de java WEB, era o BD do site, entende?