Atomicidad a través de los servlets.

Alex
31 de Agosto del 2005
Necesito hacer una serie de servlets que:
1º) Obtenga una conexión y pase a un JSP
2º) Lea datos haga queries y pase a un JSP
3º) Lea más datos y haga más queries y pase a JSP
4º) Dé Commit o rollback.
Tiene que ser atómico. Hasta ahora había pensado en usar una clase estática con sus métodos sincronizados, que meta la conexión en una Hastable, pero el problema es cómo identificar al servlet que debe recibir la conexion......... no sé si me explico.......

De todos modos si alguien tiene una idea sobre cómo hacer eso sin perder la atomicidad (ni usar EJB xq no puedo, usamos IPlanet 4..... joder que atraso)

Gracias por vuestro tiempo

mrx345
31 de Agosto del 2005
Saludos...

No se si te entendí bien, pero de todas formas espero que esto te sirva de ayuda.


Según lo que entiendo es que debes crear una aplicación en la cual el usuario va navegando secuencialmente por varios jsp y/o servlets donde solo se debe hacer commit al final (cuando se procese la ultima jsp o servlet).

En este caso la atomicidad es a nivel procesal. Los métodos sincronizados son para evitar el hecho de que dos “usuarios de dicho método” accedan a un recurso o funcionalidad al mismo tiempo.


Para la implementación recomiendo que tengas una conexión activa para todo el proceso, esta puede estar disponible a través de métodos estáticos al estilo de pool de conexiones (como en tu idea) una característica importante para esta conexión es que esta debe tener el Auto Commit en false.

Luego puedes crear una variable y almacenarla como un atributo de session y le asignas un valor cada que pase por una jsp; al final en la ultima jsp se comprueba su valor y dependiendo de este realizas commit o no

Este commit afecta a todas las transacciones de base de datos que hayas realizado siempre y cuando se hayan hecho con la misma conexión

Ejemplo:

Usuario pasa por JSP 1 miVaribleControl = 1
Usuario pasa por JSP 2 miVaribleControl = 2
Usuario pasa por JSP 3 miVaribleControl = 3
Usuario pasa por JSP 4 miVaribleControl = 4...

Si sucede algún error en cualquier jsp se podría redireccionar a un servlet que genere una pagina de error, realice un rollback o limpie los atributos de la sesión etc.

Espero que te sirva de ayuda