Esteban's Weblog

Comentarios, pensamientos e ideas escritas sobre lo que pueda ser interesante...



20030804 Monday, 04 August 2003

Programando
» Transacciones I ( 04-08-2003 05:08 ) Permalink Comentarios [3]

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.


URL de la referencia: http://weblogs.javahispano.org/estebant/entry/transacciones_i
Comentarios:

Hola Esteban!!

Muy interesante y ameno tu articulo... espero que hayan más de este tipo, ya que a veces resulta un poco palo el leerse articulos largos, ya que en el curro no se puede pasar uno 10 minutos viendolos sin que le digan nada...

Una pequeña cuestión, el método AutoCommit funciona siempre?? Lo digo porque me han comentado que parece ser que hay problemas con algunos drivers JDBC... es eso cierto?

P.D.: una sugerencia ... sería interesante algún artículo de este tipo que explicara el tema de como controlar las conexiones con la BBDD, pool de conexiones, etc.... , pero solo es una sugerencia!!!

Enviado por Juan Carlos en August 09, 2003 a las 11:41 AM EDT #

Juan Carlos, efectivamente el método AutoCommit() y todos los relacionados con el acceso a la base de datos están directamente relacionados con el driver JDBC que se utilice, dependiendo del driver y de su versión se podrán realizar unas cosas u otras.
En mi caso todas las pruebas (y mi entorno de desarrollo) está basado en MySQL 4.0.13 con el driver 3.0.8.
Respecto a tu sugerencia, tomo nota, para otros posibles posts-java-info.
Y felicidades por tu certificación... !!!
;-)

Enviado por Esteban en August 09, 2003 a las 12:50 PM EDT #

Al igual que Juan Carlos, espero que haya mas artículos de este tipo, y sobre todo conteniendo el código de los ejemplos...
Y una pregunta, ¿Alguna web donde poder consultar ejemplos/tutoriales sobre utilizacion de librerias de etiquetas?
Gracias

Enviado por Alicia en August 12, 2003 a las 06:22 AM EDT #

Enviar un comentario:

Nombre:
Correo electrónico:
URL:

Su comentario:

Sintaxis HTML: Deshabilitado
Pato de goma

Calendar

« March 2010
SunMonTueWedThuFriSat
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
   
       
Hoy

Comic

Haz clic para ver la tira cómica completa

RSS Feeds

XML
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




    jH Weblogs
  • Copyleft (c) 2003. Esteban