Esteban's Weblog
Comentarios, pensamientos e ideas escritas sobre lo que pueda ser interesante...

Monday, 04 August 2003
Programando
» Transacciones I
( 04-08-2003 05:08 )
Permalink
Si empezamos por el principio, obviamente, podemos decir que una transacción es un conjunto de operaciones que representan una sola unidad, de forma que si una de ellas, sea cual sea, provoca un error o crea una situación anómala, debe de deshacer las que ya se hayan hecho, para dejar todo como estaba antes de comenzar.
Imaginemos que tenemos una aplicación (tienda online) que accede a una base de datos para realizar diferentes acciones sobre ella: un usuario realiza una compra (pedido) de diferentes productos (líneas de pedido). El primer paso es crear una entrada en la tabla pedido, que representa la cabecera de dicho pedido, y a continuación crear las líneas de dicho pedido en la tabla linea_pedido. Esta sería su secuencia lógica.
Si una vez creada la cabecera del pedido, comenzamos a crear las líneas, y una de ellas, provoca un error (excepción) del tipo que sea, probablemente la acción finalizará y dejará una cabecera de pedido creada con unas líneas que no son las correctas. Es decir tendremos información inconsistente en la base de datos, ya que ese pedido no es correcto.
Si hacemos uso de las transacciones, en nuestro ejemplo, el resultado sería que una vez lanzada la excepción y teniendo en cuenta que la transacción es el conjunto de operaciones contra la base de datos, de forma que o se hacen todas o no se hace ninguna, y en este último caso, se deja todo como estaba la cabecera del pedido cliente y las líneas que se hubieran creado no se guardan en la base de datos, de forma que no se creen registros basura.
Obviamente, el uso de las transacciones está muy ligado a la correcta gestión de las excepciones ya que son manejadores apropiados quien deben de decidir actuar de una forma u otra.
Y como no hay explicación que se precie, sin su ejemplo, aquí está el mismo:
| |
Connection objConn = null;
try
{
// obtenemos la conexión
objConn = getConnection();
// establecemos el commit a false, de forma que somos nosotros quienes decidimos cuando baja la
// información a la base de datos
objConn.setAutoCommit( false );
/* -----------------------------------
// operaciones contra la base de datos
/* -----------------------------------
// transacción sin errores: la damos por finalizada
objConn.commit();
}
catch( Exception e )
{
e.printStackTrace();
// ha ocurrido un error en la transacción: la deshacemos
try { objConn.rollback(); } catch ( Exception ex ) {}
}
finally
{
// pase lo que pase, cerramos la conexión
if( objConn != null )
{
try { objConn.close(); } catch( Exception e ) {}
}
}
|
Obviamente, el mundo de las transacciones tiene mucho más que contar, ya que en la mayoría de los casos son gestionadas por EJBs, o por otro tipos de componentes, pero de momento esto es un primer paso.
|
Calendar
| August 2003 | | Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|
| | | | | | | | 3 | | 5 | 6 | 7 | | 9 | 10 | 11 | | 13 | 14 | 15 | 16 | 17 | 18 | 19 | | | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | | Hoy |
Comic

RSS Feeds
Todo
/Musica
/Libros
/Programando
/General
/Java
Reading
'No logo', de Naomi Klein
'Juicio al poder', de Nuria Almirón
'No me hagas pensar', de Steve Krug
'Pragmatic Programmer', de Andrew Hunt y Davis Thomas
Links
Navigation

|