sql >> Base de Datos >  >> RDS >> Mysql

Gestión de transacciones con DAOs

Si está utilizando JDBC simple, lo que podría hacer es compartir la misma instancia de Connection en las dos instancias de las clases DAO.

public class EmployeeDAO {

    private Connection conn;

    public void setConnection(Connection conn) {
        this.conn = conn;
    }

    ...
}

public class BankDAO {

    private Connection conn;

    public void setConnection(Connection conn) {
        this.conn = conn;
    }

    ...
}

En el código del cliente, primero debe crear una Connection instancia de objeto. A continuación, debe iniciar la transacción con conn.setAutoCommit(false); . Pase la Connection instancia de objeto a las dos clases DAO. Si no se producen errores en ninguna operación, conn.commit(); , de lo contrario, conn.rollback();

por ejemplo:

Connection conn = null;
try {
    // getConnection from pool

    conn.setAutoCommit(false);

    EmployeeDAO employeeDAO = new EmployeeDAO();
    employeeDAO.setConnection(conn);

    BankDAO bankDAO = new BankDAO();
    bankDAO.setConnection(conn);

    // save employee

    // save bank details

    conn.commit();

catch(Exception e) {
    if (conn != null) {
        conn.rollback();
    }
} finally {
    if (conn != null) {
        conn.close();
    }
}