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

Concurrencia de usuarios, aplicacion web

Estas en el tema de Concurrencia de usuarios, aplicacion web en el foro de Java en Foros del Web. Hola, tengo un problemilla con una parte de codigo y quiza es que no estoy planteando bien la solucion a mi problema. Estoy realizando una ...
  #1 (permalink)  
Antiguo 24/03/2009, 05:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Concurrencia de usuarios, aplicacion web

Hola, tengo un problemilla con una parte de codigo y quiza es que no estoy planteando bien la solucion a mi problema. Estoy realizando una aplicacion web con struts. y mi problema es que cuando varios usuarios quieren acceder a la vez a una determinada parte del codigo, quiero que solo uno de ellos pueda acceder y el resto esperen hasta que este termine. lo he hecho con "synchronized" pero no se si será lo más correcto...

Código PHP:
synchronized (this) {
Integer i=null;

//si es 0, no se pudo realizar la inscripcion y dará error
//si hay algun otro ejecutandose esperara a que termine,simulamos 15 segs
        
System.out.println("esperando");
        for(
i=0;i<=15;i++){
        
wait(1000);
        
System.out.println("-seg"+i);

        }
            
System.out.println("fin de la espera");
        if(
correcto()!=0){

            
n=services.confirmarReserva(vo);

        }
        if(
correcto()==|| n==0){
                                    
services.eliminarReserva(vo);

                                    
ActionMessages errors = new ActionMessages();
                                    
errors.add("errores", new ActionMessage("errores.NoValido"));
                                
saveErrors(requesterrors);
        }

        } 
  #2 (permalink)  
Antiguo 24/03/2009, 05:56
Avatar de TresPuntoDos  
Fecha de Ingreso: septiembre-2008
Ubicación: Madrid, España
Mensajes: 242
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: Concurrencia de usuarios, aplicacion web

Ese modificador de acceso es justo el que hace lo que quieres, solo 1 thread a la vez puede entrar con lo que siempre estara bien, supuestamente...

Digo lo de supuestamente porque hay casos en los que no te funcionaria pero para lo que estas haciendo no tendrias que tener ningun problema
__________________
Tres punto Dos - Mi Blog sobre J2EE, Java, Struts y Diseño Web
Proyecto BloJ - Crea tu blog Java
  #3 (permalink)  
Antiguo 24/03/2009, 06:28
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Concurrencia de usuarios, aplicacion web

Bueno el caso es que no me funciona, por eso puse el Post, pruebo a ejecutar dos usuarios a la vez y no tienen problema en acceder a ese apartado de codigo en el mismo tiempo.
Ahora ya tengo la duda, pero cada usuario creará su propio thread de ejecucion, no?, y si cada uno crea uno diferente no deberían poder acceder a la vez a ese código, pero lo hacen :S. Probe a cambiar el objeto de "synchronized" pero me daba error en el wait.

alguna sugerencia?
gracias por contestar 3 punto 2
  #4 (permalink)  
Antiguo 24/03/2009, 06:50
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Concurrencia de usuarios, aplicacion web

El asunto es... ¿Estás creando un único objeto con ese código o cada thread tiene diferentes instancias?
  #5 (permalink)  
Antiguo 24/03/2009, 06:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Concurrencia de usuarios, aplicacion web

Pues lo cierto es que no controlo demasiado de esto. Pero esa parte del codigo la ejecuto desde una funcion de un action. Cada usuario en la utilización de la aplicación al acceder a esa acción digo yo que creará un objeto diferente, por lo cual yo imagino que será otro hilo, pero ya te digo que no tengo demasiada certeza...
  #6 (permalink)  
Antiguo 24/03/2009, 07:12
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Concurrencia de usuarios, aplicacion web

¿Struts 1 o Struts 2?
  #7 (permalink)  
Antiguo 24/03/2009, 07:27
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Concurrencia de usuarios, aplicacion web

Strut 1 :)
  #8 (permalink)  
Antiguo 24/03/2009, 09:30
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Concurrencia de usuarios, aplicacion web

Ohm, espera, espera, espera... No me había fijado en esto...

¿Estás haciendo synchronized(this) y dentro wait()?

Es que wait() precisamente libera el objeto de sincronización! O sea, wait es para poner el hilo actual en espera, sí, pero además el otro efecto que tiene es el de renunciar al bloqueo sobre el objeto sincronizado. Si tú estás haciendo la sincronización sobre this y luego el wait, entonces no sirve de mucho.


¿Se entiende? Es que no sé si me he explicado muy bien...
  #9 (permalink)  
Antiguo 24/03/2009, 10:18
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Concurrencia de usuarios, aplicacion web

:SSS

No jorobes jejeje, el wait es simplemente para simular el tiempo que estaría uno de los usuarios dentro de ese espacio de codigo. es que era una buena forma de controlarlo, pero no pense en eso. Además es la primera vez que toco sincronización en java y ando un pelin perdidillo.
Gracias y probare de otra manera la concurrencia
  #10 (permalink)  
Antiguo 24/03/2009, 10:32
 
Fecha de Ingreso: agosto-2008
Mensajes: 57
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Concurrencia de usuarios, aplicacion web

Perfecto ya lo resolvi, tenias toda la razon. En ningún momento pense que eso fuese lo que lo desbloquease...

por si alguien lo necesita para el tiempo de espera utilice

try{
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
};

con eso espera un segundo. Lo he comprobado y ya se queda esperando el segundo usuario hasta que el primero termina.

gracias!
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 21:27.