Notificação de finalização de processo assíncrono?
8 respostas
jsfprimefacesjava
A
Arkimedes
Gostaria da opinião de vocês para a melhor maneira de se criar um processo de notificação.
Tenho o seguinte cenário:
Um método que faz o processamento assíncrono de um determinado arquivo. Enquanto o arquivo é gerado, o usuário pode navegar normalmente. Quando finalizado, ele tem que acessar a página de download para baixar o arquivo.
Gostaria de criar uma notificação na página template do topo, para que surgisse quando o arquivo estivesse finalizado. Isso deve acontecer independe de qual página o usuário esteja no momento.
eu faria esse processo numa Thread e levava o usuario para o download quando terminasse esse processo
J
juniodbl
Bom, eu faria uma classe Singleton que guardasse estas notificações.
Na sua pagina template, eu faria uma função javascript que de tempos em tempos tivesse uma chamada para um controlador especifico que fosse na classe que guarda as notificações e devolvesse a resposta se acabou ou não.
caso não quera um JS que vai de tempos em tempos, pode ter outras opçoes como:
Em cada load da pagina (quando o usuario troca de pagina).
Ou usando WebSckets. assim seu propio servido avisaria pra sua pagina que houve uma notificação.
A
alessandro.asac
A solução vai depender do tamanho do sistema.
Se for um sistema pequeno threads e JS é a solução mais simples.
No caso de um sistema grande, dependendo do volume de acesso, pode ser interessante usar um message broker(colocando o processamento em outras máquinas pra não interferir no tempo de resposta) e WebSockets.
Cada caso é um caso, você tem que analisar o que vai te atender melhor a sua necessidade.
A
Arkimedes
Valeu galera! Vou analisar as respostas e ver o que se encaixa melhor para meu caso.
A
Arkimedes
Seria um pouco intrusivo, não acha? Ele poderia estar visualizando outra coisa e de repente, do nada, é redirecionado para a página de download.
B
blayd2015
vc tem razão mais vc poderia manda uma mensagem dizendo pra ele aperta um ok por exemplo e ai sim fazer o download, um outro framework a ser citado é o iceFaces
A
Arkimedes
Essa é a ideia. Poderia ser um botão com o link que aparecesse no topo. Ou simplesmente uma mensagem no topo informando que o processamento foi concluído, depois ele acessaria a página de download. Sabe me dizer se o Omnifaces 2.3 exige no mínimo o JSF 2.2? Não achei no site oficial essa informação. Minha aplicação usa o JSF 2.1 e no momento não posso migrar para o 2.2.
A
Arkimedes
Consegui encontrar:
An important design goal will be to have as few dependencies as possible and to be minimally invasive. So far, OmniFaces 2.x requires Java 1.7, JSF 2.2, EL 2.2, Servlet 3.0, CDI 1.1 and WebSocket 1.0 APIs which is already minimally available in a fairly modern servlet container serving a JSF 2.2 web application. Legacy OmniFaces 1.x only requires Java 1.6, JSF 2.0, EL 2.1 and Servlet 2.5 APIs which is already minimally available in a fairly modern servlet container serving a JSF 2.x web application.
Realmente precisa do JSF 2.2. Terei que descartar o Omnifaces