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:
Postar um comentário