Saber o fim de uma Thread via HTTP

Pessoal, possuo uma situação onde os usuários solicitam relatórios via webservices RESTFul.

O que eu queria fazer… quando ele solicitasse um relatório no formato PDF, abrisse uma thread em background que começasse a gerar o relatório no formato EXCEL e JSON e guardasse no filesystem para que, caso o usuário solicitasse nestes formatos já estaria pronto.

Motivação disso: a demora em escrever em arquivo, assim, agilizaria bastante. E caso ele não solicitasse os outros formatos, existe um JOB que limpa os arquivos, então isso não seria um problema.

Problema:

Como estou num protocolo sem estado e assincrono( http) como posso saber que uma thread iniciada na requisição X ja estaria pronta na requisição Y ? Exemplo:

  1. Usuário faz a chamada pela primeira vez ao relatório
  2. inicia a geracao do relatorio no formato desejado (e em outras threads inicia nos outros formatos)
  3. retorna assim qeu o formato desejado estiver pronto
  4. usuario solicita outro formato… : como saber que a thread terminou a geracao do outro formato? Ok, verificando a existencia do arquivo mas… e se ainda nao terminou… como aguardar terminar? while true não vejo como a melhor solucao…

Obrigado.

o que eu fiz foi deixar a thread num cache (ehcache) e, ao requisitar novamente o servico, verifica o cache, verifica se existe uma thread alive lá, e dá um join nela até terminar o processo.

:stuck_out_tongue_winking_eye:

Parece um trabalho pro “Padrão Observer”