У меня есть некий 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");
}
});
Подскажите пожалуйста, как выйти из этой ситуации? Заранее всем спасибо за помощь.