¿Sabías que no conviene utilizar el modelo SingleThreadModel del API de Servlets y JSP?

Los desarrolladores cuando crean JSPs y Servlets se enfrentan a un reto importante: como sincronizar el acceso de múltiples clientes.

Tradicionalmente se han considerado dos opciones: realizar la sincronización manualmente o implementar el modelo SingleThreadModel.

Cuando un Servlet o un JSP implementan el modelo SingleThreadModel el contenedor web garantiza que nunca habrá más de una petición accediendo a la misma instancia de Servlet o JSP.

Internamente esto se consigue de dos modos: creando una cola de peticiones para entrar a cada Servlet y JSP que implementen el modelo SingleThreadModel o creando un pool de instancias del Servlet de modo que se garantice que a cada instancia accede únicamente una petición.

La primera de las opciones supone una degradación importante de rendimiento por lo que normalmente se implementa la segunda. El problema surge en que con este segundo modelo múltiples peticiones accederan al mismo Servlet simultáneamente ( ojo, no a la misma instancia del Servlet ).

Esto es un problema muy grave ya que los desarrolladores pueden creer que no necesitan sincronizar los elementos compartidos a los que acceden ( por ejemplo bases de datos, variables críticas, etc. ) y sin embargo la realidad es que se está accediendo simultánemanete a dichos elementos desde diferentes instancias del Servlet.

Por lo tanto, la diferencia entre utilizar el modelo SingleThreadModel y no utilizarlo es mínima ya que sigue siendo necesario implementar el código de sincronización. Más importante aún, como hemos visto utilizar dicho modelo puede llevar a engaños y producir problemas de difícil depuración.

No hay comentarios: