Mesmo utilizando um driver JDBC, a aplicação deve abrir muitas conexões com o banco de dados. O processo de criar uma conexão com um banco de dados é lento e consome muitos recursos (memória, CPU e rede), tanto da aplicação quanto do banco de dados, certos bancos de dados as licenças são cobradas por conexão, o que também elevaria o custo. Para evitar estes problemas o ideal seria utilizar conexões somente quando a aplicação for ao banco, assim irão ocorrer poucas conexões ativas simultâneas, baixando o consumo de recursos e, em certos casos, até o custo das licenças. Porém efetuar um gerenciamento assim é complexo, praticamente voltamos para uma situação similar antes da utilização de “drivers JDBC” (veja Java Data Base Connectivity (JDBC)).
Para resolver este problema, a especificação JEE criou um recurso chamado Origem de dados (Datasource), que é um objeto configurável, ou seja, não há necessidade de esforço por parte do programador. A Origem de dados permite a criação de um conceito chamado pool (piscina do Inglês), Este conceito permite, ao iniciar o sistema, a criação de um número de conexões com o banco de dados. Estas conexões ficarão abertas o tempo todo, quando uma aplicação precisar se comunicar com o banco de dados, ela solicita uma destas conexões através da árvore JNDI. Podemos configurar alguns itens:
· Quantidade mínima de conexões: quando as conexões não estiverem em uso, serão encerradas até chegarem neste valor;
· Quantidade máxima de conexões: caso a quantidade mínima fique completamente um uso, o sistema aumenta o número de conexões até atingir o máximo;
· Quantidade inicial de conexões: quando o sistema iniciar é o número de conexões que serão abertas, deve ser maior que a quantidade mínima e menor que a máxima.
Quanto uma aplicação encerra a utilização da conexão da Origem de dados (Datasource), ela não é encerrada, mas volta a ficar disponível no pool de conexões. Veja abaixo o esquema de um Datasource simplificado:
Figura 1 (Clique na imagem para ampliar)
Um Datasource tem muitos itens para serem configuradors e varia de fabricante para fabricante, o objetivo aqui foi entender o básico por trás do recurso.