Como ignorar vários cliques de um usuário impaciente?

Tenho uma consulta para responder à solicitação padrão de clientes remotos. Padrão no sentido de que ele não usa parâmetros de fora do servidor. Sempre que alguém enviar uma solicitação para um URL, digahttp://www.example.com/query, ele obtém o conteúdo de umreply.xml no corpo da resposta, dependendo do que o banco de dados fornece naquele momento. O conteúdo dereply.xml muda apenas no conteúdo do banco de dados no servidor e não muda em nada externo, como quem faz a consulta, em qual entrada etc., portanto, não usa parâmetros dos clientes. Não estou verificando nenhuma autenticação - estamos deixando tudo para o firewall.

Então eu escrevi um@POST método, digamosquery() ser invocado em uma solicitação publicada emhttp://www.example.com/querye entregue o resultado. eu useiJersey nele e tudo está funcionando bem com as especificações, exceto que

os pedidos devem ser exclusivos ao longo do tempo. ou seja, uma solicitação deve ser atendida por vez - os cliques subseqüentes do usuário devem receber uma mensagem com status HTTP 309, a menos que o servidor não esteja executando um processo de consulta invocado pelo meu métodoquery().

Como conseguir isso? Eu tentei fazerquery() servir@PUT ao invés de@POST respostas e obteve os mesmos resultados.

Talvez um Q ingênuo sobre o assunto. No entanto, não está muito familiarizado com os serviços Restful.

Eu posso fazer isso segmentando um token para controlar que apenas uma consulta esteja em execução por vez e fazer solicitações simultâneas receberem o HTTP 309. No entanto, deve haver uma maneira melhor e mais fácil de conseguir isso no servidor.

Estou usando o Tomcat 8, Jersey 1.19.

TIA.

Nota: eu liPUT vs POST em REST entre algumas outras discussões úteis.

// =====================

EDITAR:

O usuário que envia a consulta não faz diferença a qualquer momento.

SuponhauserA enviou uma consulta. enquanto essa consulta ainda estiver em execução, ou seja, antesquery() retorna a resposta parauserA, userB enviou uma consulta.userB deve estar recebendo um 309-- só porque há uma consulta sendo processada no momento.

SeuserA = userB ouuserA <>userB é irrelevante aqui, um 309 deve ser retornado apenas porque há uma solicitação de consulta enquanto uma já está em execução. e é a única vez que um usuário recebe um 309.

// ================================================

EDIT-2:

Estou ciente das soluções com controle de concorrência. Eu estou supondo que há um usando os recursos Restful. este é um Q acadêmico.

questionAnswers(2)

yourAnswerToTheQuestion