Fala nobres colegas desenvolvedores! Preciso de vossa ajuda para um problema que me acompanha já a algum tempo. Bom, preciso gerar um arquivo PDF dos dados da consulta por meio do uso do JasperReports, até aqui tudo bem, já está fazendo, agora preciso que esse arquivo seja gerado em segundo plano, ou seja, com o uso de Thread.
Por que tem que ser assim?
Pelo simples fato de que os relatórios são extensos e podem levar um certo tempo a serem gerados e nesse conceito, com uso da thread, o usuário não precisa esperar o sistema gerar.
Detalhes:
É uma aplicação Web com uso de PrimeFaces, Hibernate.
Bom dia,
não sei se entendi exatamente, vc quer gerar o PDF em uma thread para que o usuário não precise esperar, isso?
- É o usuário quem manda gerar o relatório ou é um processo automático?
- Quando o relatório estiver pronto, como o usuário vai recebê-lo?
Na verdade não entendi em que ponto está a sua dúvida, é em criar a thread ou em como fazer tudo isso?
Se for em como criar uma thread, existem várias formas, depende do seu contexto, a mais simples:
new Thread(new Runnable() { @Override public void run() { //trabalho } });
Bom dia Rodrigo!
Responde ao seu questionamento digo que sim, o usuário não precisa esperar a geração do relatório.
- É o usuário quem manda gerar o relatório e não processo automático.
- Quando o relatório estiver pronto ele vai receber uma notificação por e-mail e o sistema o avisará por um alerta.
Já estudei bem sobre Thread, Runnable, até tentei implementar usando como interface mas não consegui.
Por se tratar de uma aplicação grande, existem muitos métodos, classes de serviço, processos para geração do relatório, se tivesse um modo de chamar apenas o método principal na Thread seria ótimo.
Não vejo como problema a parte de criar uma thread, como na resposta anterior, aquele código cria uma thread com um trabalho. Se não conseguistes, precisa especificar melhor oque exatamente não conseguiu, assim fica muito vago e não vai conseguir ajuda. Já fiz algumas coisas parecidas e acredito que seu maior desafio será em passar a sessão da request para dentro desta thread já que perderá o escopo, mas isto vai depender da forma que sua aplicação está projetada.