Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Aplicacion encima procesos

Estas en el tema de Aplicacion encima procesos en el foro de Java en Foros del Web. Buen día. Espero alguien pueda orientarme un poquitin para resolver mi problema. Tengo una aplicación web desarrollada con java (jsp, servlets) + oracle y hago ...
  #1 (permalink)  
Antiguo 02/12/2014, 13:13
Avatar de lucy87  
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 13 años, 6 meses
Puntos: 0
Aplicacion encima procesos

Buen día.
Espero alguien pueda orientarme un poquitin para resolver mi problema.

Tengo una aplicación web desarrollada con java (jsp, servlets) + oracle y hago reportes con iText.
Sucede que si se ejecuta un reporte en una sesión, y en otra sesión el mismo reporte, los resultados que se muestran se enciman :(

Ejemplo.
Si ejecuto el reporte de asistencia en una sesión del 01 al 31 de octubre, y en otra del 01 al 30 de enero, el reporte sale con las fechas así:
01/10/2014
02/10/2014
01/01/2014
03/10/2014
02/01/2014
03/01/2014

siendo que en un reporte solo debería venir de octubre, y otro de enero.
Muchas gracias y espero q alguien me pueda ayudar un poco
  #2 (permalink)  
Antiguo 02/12/2014, 15:06
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Aplicacion encima procesos

Buenas,

Parece que tienes una condición de carrera.

¿No estarás utilizando por casualidad variables de instancia en los servlets?

Ten en cuenta que los servlets funcionan con una sola instancia, que se ejecuta en un pool de threads, por lo que las variables de instancia son compartidas por todas las peticiones/sesiones.

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 02/12/2014, 15:33
Avatar de lucy87  
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Aplicacion encima procesos

:o Muchas gracias!

Asi declaro variables al inicio:
Código Java:
Ver original
  1. @WebServlet("/Reporte")
  2. public class Reporte extends HttpServlet {
  3.  
  4.     private static final long serialVersionUID = 1L;
  5.     private static Connection con = null;
  6.     int idusuario;
  7.     int numeroDias;
  8.     int nopag = 0;
  9.     int serie = 0;
  10.     int vacac = 0;
  11. .......

Ya después en el metodo doPost vuelvo a declarar otras variables donde convierto datos y asi... cual es la forma y el lugar correcto para declararlas y que no comparta las instancias entre sesiones??

Mil gracias.
  #4 (permalink)  
Antiguo 03/12/2014, 01:34
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 10 años, 4 meses
Puntos: 182
Respuesta: Aplicacion encima procesos

Buenas,

Deberias declarar esas variables como variables locales dentro del doPost (o del metodo en el que generas el informe, imposible de decir sin ver el codigo) y pasarlas como parametros a los metodos que las necesiten.

Respecto al objecto connection static, entiendo que abres la conexion en el init() del servlet y mantienes la conexion abierta siempre. Eso no es para nada eficiente, ya que todas la sesiones van a reusar la misma conexion y puede haber bloqueos. Ademas, si por algun motivo la conexion se corta, tendrias que reinciar el servidor para recuperar la aplicacion.
Lo mejor seria que lo implementes usando un pool de conexiones (en Tomcat, por ejemplo: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html), aunque si tienes muy pocos usuarios supongo que como lo tienes te servira...


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 04/12/2014, 15:04
Avatar de lucy87  
Fecha de Ingreso: mayo-2011
Mensajes: 25
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Aplicacion encima procesos

Muchisiimas gracias por tu explicación!! efectivamente, al meter todas las variables en el doPost, y enviarlas como parámetro en los otros métodos que las necesitaban ya no me hacia eso a la hora de generar reportes al mismo tiempo.

Gracias por el dato del pool de conexiones, ya lo estoy implementando pero con glassfish.

Gracias de nuevo.
Saludos :)

Etiquetas: glassfish, itext, oracle10g, servlet
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 03:20.