Boteco Digital

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.

Categorias Java
comments powered by Disqus