ayuda clientes simultaneos

hola ,estoy realizando una aplicacion web con jsf e hibernate, que consiste en una tienda virtual.Mi duda es cuando 2 clientes a la vez quieran visualizar los productos de la tienda, el cual muestra el numero de productos que hay disponible en stock de cada producto y quiera ambos comprarlo siendo el numero de producto 1, uno de ellos no podra comprarlo.Para solucionar esto, he pensado utilizar patron singleton.Quiero sus consejos y opiniones si es buena idea utilizar este patron o si teneis otra alternativa, en caso de que os parezca bien como se une el patron a la aplicacion, siendo producto un managed bean de sesion.gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

bloqueo optimista ,pesimista

Hola a todos, para resolver este problema , estoy viendo el tema concurrencia de hibernate, pero tengo una duda entre el bloqueo pesimista y optimista. He leido que el bloqueo pesimista solo permite el acceso a datos una transaccion cada vez, mientras en el caso del optimista no lo entiendo bien , ya que estos son verificados, mientras los datos son escritos. No sé si en el caso de mi ejemplo, que debo utilizar. Si me podeis ayudar a comprender esto, me sería de gran ayuda.

Saludos

Que tal teresa. En el

Que tal teresa.

En el bloqueo optimista ( optimist locking ) se piensa "todo va a salir bien" y simplemente se deja que se cambie el registro en la bd. Si alguno de los dos clientes hace la operación después de otro, este generalmente recibe un mensaje tipo "El producto ya no está disponible" ( por decir algo )

En el bloqueo pesimista ( pessimistic locking) se piensa "todo va a salir mal" y uno de los dos clientes recibe el mensaje antes de intentar la operación. Este por ejemplo se puede ver cuando estas queriendo ver un producto y sale un mensaje de "el producto está siendo modificado por otra persona".

Claro esto que te estoy diciendo es a muy alto nivel y se puede implementar a diferentes niveles.

Muy bajo en la base de datos con pesimista, cuando se hace el select, el primero que lo gana lo bloquea y al segundo ya no le aparece. En el optimista le aparece a los dos. Al salvar, en el pesismista solamente el que lo obtuvo primero puede modificarlo ( el segundo no lo ve para empezar ) En el optimista como le aparece a los dos el primero escribe y el segundo sobreescribe ( me parece que no es lo que deseas ) .

A un nivel intermedio, puede haber un controlador intermedio que haga este bloqueo y la base de datos ni se entera, para ello es necesario que los dos clientes accedan por el mismo lugar y haya una forma de compartir el estado.

Y por ultimo a un nivel alto, la pagina misma ( o el cliente final pues ) recibe una notificación de que lo que está viendo o no esta accesible en ese momento ( pesimista ) o que sus datos pueden ser modificados eventualmente ( optimista )

Quizá lo mejor sería que si la cantidad de productos es 1 ejecutar un bloqueo pesimista con alguna especie de control de tiempo diciendole, "tiene X minutos para realizar su compra"

Es complejo y sobre todo dar una recomendación general.

Sé que no te sirve de mucho pero espero que alguién más pueda dar más luz sobre esto.