Struts2 + jQuery - Envio de atualizações regulares para o cliente
Pergunta
Estou implementando uma funcionalidade em meu aplicativo web de tal forma que um cliente pode gerar o relatório, inserindo alguns dados e clicando no botão enviar.
O problema é que a geração de relatórios leva muito tempo e o relatório pode não gerar se os dados inseridos usuário está errado.
A tarefa completa de geração de relatório tem muitas sub-tarefas e quero que quando as prensas cliente enviar, em seguida, logo abaixo dessa página eu quero mostrar o status / andamento das tarefas de geração de relatório dividida em várias sub-tarefas como
- Validating input data ------ Done
- Fetching the data ------ In Progress
and so on,
Como posso conseguir isso usando Struts2, jQuery na camada web?
Qualquer ajuda será muito apreciada.
Graças
Solução
Nós tivemos um problema semelhante. A transação normalmente leva 20 segundos, às vezes mais de um minuto. Nós pensamos que haveria soluções mais fáceis, mas acabamos com um esquema como este,
- Quando o pedido de longa duração é recebida, uma sessão é criado e um novo segmento é desovar para manipular a solicitação.
- A página é retornado imediatamente com texto de exibição "A coleta de dados ...". A página contém um temporizador para refrescar-se a cada segundo. O URL de recarga contém o ID da sessão (não usamos HttpSession) no parâmetro de consulta.
- Quando o manipulador de ações vê o pedido com um ID da sessão, ele sabe que a sessão seja iniciada, verifique a variável de estado que está sendo atualizado pela thread de trabalho. Se não for feito, ele atualiza a página com novo status "Recuperando dados de DB1 ...". Não está a piscar quando isso é feito como recarga. Se você se importa, você pode usar AJAX para atualizar o status.
- Quando o segmento de trabalho é feito e a página está pronto para entregar, a chamada simplesmente retorna o resultado.
Nós nos encontramos com algum problema com o balanceador de carga. Para que o esquema funcione, cada recarga deve voltar para o mesmo servidor. Felizmente, os suportes balanceador de carga pegajoso roteamento baseado em nosso id de sessão.
Outras dicas
Dê uma olhada no interceptor Struts2 ExecuteAndWait. http://struts.apache.org/2. x / docs / executar-e-espera-interceptor.html