Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » Java » Conexão JNDI utilizando container Tomcat -->
 
Avaliação: | Publicado em: 02/07/2007
Conexão JNDI utilizando container Tomcat
Luciano Bianchi é desenvolvedor Java, trabalha com desenvolvimento de sistemas pra web há mais de 4 anos, onde já atuou em grandes empresas como o Banco do Brasil, desenvolvendo no centro de tecnologia.


Saudações,

é com grande prazer que escrevo minha primeiro coluna, e para tal, pensei em algo fundamental para uma aplicação cliente-servidor, a conexão com o banco de dados.
Uma forma bastante prática e eficaz de criar uma conexão é a configuração de Datasources que são acessados via JNDI, então utilizaremos o container Tomcat e o framework Struts, uma combinação poderosa e bastante utilizada no mercado.

Para iniciarmos é necessário definir a configuração dentro do Tomcat, o primeiro passo é editar o arquivo context.xml que se encontra normalmente na pasta /conf do Tomcat.
Esse arquivo é defenido pelas tags

<Context>

</Context>

As configurações a seguir devem estar dentro das tags mencionadas acima:

<Resource
name="jdbc/bdteste"
type="javax.sql.DataSource"
username="usuario"
password="senha"
driverClassName="com.mysql.jdbc.Driver"                              url="jdbc:mysql://localhost:3306/nomebd"
maxActive="8"
maxIdle="4"/>

Vamos as definições, inicialmente deve-se definir um nome de referência para a conexão, é através deste nome que poderemos instanciar uma conexão:
  • name="jdbc/bdteste"
Esse é um nome de referência, ou seja, não precisa ser o nome do banco, apenas um detalhe deve ser levado em consideração, sempre colocar o valor jdbc/ antes do nome escolhido.
  • type="javax.sql.DataSource"
define que será do tipo Data Source
  • username="usuario"
  • password="senha"
definem nome de usuário e senha do banco de dados.
  • driverClassName="com.mysql.jdbc.Driver"
define o driver que será utilizado de acordo com o banco de dados, neste caso estamos utilizando o banco de dados MySQL.
  • url="jdbc:mysql://localhost:3306/nomebd"
define o endereço do banco, como estamos utilizando o banco MySQL, deve ser definido dessa forma, onde localhost define o local em que o banco está rodando, neste caso na própria máquina, 3306 define a porta de acesso, na maioria dos casos é sempre 3306, e nomebd define o nome da base de dados.
  • maxActive="8"
define o número máximo de conexões no pool, quando não se deseja especificar um limite, basta utilizar "0"
  • maxIdle="4"
define o número máximo das conexões inativas.

Existem alguns outros parâmetros que podem ser especificados, porém, esses parâmetros são suficientes.
Agora já temos o nosso pool configurado, o próximo passo é utilizar a conexão.

Uma boa prática de programação é a separação em camadas, então sugiro a criação de uma classe específica para chamar a conexão, porém, fica a critério de cada um.
Para obter uma conexão é muito simples, bastam as 3 linhas a seguir:

InitialContext ctx = new InitialContext();
DataSource db = (DataSource)ctx.lookup("java:comp/env/jdbc/bdteste");
Connection con = db.getConnection();

A seguir uma breve explicação de cada comando:
  • InitialContext
é chamado para obter a raiz da hierarquia de nomes.
  • DataSource
no nosso caso onde o container é o Tomcat, devemos passar o parâmetro: java:comp/env/jdbc/bdteste, relembrando que na configuração do context.xml definimos como nome de referência apenas jdbc/bdteste, porém para o tomcat deve ser especificado java:comp/env/ antes do nome de referência.
Se estiver utilizando o container JBoss, deve-se passar o parâmetro da seguinte forma:
java:jdbc/bdteste

O último passo é obter a conexão
  • Connection con = db.getConnection();
Pronto, agora já temos a nossa conexão com o banco de dados pronta para ser utilizada de forma, rápida, simples e eficaz.

Espero que este tutorial ajude quem está com dúvidas sobre como configurar uma conexão JNDI, fico a disposição para qualquer dúvida e aberto a sugestões e melhoras.

A - AKAHAI
L - LÔKAHI
O - OLU’OLU
H - HA’AHA’A
A - AHONUI

Luciano Bianchi

Para qual versão do tomcat vc utilizou?

Luciano Bianchi <lucianobianchidf@gmail.com>
Olá André,

eu utilizei o Tomcat 5.5, porém no Tomcat 6.0 também fiz testes e funciona da mesma forma.
Se tiver algum problema especifique aqui.

Abraços. : Não avaliado
Estou tendo o seguinte problema: depois de um período a parte do programa que estou usando para teste com essa conexão fica sem responder. Mas não dá erro no log. Aumentei a quantidade de conexões no pool e o problema ficou bem menos frequente e quando coloco "0" em maxActive ele simplemente fica sem responder (mesmo erro). Obs Tudo isso no tomcat 6.13. Parece que o problema é justamente na quantidade de conexões, pq se eu coloco um numero pequeno já da problema.
Luciano Bianchi <lucianobianchidf@gmail.com>
André,
me envie seu código para eu dar uma olhada, pois pode ser vários problemas, no BD, em alguma classe, e até no próprio Tomcat.
lucianobianchidf@gmail.com ok?
abraços! : Não avaliado
Luciano Barcelos <barluciano@gmail.com>
Cara, meus parabens, vc merece.
Procurei uma maneira de configurar JDBC no tomcat em toda parte, e so resolvi quando achei seu tutor.

Muito obrigado mesmo.