Los servicios Rest, por definición, no guardan estado en el servidor. Pero podemos hacer servicios Rest conversacionales activando en el fichero web.xml la siguiente configuración:
<context-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>
es.um.atica.jersey.conversation.AddConversationHeaders
</param-value>
</context-param>
Recordemos que el parámetro de contexto com.sun.jersey.spi.container.ContainerResponseFilters se puede indicar el valor como una lista separada por ','. Por lo que si ya existe dicha declaración solo hay que añadir el es.um.atica.jersey.conversation.AddConversationHeaders.
Para poder gestionar la conversación, podemos utilizar los parámetros o cabeceras siguientes en las solicitudes:
cid: parámetro que indica el identificador de la conversación (el nombre de este parámetro se define en el fichero components.xml).
conversationPropagation: parámetro que indica el tipo de propagación (DEFAULT, BEGIN, JOIN, NESTED, NONE, END, ENDROOT) de la conversación indicada.
X-Conversation-Id: cabecera que indica el identificador de la conversación. Alternativa al parámetro cid, sino queremos que vaya como parámetro.
X-Conversation-Propagation: cabecera que indica el tipo de propagación (DEFAULT, BEGIN, JOIN, NESTED, NONE, END, ENDROOT) aplicado a la conversación indicada. Alternativa al parámetro conversationPropagation, sino queremos que vaya como parámetro.
En las respuestas tendremos las siguientes cabeceras HTTP:
X-Conversation-Id: cabecera
HTTP que indica el identificador de la conversación actual.
X-Conversation-Propagation: cabecera
HTTP que indica el tipo de propagación (DEFAULT, BEGIN, JOIN, NESTED, NONE, END, ENDROOT) aplicado a la conversación indicada.
X-Conversation-Type: cabecera
HTTP que indica el tipo de conversacion actual: temporal o largo recorrido (long-running).
De esta forma se comporta igual que si utilizasemos JSF y el navegador Web.
— JUAN MIGUEL BERNAL GONZALEZ 30/06/2020 09:32