Criando um Datasource no Tomcat
A grande maioria das aplicações web necessita acessar banco de dados. Em muitos casos a conexão com o banco de dados se torna uma gargalo e gerenciar um pool de conexões dentro de nossa aplicação pode ser um pouco complicado. Em servidores de aplicação/web container este recurso é disponibilizado por meio de uma implementação de Datasource, no Tomcat especificamente é baseado no pool de conexão DBCP do projeto Commons.
Então vamos criar um Datasource no Tomcat, mas antes de tudo, não se esqueça de colocar o jar do driver de conexão na pasta lib de sua aplicação, ou confirme que ele está presente na pasta lib
do Tomcat.
Primeiro iremos configurar o recurso do Datasource no nosso Context. Vale lembrar que está configuração pode ser feita no contexto da aplicação “/META-INF/context.xml
“ sendo esta configuração disponível somente para a aplicação, ou ser feita no “CATALINA_HOME/conf/context.xml
“ que torna a configuração disponível para todas as aplicações do servidor.
<Context>
<Resource
maxTotal="10"
maxIdle="4"
maxWaitMillis="15000"
name="jdbc/banco_java"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="1234"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/java" />
</Context>
Os detalhes da configuração são os seguintes:
- maxTotal: O número máximo de conexões do banco de dados no pool ao mesmo tempo. Tenha certeza que sua configuração do mysqld(max_connections) é capaz de lidar com todas estas conexões. Para conexões ilimitadas limite utilize -1.
- maxIdle: O número máximo de conexões ociosas retidas no pool. Para conexões ilimitadas limite utilize -1.
- maxWaitMillis: Máximo de tempo de espera para uma conexão ao banco de dados se tornar disponível(em ms), no exemplo acima 15 segundos. Uma exceção é lançada se o tempo for esgotado. Para não utilizar limite utilize -1.
- name: O nome JNDI do recurso a ser criado.
- type: O nome canônico da classe esperada pela aplicação web quando esta realizar o lookup para este recurso.
- auth: Especifica se a aplicação irá lidar com o recurso ou o Container. Os valores possíveis são Application ou Container.
- username e password: O nome de usuário e senha para a conexão ao banco de dados.
- driverClassName: Nome da classe do drive jdbc de conexão a ser utilizado. Neste caso o driver mysql.
- url: A url de conexão para seu banco de dados.
O próximo passo é configurar o “/WEB-INF/web.xml” de nossa aplicação.
<resource-ref>
<res-ref-name>jdbc/banco_java</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Agora para o código da nossa aplicação para recuperar um conexão do pool:
InitialContext contexto = new InitialContext();
DataSource dataSource = (DataSource) contexto.lookup("java:comp/env/jdbc/banco_java");
Connection connection = dataSource.getConnection();
...
connection.close();
Na lina 1 criamos um objeto de contexto para realizar “naming operations
“. Na linha 2 utilizamos este contexto para buscar o recurso pelo seu nome, lembrando que o nome que utilizamos ao configurar o recurso no contexto deve ser precedido por “java:comp/env
“, assim obtemos um objeto DataSource através do método lookup que iremos utilizar na linha 3 para obter as conexões ao banco de dados do pool, para realizar nossas consultas.
Não se esqueça de após realizar todas consultas necessárias fechar a conexão para retorná-la para o pool, caso contrário pode atingir o número máximo de conexões do pool rapidamente.
Era isso T+ pessoal.