Esteban's Weblog

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

Todo | Musica | Libros | Programando | General | Java


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.


20030802 Saturday, 02 August 2003

Programando
» El tiempo se me va en... ( 02-08-2003 03:49 ) Permalink Comentarios [1]

En estos momentos tengo varios "proyectillos" de los míos abiertos...

  • Estoy terminando una tienda online.
    Sé que puede parecer simple (que lo es) pero siempre he querido tener un tienda (nada de bajarme una de por ahí) bien hecha sobre la que poder hacer el resto de mis pruebas, e ir añadiendo diferentes módulos (EJBs, etc.)
  • Un simulador de pasarela de pago. Esto no es nada del otro mundo, pero a falta de algo más serio, estoy "haciendo" uno que trate de simular lo máximo posible el comportamiento de una pasarela de pagos tal y como sería (con conexión a otro servidor, timeouts, diferentes formas de pago, etc.)
  • Empapándome de JBoss, XDoclet, Hibernate, OSCache
  • Una aplicación que permite realizar consultas, actualizaciones, etc. contra una base de datos y todo el resultado generado se envie por email. Toda la parametrización está en XML. Esta aplicación se puede incluir en un cron para ejecutarse periodicamente. Obviamente para diferentes base de datos, y todos los posibles casos de posibles situaciones que se puedan dar...
  • Un FrameWork made-in-esteban que de momento hace lo que quiero
Y luego alguna que otra cosa como el ActionScript de FlashMX que me está enganchando, seguir trasteando con PHP, etc.

Si hay sugerencias, por supuesto que serán escuchadas...


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