Guia prático: Conexões com BD em Java

Pessoal

Veja neste artigo.

O que você NÃO PODE FAZER e o que você DEVE fazer na hora de desenvolver sua DAO, ou até mesmo se estiveres programando sem nenhum conceito de MVC.

Vamos pegar o exemplo do ORACLE, existem alguns erros que podem ser evitados com boas práticas de programação, são eles:


ORA-12537 - Conexão fechada

ou

ORA-02067 - RollBack ou commit necessário.


Vamos começar do começo, levando em conta que um Pool de conexões é utilizado para gerenciar o numero de conexões que existem entre o banco de dados e a aplicação, deve-se saber que uma conexão, em um container web para Java, tanbém é um Objeto java. Esse objeto precisa ser usado e depois liberado. É preciso que você saiba quando fechar uma conexão, falando em transações, é preciso saber quando você precisa usar uma transação, quando você precisa commitar uma transação e quando você precisa fazer o rollback da mesma. Lembrando que a hora certa de encerrar uma conexão tanbém é importantíssima.


O ideal


Hoje em dia, o mercado já disponibiliza adminsitração de contextos transacionais nos frameworks existentes, o EJB por exemplo, possui conceitos próprios que evitam esse tipo de problema citado acima, a sigla EJB CMP e EJB BMP tem significados muito importantes, vejamos o que significam:

EJB CMP: Enterprise Java Beans - Container Managed Persistence: Beans que possuem o controle de persistência e transações à cargo do container. Ou seja, o servidor de aplicações Java EE é quem controla as transações de banco, o desenvolvedor só precisa executar as ações correspondentes de banco MERGE, PERSIST, DELETE, executeUpdate através de native querys, etc. Esse modelo é o recomendado para programadores iniciantes (e até experientes), pois traz a garantia de que os problemas citados acima nunca ocorrerão e a probabilidade de seu sistema "DERRUBAR" outro, eu considero como NULA.

EJB BMP: Enterprise Java Beans - Bean Managed Persistence: Beans que têm o controle de persistência e transações definidos em sua própria estrutura. Deste modo o programador obrigatóriamente precisa saber o que esta fazendo, assim como ele ja deveria saber quando programa sem auxílio de nenhum framework ( Na minha visão EJB é um serviço de série e não opcional, mas essa é opinião pessoal ). Em resumo, o desenvolvedor programa explicitamente o início da transação, a execução das ações na mesma, o commit dela e precisa prever excessões e tratá-las da melhor forma. O Container não irá interferir, o que estiver em seu código será executado. Não recomendado para usuários que "Não leem o manual" antes de iniciar o desenvolvimento.


Vamos ao código de braço:

Scriplets:

COMO FAZER UMA TRANSAÇÃO:



// Insira um bloco de tratamento

try {

} catch (ExceptionApropriada e) {
// tratamento apropriado
e....
}

// Não esqueça de inserir o bloco finally

try {

} catch ... {

} finally {
}

// Execute as funções na ordem correta


try {
// 1 - Abra a conexão


// 2 - Execute seus SQLS update, insert, delete, selects, na ordem que julgares necessária

// 3 - Execute comando de commit

} catch ... {

// 4 - Ocorreu um erro.. nao exite, efetue o rollback aqui

minhaConexao.rollback();

} finally {

// 5 - Encerre as conexões
// 6 - retire da memória objetos que incluam a conexão (preparedStatements, Statements, etc)

// 7 - Informe-se da necessidade de como retornar essa conexão ao pool (se com autocommit, se sem autocommit, vide leitura do link abaixo)


con.setAutoCommit(true);
con.setAutoCommit(false);


}


Dúvidas:
Acesse o site da SUN e leia o manual:



Abraço pessoal.

E juízo ao desenvolver seus códigos. Com banco de dados não se brinca. Não se esqueça, "Leia o manual".

Por Polentero (http://www.polentero.com.br).

Nenhum comentário: