Foros del Web » Creando para Internet » Diseño web »

Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

Estas en el tema de Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno. en el foro de Diseño web en Foros del Web. Estoy realizando una aplicación web con las tecnologías xhtml, JSF, RichFaces, Java, MySQL en un servidor de aplicaciones JBoss. Quiero saber cómo solucionar cuando un ...
  #1 (permalink)  
Antiguo 24/04/2011, 12:27
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 7 años
Puntos: 0
Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

Estoy realizando una aplicación web con las tecnologías xhtml, JSF, RichFaces, Java, MySQL en un servidor de aplicaciones JBoss.
Quiero saber cómo solucionar cuando un proceso se queda incompleto, supongo que a más de un diseñador web le ha ocurrido este problema. Quiero que el proceso sea atómico, o se hacen todos los pasos o que no se haga ninguno.

Pongo un ejemplo resumido para que sea más didáctico:
La aplicación web es para hacer facturas electrónicas.
Voy a tener una tabla "Facturas" con los campos idFactura, fecha, cliente.
Voy a tener una tabla "LineaFactura" con los campos idLineaFactura, idFactura, producto, precio, cantidad. Es decir el campo idFactura indica a que factura pertenece dicho renglón.
La interfaz de la aplicacion web sería:
Primero un formulario donde se rellena la fecha y el cliente. Luego se pulsa un botón (botón1) que guardara los datos en la tabla "Facturas" y redirecciona a otro formulario donde se rellenan los datos producto, precio y cantidad, habrá un botón (botón2) que ponga añadir producto que guardará la línea de factura en la tabla "LineaFactura"una vez añadidos todos los productos que se deseen, por último se pulsará un botón (botón3) para generar un pdf.
Qué ocurre si el usuario de la aplicación no realiza todos los pasos y no llega a pulsar el botón3, ya sea porque ha cerrado el explorador a mitad del proceso o ha cambiado de página manualmente. Pues que en la base de datos si aparecería los datos de la factura, y aparecería como que la factura existe pero no existiría el pdf. Cómo hacer para deshacer todos los cambios en las bases de datos?, cómo sabe la aplicación que el usuario ha cerrado el explorador, para ejecutar un supuesto código para deshacer los cambios?...
Necesito ayuda sobre el tema. Gracias!
  #2 (permalink)  
Antiguo 24/04/2011, 13:07
Avatar de ZoroRoronoa  
Fecha de Ingreso: marzo-2011
Ubicación: California, USA
Mensajes: 823
Antigüedad: 6 años, 8 meses
Puntos: 116
Respuesta: Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

Bueno, cada desarrollador tiene su logica y algoritmo (forma de trabajar).
Y a lo que he leido, no se me ocurren grandes cosas, pero una podría ser:

Pues por que no guardas todos los datos en una funcion y no los guardes en la BD hasta que el usuario pulse el "boton3", de esta manera si el usuario no presiona el boton 3, no se guardara ningun dato en la BD.
__________________
Programador jQuery & PHP
  #3 (permalink)  
Antiguo 25/04/2011, 11:02
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 7 años
Puntos: 0
Respuesta: Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

Gracias ZoroRoronoa! me gusta tu opinión. De todas formas sería interesante que otros desarrolladores dejen su opinión de su forma de trabajar y solucionar ese tipo de problemas.
  #4 (permalink)  
Antiguo 25/04/2011, 19:15
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.108
Antigüedad: 7 años, 7 meses
Puntos: 66
Respuesta: Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

como otra solución, a todos los registrios, un nuevo campo, "el campo finalizado", y este lo pondria a 0 por defecto y solo seria 1 en el caso de que el ultimo paso se completase.
luego es descartar todos los registros no finalizados y correr un script para que de cuando en cuando elimine registros no finalizados con una fecha superior a un dia por ejemplo(para que no elimine a alguien que se encuentra en el paso 2 y todavia está en ello por ejemplo)
no se si me he explicado muy bien

luego también tienes cookies, variables de sesión, hay mil maneras diferentes que se te podrian ocurrir.

pero zorororona te lo ha dicho bien, cada uno que responda te responderá un métedo diferente todos válidos, aunque quizá unos mas que otros, plantéate varios sistemas, no te quedes con el primero y trata de imaginártelos a gran escala, simula su funcionamiento para tratar de ver como podría fallar cada sistema y cual te conviene mas
  #5 (permalink)  
Antiguo 28/04/2011, 06:42
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 7 años
Puntos: 0
Respuesta: Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

Gracias juanito 1712! perdona por no responder antes pero he estado liado con este tema. Tu opinión de poner un campo "flagFinalizado" es buena, te has explicado perfectamente. Al final he hecho una combinación de ambas opiniones. El ejemplo que puse no era el único caso donde se me podían quedar procesos incompletos, así que para unos casos me ha venido bien la opción de zoroRoronoa y para otros la tuya.

Para el que le interese habría que hacer algo del estilo a esto:
select * from Factura f WHERE flagFinalizado = false and DATEDIFF(DATE_FORMAT(NOW(),'%Y-%m-%d'), fecha)>='2'
siendo fecha un campo java.sql.Date cuyo valor sería algo como '2011-04-28' (sin la hora). La consulta anterior selecciona las facturas que se han quedado incompletas y tienen más de dos días. (puse lo de dos días para que no hubiera conflicto si hay un cambio de día mientras se está haciendo el proceso. Por ejemplo la factura se esta creando el dia 27 a las 23:59:50 y y se termina el dia 28 a las 00:01:50) el script de comprobación pensaría que ya ha pasado un día. Pero en realidad han pasado dos minutos desde que se empezo el proceso y se finalizó. No se si me he explicado.
  #6 (permalink)  
Antiguo 28/04/2011, 14:13
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.108
Antigüedad: 7 años, 7 meses
Puntos: 66
Respuesta: Cómo hacer proceso atómico en aplicación web? o todos los pasos o ninguno.

mmhhh bien visto, me lo apunto por si algún día tengo que hacer algo así yo

Etiquetas: pasos, proceso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:12.