Várias transações no mesmo Connection (Firebird JDBC)
8 respostas
raci0nal
Olá,
Tenho uma aplicação onde vou utilizar uma mesma conexão ao banco (Connection) para executar vários comandos.
Gostaria de saber como fazer um controle transacional entre a execução destes comandos (PreparedStatement).
Por exemplo:
Minha conexão:
Connection con = getConexao();
con.setAutoCommit(false);
Comando 1:
Cara você pode utilizar um facade para fazer esse controle transacional para você, ai você poderá executar n comandos, alterar a classe de negocio tranquilamente.
Bons Códigos.
raci0nal
Não saquei como eu faria isso com Facade…
Poderia me indicar mais ou menos como ficaria?
Algum exemplo?
Abraços e obrigado pela atenção!
Marcos A. C. Jordão’’
rodrigo_corinthians
Cria uma classe que recebe um Connection como parâmetro e implementa 3 métodos(commit, rollback e close) daí vc faz todo o controle dentro deles ou melhor usa o controle de transação do Spring, JOTM, JTA existem n opções melhores do que trabalhar diretamente com Jdbc…
raci0nal
É, realmente estou pensando em abandonar a JDBC mesmo.
Estive testando o Hibernate e me pareceu muito bom, inclusive o lance das transações funcionou perfeitamente.
Deu um pouco de trabalho para configurar, mas funcionou… e principalmente os meus DAOs ficariam muito mais simples.
Só fico meio com medo de abandonar a SQL que eu amo tanto…
Obrigado pelas informações.
Marcos A. C. Jordão’’
rodrigo_corinthians
Então mas usando o Hibernate vc poderá continuar usando o seu amado Sql normalmente, lógico que muitaaaa coisa o Hibernate já deixa pronto pra vc…
Realmente o Hibernate me pareceu bastante interessante e versátil.
A princípio me dei um pouco mal com a configuração, resolvi sair fazendo e só dei cabeçada.
Depois parei, procurei e li alguma documentação (esta aqui foi muito boa)
e consegui configurá-lo sem problemas, funcionando perfeitamente com o Firebird.
Agora vou portar o projeto para ele (só precisarei alterar os DAOs graças à programação em camadas) e me aprofundar mais no uso do Hibernate.
Marcos A. C. Jordão’’
Y
Yky_Mattshawn
[dummy-comment]
Acho que o mais correto é você usar Savepoint’s.
Você executa o primeiro comando. Cria um Savepoint para a conexão. Aí então executa o segundo comando.
Se tudo der certo como tem que ser, simplesmente dê um commit e comita tudo. Senão, faça um rollback para o Savepoint e dá um commit, comitando apenas o primeiro comando.
Acho que vai dar bem menos trabalho do que utilizar Hibernate. ^^
Não havia lido o último parágrafo do primeiro post. :?
raci0nal
Justamente…
Talvez se eu eu fizesse o caminho “inverso” daria certo.
Tipo, dando “rollback()” nos SavePoints que eu não quero e no final um “commit()”.
Não testei, então não sei afirmar se isso “comitaria” só o que não foi “rollbackeado”… contudo, no meu ponto de vista é uma solução inviável.
Como já tinha vontade de utilizar o Hibernate, vou tentar… pelo que vi não dá tanto trabalho assim, pelo contrário facilita em muito quando analisado à longo prazo.