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

Foi útil?

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,

  1. Quando o pedido de longa duração é recebida, uma sessão é criado e um novo segmento é desovar para manipular a solicitação.
  2. 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.
  3. 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.
  4. 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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top