28
Como configurar um pool de conexões no Apache Tomcat
Filed Under (Banco de dados, Servlet/JSP, Tutoriais) by Antonio Passos on 28-03-2008
Observação 01:
Este tutorial ensina como criar um pool de conexões no Apache Tomcat. Para tanto, usa como exemplo o banco de dados Mckoi criado no tutorial Mckoi SQL Database em perguntas e respostas.
Observação 02:
Você deve ter uma cópia do driver do banco de dados do pool no diretório "lib" do Apache Tomcat.
Observação 03:
Não é necessário adicionar o driver do banco de dados à aplicação, muito menos colocar uma cópia em seu diretório /WEB-INF/lib.
1)Configurando o pool de conexões…
No diretório META-INF da aplicação, crie um arquivo "context.xml" com o seguinte conteúdo…
<?xml version="1.0" encoding="UTF-8"?>
<Context auth="Container">
<Resource
name="jdbc/bd_teste"
type="javax.sql.DataSource"
url="jdbc:mckoi://localhost:59999/"
driverClassName="com.mckoi.JDBCDriver"
username="admin"
password="123456"
maxActive="100"
maxIdle="20"/>
</Context>
Significado de cada atributo usado no arquivo "context.xml"…
- auth –> Atribui ao Apache Tomcat a responsabilidade de gerenciar a abertura e o fechamento das conexões
- name –> Nome dado ao pool de conexões. Deve obedecer o formato JNDI
ATENÇÃO: O NOME DADO AO POOL DEVERÁ SER O MESMO USADO NO ARQUIVO WEB.XML DA APLICAÇÃO.
- type –> Especifica o tipo como sendo DataSource
- url –> Especifica a localização do banco de dados. Deve obedecer o formato URL JDBC
- driverClassName –> Nome da classe do driver JDBC do banco de dados
- username –> Nome do usuário do BD
- password –> Senha do usuário do BD
- maxActive –> Número máximo de conexões ativas no pool
- maxIdle –> Número máximo de conexões inativas no pool
- maxWait –> Tempo máximo de espera por uma conexão, em milissegundos
2)Registrando o pool no aplicativo…
No arquivo "web.xml" da aplicação, insira as linhas abaixo…
<resource-ref>
<res-ref-name>
jdbc/bd_teste
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
ATENÇÃO: O valor em "<res-ref-name>" deve corresponder ao nome dado ao pool de conexões no arquivo "context.xml". No caso a "jdbc/bd_teste".
3)Testando o pool..
3.1) Crie uma classe "ServiceLocator.java" com o seguinte conteúdo…
import java.sql.Connection;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class ServiceLocator {
public static Connection getConexao(String JNDINome) throws Exception {
Connection con = null;
// Obtém a raiz da hierarquia de nomes
InitialContext contexto = new InitialContext();
// Obtém a origem dos dados
DataSource ds = (DataSource)contexto.lookup("java:comp/env/" + JNDINome);
// Obtém uma conexão
con = ds.getConnection();
// Retorna a conexão
return con;
}
}
3.2) Crie um servlet, que use a classe ServiceLocator acima para obter uma conexão do pool…
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletExemplo extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
private static final String JNDINome = "jdbc/bd_teste";
public ServletExemplo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Filmes cadastrados</h1>");
Connection con = null;
try {
con = ServiceLocator.getConexao(JNDINome);
} catch (Exception e) {
e.printStackTrace();
}
String sql = "SELECT * FROM filmes";
PreparedStatement stmt;
try {
stmt = con.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()){
out.println("Código -> " + rs.getInt(1) + " Título -> " + rs.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}



esse tutotial é ta complicado demais…faz uma coisa mais simples…pra quem é leigo mesmo…
Show de bola o tutorial, parabéns =)
nossa… mais simples q isso… só se desenhasse….
Parabéns, ta bem simples e objetivo!
E como eu faço pra reusar a conexão? Não quero ter q abrir uma nova conexão a toda hora.
realmente antonio, vc esta de parabens, ficou ótimo sim. gostaria de saber se vc tem mais artigos sobre pool de conexão e persistencias…. grato, sergio.
Oi, Sérgio!
Não tenho outro artigo sobre pool. Sobre persistência… em breve publico um.
Abraços,
Antonio Passos
Ótimo artigo. Parabéns ao autor. Mas gostaria de saber como fica utilizando Hibernate.
Oi, Rafael.
Como não uso o Hibernate, não sei como criar pool de conexões para usar com ele. Sorry!
Oi, muito interessante o seu artigo. Gostaria de saber poderia ajudar com a criacão de pool no TomCat para SQLServer no NetBeans.