@lancehokage

Как сделать redirect из другого потока в JSF Primefaces?

У меня есть некий JSF компонент, хранящий состояние страницы специализаций. На этой странице пользователь выбирает специализацию, а затем ждёт действия со стороны другого пользователя. Так вот, если реализовать это последовательно, юзер зависнет на странице специализаций в бесконечном цикле, который будет проверять, совершено ли действие другим пользователем. Я хочу вынести это действие в другой поток для того чтобы юзер мог продолжать заниматься своими делами на странице, а когда бесконечный цикл в другом потоке завершится происходил редирект.

Проблема в том, что PrimeFacesContext не шарится между потоками (ThreadLocal). И запуская цикл в другом потоке я не могу совершить редирект средствами JSF, поскольку контекст - null.

Я в отдельном потоке запускаю цикл для проверки. И когда this.isAccepted(), пытаюсь делать редирект.

ThreadPoolHolder.addNewTask(() -> {
            try {
                while (true) {
                    if (this.isAccepted()) {
                        PrimeFacesContext.getCurrentInstance().getExternalContext().redirect("/serve");
                        break;
                    }
                }
            } catch (Exception exception) {
                LOG.error("Ошибка в задаче thread pool");
            }
        });


Подскажите пожалуйста, как выйти из этой ситуации? Заранее всем спасибо за помощь.
  • Вопрос задан
  • 42 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы