Pool de Conexões! Esta conexão persiste?

Olá galera! estou construindo uma aplicação que acessa um banco de dados[b] remotamente /b. Criei um pool de conexões e pego a conexão quando preciso como por exemplo cadastrar os clientes.

Porém estou achando a inserção de dados muito devagar, quando estava trabalhando com um banco local era muito rápido. Minha dúvida é se quando eu chamo a conexão ela não esta sendo criada novamente e seria esse a causa da demora Agradeço a Ajuda.

Abaixo segue a forma que estruturei o sistema:

1-ConectarBD: esta classe possui um construtor que faz a conexão, é criada assim que o sistema inicia, a partir dai a conexão está estabelecida.

2-InseriClientes: esta classe extende a ConectarBD(extender a classe ela cria novamente outra conexão?) com ela eu pego o metodo do ConectarBD pra criar um Statement e executar a inserção.

Qual será o motivo da lentidão do meu sistema? quanto tempo normalmente uma aplicação remota demora pra realizar uma inserção?

É bom pôr uns logs no seu sistema. Basta pôr um log só, que é onde você efetivamente abre a conexão.

Muita gente tem o costume de depender excessivamente da IDE para depurar programas, isso diz que seu programa funciona direitinho na hora de executar um teste, mas não é bom para determinar problemas de desempenho, como é o que você está enfrentando agora.

Sem querer ser chato, porque é que você fez uma classe de pool de conexões? Pode usar uma pronta, tal como a DBCP ( http://jakarta.apache.org/commons/dbcp/ ).

Many Jakarta projects support interaction with a relational database. Creating a new connection for each user can be time consuming (often requiring multiple seconds of clock time), in order to perform a database transaction that might take milliseconds. Opening a connection per user can be unfeasible in a publicly-hosted Internet application where the number of simultaneous users can be very large. Accordingly, developers often wish to share a “pool” of open connections between all of the application’s current users. The number of users actually performing a request at any given time is usually a very small percentage of the total number of active users, and during request processing is the only time that a database connection is required. The application itself logs into the DBMS, and handles any user account issues internally.

Veleu cara pela dica! nunca usei o dbcp, mas vou dar uma olhada! no caso uma conexão usando o dbcp meloraria o desempenho do meu sistema?

thingol
Estava olhando o dbcp, mas não faço idéia de como utiliza-lo e principalmente se eu vou realizar muitas mudanças já que o meu sistema está pronto(apenas com o problema da lentidão) você teria algum exemplo prático do dbcp?

Como as coisas estão prontas, é melhor você pôr o log, para ver se não está sendo aberta uma conexão para cada solicitação.
Normalmente o que se faz é o seguinte:

  • Quando você quer abrir uma conexão, deve-se emprestá-la do pool, abrindo-a se necessário;
  • Quando você quer fechar uma conexão, deve-se devolvê-la ao pool, que se encarregará de fechá-la se necessário (por exemplo, se ela já estiver muito tempo aberta);
  • Pode ser que o seu “pool” esteja com algum probleminha de implementação, do tipo “estar fechando e abrindo conexões sempre”, em vez de “quando necessário”. Ponha o log (pode ser até um System.out.println) e veja o que está acontecendo.

Resolvi o problema! Valeu! o log mostrou que toda vez que eu ia inserir um cliente ele abria outra conexão. Retirei o extends da classe InserirCliente que extendia para o pool ConectarBD, criei uma interface para o meu pool, depois criei um objeto da Interface do pool dentro do InserirCliente, com ela eu pego a conexao sempre que desejar e o meu sistema está bem rápido.

Obrigado pela ajuda.