Error beans de session a través de proxy

Una aplicación web en una empresa de alojamiento Web(JSP-Tomcat-Apache-JDBC-W2000server-SQLServer2000)
Usa Javabeans de sesión para conectarse y gestionar las bases de datos (SQL server vía JDBC).
Cuando se accede desde cualquier punto de España vía modem no hay ningún problema, pero cuando se accede desde una red local dentro de una empresa a través de un proxy ocurre que el resulset que devuelve es siempre el último resulset que se haya creado por cualquiera de la empresa, con lo que al navegar con el resulset (getnext) da un error Nullsception o error de columna invalida del resulset, ya que solicita uno y le devuelve otro. Si se hace click en el icono de actualizar del navegador, el resulset ya si se crea el solicitado y ya funciona bien.
Pregunta=¿Qué diferencia puede existir entre acceder distintos usuarios a través de un mismo proxy y acceder individualmente a través de ADSL o modem normal, para que los beans de scope=session se les esté cruzando los objetos?
He probado : a no usar directrivas includes dentro de las JSP sino poner todo el código en la misma página. También lo primero que hago es crear un nueva conexión antes de crear el resulset.
Yo creo que el proxy debe de tener una cache lo cual confunde a las id de session que maneja el servidor o bien para el servidor todas las solicitudes que vienen del mismo proxy las asigna la misma sesión.
1

1 respuesta

Respuesta
1
Intentare responderte a lo que pueda :). Para asignar la sesión a un cliente, el tomcat envía una cookie al navegador con el identificador de la sesión, es el navegador el que en las siguientes peticiones se lo devuelve. De este modo el tomcat sabe a que sesión tiene que acceder. Si echas un vistazo a las cookies almacenadas, una vez entres en la aplicación, deberías poder comprobar sin problemas si asigna la misma(id session) en diferentes máquinas de la empresa.
Dado que cuando se cierra el navegador, la cookie desaparece, cuando se entra desde ordenadores diferentes, esta no esta asignada. Lo que puede pasar, es que el tomcat vea que la dirección origen es la misma y devuelva el mismo id de sesión (al tener una sesión activa para esa IP), con lo que tienes diferentes máquinas compartiendo y cruzando objetos. No se como funcionara la aplicación internamente para que al actualizar funcione, pero por lo que cuentas, lo más probable es que sea esto.
Para comprobarlo, podrías abrir dos navegadores en la máquina servidora y ver que pasa.
En cuanto a la cookie, la puedes revisar tanto en netscape como en IExplorer, no recuerdo el nombre exacto, pero si es jsession o algo parecido.
Gracias por ayudarme.
Durante estos días he probado de todas las maneras posibles para averiguar el error.
Lo que tu me propones, ya lo comprobé y cada navegador de distintos PC's conectados al proxy Tomcat le da una ID de sesión diferente y debería funcionar.
Al final después de probar muchas combinaciones, y sin saber exactamente el como y el por qué, el problema se soluciona así : Antes de crear un resulset debo de crear una conexión nueva. Yo creo que a través de un proxy la conexión vía JDBC a una misma BD de varios clientes se mantiene de alguna manera la misma para todos, y un resulset se asocia a una misma conexión realizada vía proxy, y si un cliente pide un resulset y el proxy tiene uno en su buffer le da el existente, cruzando así los resulset.
Así que una vez usado un resulset destruyo todos los objetos de su conexión y destruyo el bean de scope=session que realiza la conexión.
bean0.cleanup(); // cierra el resulset y la conexión
sesionOk.removeAttribute("bean0"); //destruye el bean que crea la conexión.
Así al crear un nuevo resulset siempre debe crear una nueva conexión.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas