Java - Multiples accesos

 
Vista:

Multiples accesos

Publicado por Mónica (15 intervenciones) el 20/12/2001 05:17:38
Tengo multiples accesos a unos servlets, tengo un clase donde guardo mucha informacion con variables estaticas. ¿Q podria hacer para q cada vez q se hace un acceso al mismo servlet a la vez no me machaque la informacion q tenia de antes? La variables no las puedo hacer locales porque sino al construir la clase donde recoja la informacion me las inicializa.
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Multiples accesos

Publicado por Antonio (51 intervenciones) el 20/12/2001 08:04:46
Veamos. Si las variables las declaras en el servlet, pero no estáticas, no se machacan nunca, ya que el servidor web ejecuta el mismo servlet en threads diferentes y por tanto crea un instancia en memoria diferente para esas variables.
Si las declaras estáticas la zona de memoria es siempre la misma y por tanto se machacan unas a otras.
Es decir:
Opción 1: Declarar las variables como private pero no estáticas dentro del servlet y no te preocupes que aunque el servlet se ejecute 25 veces simultáneamente no se machacaran.
Opción 2: Declarar las variables estáticas. Entonces sí se machacaran unas a otras, y para evitar eso tienes que crear el servlet implementando la interfaz SingleThreadModel, que produce que el servidor web (la máquina virtual java en realidad) solo ejecute un servlet a la vez, es decir no utiliza threads, y por tanto las variables estáticas no se machacaran. Para crear un servlet de esta manera lo tienes que hacer asi:
public class Servlet1 extends HttpServlet implements SingleThreadModel
{
}

Espero haberte sido de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiples accesos

Publicado por Jon (68 intervenciones) el 21/12/2001 05:06:56
>> Si las variables las declaras en el servlet, pero no estáticas, no se machacan nunca, ya que el servidor web ejecuta el mismo servlet en threads diferentes y por tanto crea un instancia en memoria diferente para esas variables.

No. Cuidado!!! El ejecutar diferentes thread no quiere decir que que se creen instancias diferentes del servlet. Tanto las variables estáticas como las no estáticas serán machacadas.

Lo que si que tienes razón es que si implementas el servlet como SingleThread sólo se estará ejecutando un thread a la vez con lo que te estás evitando este tipo de problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiples accesos

Publicado por SirKalibur (2 intervenciones) el 20/12/2001 12:40:14
Si tienes mucho empeño en que las variables sean estaticas (por precondiciones o necesidad) yo utilizaría un tipo vector o list de forma que crearia una nueva variable cada vez que ejecutara el Servlet.

No se si es esto a lo que te refieres, si no lo es esplicoteate mejor plis.

Saludetes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiples accesos

Publicado por Mónica (15 intervenciones) el 20/12/2001 14:04:48
Las variables las tengo en una clase, donde tengo metodos para cambiar el valor y para recoger el valor de una variable. En los jsp pueden ser las variables locales, porque utilizo useBean, pero en los Servlets no pueden ser locales, porque al construir el objeto donde guardo todas los valores se inicializa todas las variables.

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiples accesos

Publicado por Jon (68 intervenciones) el 21/12/2001 05:33:22
Vamos a ver. En los JSPs, al emplear useBean, lo que estás haciendo es asociar un objeto con una sesión, una aplicación o con el request (lo indicas con el parámetro scope).

En el fondo lo que se hace es usar los métodos get/setAttribute de los objetos HttpSession, ServletContext o ServletRequest.

Esto también lo puedes hacer en un servlet. Por ejemplo para una sesión:

Objeto miObjeto;
miObjeto= request.getSession().getAttribute("miobjeto");
if (miObjeto==null) {
miObjeto= new Objeto();
request.getSession().setAttribute("miobjeto",miObjeto);
}

No se si te ha quedado claro....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar