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:
MySql + Java
Criando dynamic web project
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. :).