Para implementar transações devem ser utilizados os seguintes recursos:
IMecanismoPersistencia
MecanismoPersistenciaBDR
RepositorioException
Os quais devem ser utilizados como no seguinte exemplo:
/** * Fachada do sistema */ public class Banco { ... private CadastroContas contas; private IMecanismoPersistencia mp; ... public Banco(..., RepositorioContas repContas,IMecanismoPersistencia mp) { ... this.contas = new CadastroContas(repContas); this.mp = mp; mp.conectar(); } /** * Ao invés de implementar este método, você pode colocar * uma chamada para o desconectar a partir da interface, * imediatamente antes de fechar o sistema. */ public void finalize() { try { mp.desconectar(); } catch(RepositorioException ex) { ex.printStackTrace(); } } ... public cadastrar(Conta conta) throws ContaJaCadastradaException { try { mp.iniciarTransacao(); contas.cadastrar(conta); mp.confirmarTransacao(); } catch(ContaJaCadastradaException ex) { mp.cancelarTransacao(); } } ... }
/** * Exemplo de coleção de dados */ public class RepositorioContasBDR implements RepositorioContas { private MecanismoPersistenciaBDR mp; ... public RepositorioContasBDR() { ... this.mp = MecanismoPersistenciaBDR.getInstance(); } ... public inserir(Conta conta) { String sql = null; PreparedStatement pstmt = null; // ou Statement stmt = null; try { sql = ...; pstmt = (PreparedStatement) mp.getCanalComunicacao(sql); // ou stmt = (Statement) mp.getCanalComunicacao(); ... } catch(SQLException ex) { throw new RepositorioException(ex); } finally { pm.liberarCanalComunicacao(); } } ... }