Foro sobre Java EE > Dudas Web Service
La ventaja es que tienes el estado del cliente que llama a tu aplicación almacenado y es util para ciertas operaciones como Login (solo hacerlo una vez), transaccionalidad de varias opereciones (especialmente si falla algo y tenes que hacer rollback),
En uno sin estado cada llamada de un cliente a tu aplicación es independiente de cualquier otra que haya hecho. Cada llamada es distinta, por lo tanto en cada llamada por ejemplo tendrás identificar al usuario.
Pero el principal problema va a ser para escalar, o sea si todo lo tienes metido en un servidor todo irá bien pero si tienes que tener un cluster de máquinas para dar más respuesta a todos tus clientes ahí tienes el problema.
Da igual donde guardes el estado siempre tendrás un problema, en algunos menos si lo haces en un cookie de session o más si lo guardas en la base de datos. Si la aplicación no tiene muchos clientes no tendrás problemas pero si se usa mucho por muchos cliente tendras cuellos de botella en donde guardes el estado.
El otro problema es la replicación de los datos en tus clusters porque todos los servidores que tengas tendrás que compartir el estado para saber en que estado está cada cliente.
Otro problema es el testear tu servicios, si tienen estados hacer un testing completo y encontrar bugs especialmente esta parte puede ser un infierno total ya que reproducir un caso de error para un estado concreto puede ser dificil de identificar.
te dejo referencias:
Este articulo en la pg 1 te explica problemas de guardar los estados:
http://www.drdobbs.com/tools/stateful-web-applications-that-scale-lik/208403462?pgno=1
Aqui como hacer servicios statefull usando la session, el problema será al escalar ya que esa sesion tiene uqe ser replicada en todos los servidores.
http://docs.oracle.com/cd/E12839_01/web.1111/e13734/stateful.htm#WSADV235
Comparaciones:
http://stackoverflow.com/questions/2588378/stateful-vs-stateless-webservices?rq=1
http://stackoverflow.com/questions/1009863/how-good-and-or-necessary-are-stateful-web-services
Desde mi punto de vista los WS deben ser estateles y llevar lo que necesiten (autenticación) en las cabeceras. Si necesitas algo statefull piensa en una aplicación web, no en un web service.
soy nuevo en el tema de los web service y tengo dudas que mas que todo creo que se resuelven en base a experiencia, si alguien me pudiera responder las siguientes dudas se los agradecería.
1.- actualmente estoy desarrollando un web service, usando jax-ws RI en una Aplicación Empresarial, el webservice es tipo estateful,mis dudas son: que inconvenientes tiene un web service tipo estateful en cuanto la compatibilidad con otras tecnologias y lenguajes?,que ventajas y desventajas tiene ante el stateless?, por que en diferentes paginas no recomiendan hacer web service tipo stateful?