Problema con Actualización de la información en una Página JSF

Que tal, acudo a ustedes por que nuevamente tengo un problemilla que no le encuentro por donde.

Hay un sistema de inventario en java ya algo viejito que corre en jboss 4.03SP1, y hay un apartado web para realizar solicitudes. Para la parte web se utiliza JSF con la implementación MyFaces que trae tomcat de esa version de jboss. El problema es el siguiente:

En la parte web, hay un bean que muestra la cantidad disponible de los materiales y en base a eso se hacen solicitudes de material. Me estan reportando que al solicitar la información les marca el error de que se esta intentando solicitar mas de lo existente, siendo que la página web no te deja pedir mas de lo existente, por lo que entonces la página web está mostrando las cantidades iniciales de ese material. Me mandaron dos capturas de pantalla de un mismo instante, una del cliente donde le aparece la información erronea y otra desde la red local donde si aparece la información actualizada.

Yo por mas pruebas que hago no logro reproducir el problema y queria preguntarles si ustedes han tenido un problema similar. Además hay otros factores que juegan en el asunto, como por ejemplo el servidor jboss no es visible desde internet, para ello utilizamos apache con el modulo proxy_html, el cual habia trabajado bien durante años, este problema tiene una semana. El cliente está tras el firewall de su empresa (tal vez tambien un proxy no lo se a ciencia cierta), además de que están utilizando windows 7 con su internet explorer. Yo ya hize pruebas desde linux, winxp, win 7 y como dije, no logro reproducirlo y no encuentro información en el internet al respecto, por eso decidí preguntar aquí.

Gracias de antemano a quien se moleste en leer mi problema.

Saludos

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de benek

Bugfoot

Creo que estás buscando al Bugfoot (o sea como el bigfoot, pero en bug): "A bug that isn’t reproducible and has been sighted by only one person."

http://www.globalnerdy.com/2010/05/09/new-programming-jargon/

Lol, a mi no me ha pasado.

Imagen de benek

Tratando de encontrar la solución

Ya en serio, tratando de encontrar el meollo del asunto, se me ocurre preguntar:

¿Tu bean es de sesión?

En las partes donde se maneja la cantidad pedida, ¿revisaste si se se hacen las asignaciones con = y no con +=?

Es lo que se me ocurre hasta el momento.

Salute.

Imagen de iberck

Threads - Race condition

Es probable que tengas un problema de race condition, revisa el siguiente tema:

http://www.cs.unm.edu/~markidis/lab13.html

Imagen de ezamudio

cache

Otra posibilidad es que el cliente externo vea datos que de alguna forma se quedaron en el cache de su navegador... pero yo también le voy a lo que dice iberck de race condition.

Imagen de Nopalin

Hmm yo le voy mas al cache

Leyendo sobre race conditions, me llamó la atención este apartado:

A race condition is a situation in which two or more threads or processes are reading or writing some shared data, and the final result depends on the timing of how the threads are scheduled.

.

Se que la implementación maneja threads, pero yo no los manipulo directamente. Además el bean es de tipo sessión por lo que la información no debería ser compartida.

En los 5 años que ha estado corriendo el sistema es la primera vez que me reportan algo así y este cliente es el único que ha tenido ese problema, si fuera un race conditions tendría que pasar un poco mas seguido y a diferentes clientes, no?

hmm, por si las moscas, nunca he confiado en el internet explorer así que les recomendé que utilizaran firefox (ninguna prueba es mala cuando andas buscando al bugfoot jeje) y 3 dias despues no me han comentado nada al respecto, aunque no se si lo hayan instalado por que luego las compañias grandes tienen sus estandares de aplicaciones a utilizar.

En fin, gracias por su ayuda.

Saludos

Imagen de iberck

Se que la implementación


Se que la implementación maneja threads, pero yo no los manipulo directamente.

No te confundas, cada petición desde un navegador es un thread que opera sobre la misma instancia de un servlet, esto es parte de la implementación de los servlets y dichas instancias no son lanzadas directamente por el programador


En los 5 años que ha estado corriendo el sistema es la primera vez que me reportan algo así y este cliente es el único que ha tenido ese problema, si fuera un race conditions tendría que pasar un poco mas seguido y a diferentes clientes, no?

No es frecuente que haya race-conditions cuando existen pocas peticiones simultaneas en el sistema ,sin embargo se pueden presentar y las consecuencias suelen ser fatales

Ojala que se resuelva tu problema con cambiar de IE a FF aunque sinceramente lo dudo mucho, el consejo que te doy es que revises nuevamente tu código .... por si las dudas

Imagen de Nopalin

Gracias por tu ayuda

A lo que me refiero con que yo no manipulo directamente los threads es que yo no creo threads. La especificacion de JSF dice que hay un servlet llamado FacesServlet, que es el encargado de recibir todas las peticiones y de procesarlas, en base a las reglas que se hayan definido. Cuando definies un bean con scope request, te dice que se crea ese bean y al terminar el request se destruye. Cuando tienes uno de tipo session, este se mantiene hasta que lo invalides o termines la sesión, donde este objeto no es compartido entre sesiones.

Si vamos a pensar que pueda ser un race condition (donde su definicion dice claramente que solo ocurren cuando dos threads manipulan la misma información, que según yo no es este caso) estamos pensando en posiblemente un bug en la implementación de JSF, que los beans de session los este compartiendo entre diferentes sessiones/threads, lo cual creo menos probable.

En fin, gracias por tu tiempo, aunque el cliente sigue sin cambiar a firefox y es el único que presenta ese problema.

Sobres

Imagen de iberck

A lo que me refiero con que


A lo que me refiero con que yo no manipulo directamente los threads es que yo no creo threads

Y yo me refiero a lo mismo, aunque tu no crees directamente threads no quiere decir que no puedas tener race-conditions


Si vamos a pensar que pueda ser un race condition (donde su definicion dice claramente que solo ocurren cuando dos threads manipulan la misma información, que según yo no es este caso) estamos pensando en posiblemente un bug en la implementación de JSF, que los beans de session los este compartiendo entre diferentes sessiones/threads, lo cual creo menos probable.

Yo no me refiero a que el bean de sesión comparta sus datos entre 2 threads, me refiero a que la operación que realiza la suma (o la operación aritmética que no te está cuadrando) probablemente tiene un race-condition

Si te quieres quitar de dudas de una buena vez, has una prueba de stress sobre la aplicación (obvio que implique varios threads)