Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida notificação thread

Estou desenvolvendo uma aplicação e com alguns métodos asyncronos, onde estou utilizando o seguinte código.

public void gerar() {
        if (dataInicial == null || dataFinal == null) {
            addGlobalErrorMessage(MessageUtils.getMessage("relatorios.numeroDaSorte.erro.periodo.naoPreenchido"));
            return;
        }

        if (dataInicial.getTime() > dataFinal.getTime()) {
            addGlobalErrorMessage(MessageUtils.getMessage("relatorios.numeroDaSorte.erro.periodo.inicioMaiorFim"));
            return;
        }
        List<ParametroValor> parametroValor = this.parametroValorBean.buscarPorProcesso(PROCESSO);;
        String dir = parametroValor.get(0).getValor();

        if(dir == null || StringUtils.isBlank(dir)) {
            addGlobalErrorMessage(MessageUtils.getMessage("relatorios.numeroDaSorte.erro.diretorioRelatorio"));
            return;
        }

        List<NumeroDaSorteRelatorioAnaliticoVO> dadosRelatorio = numeroDaSorteIntegration
                .obterDadosRelatorioAnalitico(dataInicial, dataFinal);

        if (dadosRelatorio == null || dadosRelatorio.isEmpty()) {
            addGlobalInfoMessage(MessageUtils.getMessage("global.nao.foram.encontratos.registros"));
            return;
        }

        try {

            DownloadRelatorioNroSorte download = new DownloadRelatorioNroSorte(dadosRelatorio, dir);
            threadPool.execute(download);

            addGlobalInfoMessage(MessageUtils.getMessage("relatorios.numeroDaSorte.solicitado"));
        } catch (Exception e) {
            logger.error("Erro ao gerar o relatorio.", e);
            addGlobalErrorMessage(MessageUtils.getMessage("relatorios.numeroDaSorte.erro.gerar"));
        }
    }

Quando o download terminar, quero notificar a tela do usuário, tentei de diversas formas e não consegui (facescontext entre outros).

2 respostas
solução!

Opa, rola ter um ajax que fica consultando uma informação? Acho que essa pode ser uma possibilidade... Outra, é via websocket. Você pode criar um CompletableFuture e aí, quando ela acabar, você notifica o cliente via websocket.

vlw pela dica.