Gostaria de implementar uma barra de progresso para alguns processamentos que minha aplicação pode fazer em segundo plano. Só que eu gostaria que essa barra de progresso fosse visível a todos os usuários da aplicação simultaneamente, para que eles tomem ciência de que uma operação longa está sendo realizada e que alguns serviços não estarão disponíveis enquanto isso. Para tanto montei a seguinte arquitetura:
o bean JSF chama um método no meu bean EJB, que sabendo que o serviço requisitado é um processamento em segundo plano, envia uma mensagem assíncrona para um tópico JMS, cujo listener captura a mensagem e enfilera a requisição (apenas um processamento de segundo plano é executado por vez). Em paralelo, um outro bean ejb (singleton), vai checando a fila e executando as requisições. À medida que a requisição é executada, o executor vai transmitindo mensagens do status da operação ("10% concluído, 20% concluído, etc) para um outro tópico JMS, cujo listener é um bean JSF com escopo de sessão. Ele recebe as mensagens normalmente e armazena o status da operação recebido num atributo que é acessado no facelet por uma progress bar do primefaces, que, através de ajax, deveria periodicamente acessar o status da operação (no bean jsf de sessão). Só que ele só acessa a informação depois que o processamento é concluído, e a barra de progresso não mostra a evolução da operação.
Não sei o que pode estar errado, penso que possa haver algum impedimento em ter um bean JSF de sessão que implementa a interface MessageListener (JMS).
Agradeço qualquer ajuda