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

Concurrencia en Servlet

Estas en el tema de Concurrencia en Servlet en el foro de Java en Foros del Web. Buenas, tengo un servlet que realiza una serie de operaciones en el doPost. Entre ellas, obtengo un byte[] y lo guardo en memoria. Para ello ...
  #1 (permalink)  
Antiguo 23/01/2012, 06:49
 
Fecha de Ingreso: enero-2008
Mensajes: 9
Antigüedad: 16 años, 11 meses
Puntos: 0
Concurrencia en Servlet

Buenas,

tengo un servlet que realiza una serie de operaciones en el doPost. Entre ellas, obtengo un byte[] y lo guardo en memoria. Para ello tengo un Bean.

public class MyBean {
private byte[] datos;

public MyBean (){}

public byte[] getDatos() {
return datos;
}

public void setDatos(byte[] datos) {
this.datos= datos;
}
}


En el servlet, lo que hago para guardar en memoria esos datos, en resumen es:

MyBean mybean= new MyBean ();
mybean.setDatos(bytearray);


Tengo que controlar bien que si varios usuarios entran en la aplicación a la vez, no haya problemas y unos se machaquen a otros ese dato.

En teoría, aunque varios usuarios llamen al mismo servlet a la vez, al haber hecho un new del Bean, evito que unos se machaquen a otros, ¿no? ¿Debería hacerlo de otra manera, o añadir algo más para evitar ese problema?

Gracias por la ayuda!
  #2 (permalink)  
Antiguo 23/01/2012, 07:10
 
Fecha de Ingreso: enero-2012
Mensajes: 5
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Concurrencia en Servlet

Muy buenas Silvia.

A priori hasta donde yo se cada ejecucion del servlet es un hilo diferente y las variables y objetos que se creen son propias de ese hilo de ejecucion, con lo cual no tendrias ningun problema siempre y cuando ese mismo objeto lo uses en el mismo servlet y no en otro servlet o peticion distinta.
Con lo que tienes que tener cuidado es con la modificacion de variables u objetos estaticos

Saludos
  #3 (permalink)  
Antiguo 23/01/2012, 08:54
 
Fecha de Ingreso: enero-2008
Mensajes: 9
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Concurrencia en Servlet

Buscando en google me he encontrado con una explicación como ésta, que os pongo aquí por si sirve de aclaración:


Los servlets se ejecutan en un entorno multihilo. El heap es compartido por todos los hilos de ejecución y sólo los parámetros de los métodos y variables de ese ámbito son exclusivas del hilo. Entonces, el declarar atributos en la clase Servlet, hará que esos atributos sean compartidos por todos los hilos de ejecución.

Es decir, que parece que los únicos problemas pueden estar si declaro variables a nivel de clase, que se pueden sobreescribir según se ejecuten los hilos. Pero no hay problema con las variables que se declaran dentro del doPost o doGet, que siempre serán locales y propias de cada hilo.

Si no estoy en lo cierto, por favor, que alguien me corrija.

Por otra parte tengo la clase Bean que comentaba. ¿Me confirmáis que haciendo un new de esa clase, creo una instancia de la misma, y por tanto, los sets no se sobreescribirán unos a otros cuando distintos usuarios ejecuten a la vez el servlet?

Es que después de leer y encontrar ejemplos con synchronized, dá la sensación que hay que ponérselo a todo para evitar problemas de concurrencia.
  #4 (permalink)  
Antiguo 24/01/2012, 01:55
 
Fecha de Ingreso: enero-2012
Mensajes: 5
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Concurrencia en Servlet

Yo no me expreso igual de bien pero te aseguro que en el ejemplo que pusiste, no vas a tener problemas de concurrencia.

Efectivamente si declaras una variable de clase, esta si es compartida entre todos los hilos, cosa que en mi respuesta anterior no puse porque no cai en ello, pero en el ejemplo que ponias en tu anterior post no vas a tener ningun problema, yo he hecho muchos servlets y eso es asi.

El texto ese que has encontrado en internet es la explicacion perfecta.

Perdona si en el mensaje inicial no te lo aclare debidamente.

Un Saludo
  #5 (permalink)  
Antiguo 24/01/2012, 10:02
 
Fecha de Ingreso: enero-2008
Mensajes: 9
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Concurrencia en Servlet

Tranqui, te explicaste muy bien. Muchas gracias por la ayuda!

Cita:
Iniciado por luisvrluven Ver Mensaje
Yo no me expreso igual de bien pero te aseguro que en el ejemplo que pusiste, no vas a tener problemas de concurrencia.

Efectivamente si declaras una variable de clase, esta si es compartida entre todos los hilos, cosa que en mi respuesta anterior no puse porque no cai en ello, pero en el ejemplo que ponias en tu anterior post no vas a tener ningun problema, yo he hecho muchos servlets y eso es asi.

El texto ese que has encontrado en internet es la explicacion perfecta.

Perdona si en el mensaje inicial no te lo aclare debidamente.

Un Saludo

Etiquetas: concurrencia, 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 10:33.