olá Pessoal,
O post desta semana é sobre pool de conexão, veremos como usar em uma aplicação JEE. Apesar de ter o mesmo efeito de fecharmos de forma programatica uma conexão, mas nem sempre esta ultima é melhor, principalmente em produção uma conexão pode ficar aberta, outra vem a ser aberta e por ai vai até estourar o nosso BD. E para retornar o normal tem que ter dar um restart no tomcat. Imagine em dar um restart no servidor em produção por causa disso?
Até a implementação do pool de conexão é bem lógico e bem refatorado, basta ter o JNDI e pronto. Quando precisar alterar vamos em um local e aonde o JNDI é referenciado já está atualizado (obvio).
Lets go…
Posts recomendados:
Pool de Conexão
O pool de conexão é usado do lado do servidor independente da IDE que você está usando, porém cada servidor e IDE tem suas config especiais para o uso do Pool, ou seja, no tomcat é de uma forma, no Jboss eh outra, no glassfish também. E na IDE Netbeans pode mudar, que ele organiza um projeto JEE levemente diferente da IDE eclipse. Mas, nada que o programador precise “comprar um livro” para esse fim.
Requisitos:
Tomcat 5.5/superior – Instalação
Eclipse
MySql – 5.x
Antes de colocar mão na massa certifique-se que você tem o conectar 5.x.jar MySql . Pois, vamos precisar dele em nosso projeto JEE.
- crie um novo dynamic web project
- Abra o arquivo web.xml e na aba Tree clique em Resources.
- Precisamos adicionar uma referência para isso clique em add e deixe conforme abaixo:
< resource-ref> < res-ref-name>jdbc/blog < res-type>javax.sql.DataSource < res-auth>Container < /resource-ref>
- O name pode ser qualquer um, como jdbc/nomequevcquer
-
crie um package para conexão br.com.conexao
-
Agora crie uma classe chamada Conexao com o método a seguir:
import java.sql.Connection; import java.sql.SQLException; import javax.naming.InitialContext; import javax.sql.DataSource; public class Conexao { public static Connection getConnection() throws Exception{ InitialContext context = new InitialContext(); DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/blog"); try { return ds.getConnection(); } catch (SQLException e) { throw new Exception(e.getMessage()); }}}
-
o método lookup tem como objetivo buscar o jdni que criamos no web.xml
Configurando o config BD no TomCat
- crie um arquivo em META-INF chamado context.xml
- Aqui vamos passar as configurações do BD para o JNDI que criamos, ou seja, jdbc/blog. Vamos informar qual usuário/senha e schema do BD aquele JNDI deve conectar.
Então podemos ter vários JNDI em um mesmo context.xml com usuários/senha + schema diferentes. Isso ajuda quando precisar fazer alterações de teste para produção, basta mudar em um lugar. E pronto.
“A JNDI é uma API para acesso a serviços de diretórios que permite aplicações cliente descobrir e obter dados ou objetos através de um nome. A API JNDI é utilizada em aplicações Java para acessar recursos externos, como banco de dados, filas ou tópicos JMS e componentes da plataforma Java EE. (Edson Gonçalves).”
Adicione ao projeto o driver do BD na pasta lib. Lembre-se de copia-lo fisicamente para o eclipse, ou seja, saia do eclipse e copie o .jar, pois o eclipse não faz isso automaticamente quando add via library da própria IDE.
Testando
Para testar vamos criar um simples servlet que vai estabelecer a conexão e se der tudo tudo certo, não veremos nenhuma exceção e será impresso uma mensagem.
Mas, antes disso criamos uma pagina .jsp que chama o servlet. Fizemos isso para ser mais rápido e e simples. Já que precisamos apenas saber se o nosso pool está funcionando corretamente.
Servlet.java
-
crie um package br.com.servlet
-
Crie um servlet TesteAPP conforme abaixo:
public class TesteAPP extends HttpServlet { private static final long serialVersionUID = 1L; public TesteAPP() { super(); // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { Conexao.getConnection(); System.out.println("conexão estabelecida com sucesso"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace();}}
note: Se usou o assistente do eclipse para criar um servlet, fique atento se não mudou o <url-pattern> . Caso não tenha feito este leva o mesmo nome da class Servlet.
Index.jsp
Apenas encaminha a solicitação para o servlet TesteAPP
Execute o projeto, e veja o resultado esperado.
Note: Não esqueça de verificar se o Banco de dados foi iniciado. Ou seja, deu start no BD? Senão vai receber uma exceção: Communication failure link
Simples não? Vou ficando por aqui e espero que tenham gostado do post.
Abraços, see you next post. :).