JSF опрашивает базу данных из компонента приложения с заданными интервалами

#java #database #jsf

#java #База данных #jsf

Вопрос:

Всем привет, я довольно новичок в jsf, поэтому, если это плохой вопрос, я приношу извинения. В настоящее время я работаю над школьным проектом, где мне нужно получить доступ к базе данных через веб-службу, чтобы получить некоторые базовые данные приложения. У меня есть класс, который обращается к этим данным с помощью метода, а затем возвращает самые свежие результаты из базы данных.

Что я хочу сделать, так это либо создать поток, который вызывает метод обновления в базе данных. Метод run выглядит аналогично этому, где я получаю свой компонент приложения, а затем вызываю для него метод обновления.

theFacesContext = FacesContext.getCurrentInstance();
ApplicationBean app = (ApplicationBean)theFacesContext.getELContext().getELResolver().getValue(theFacesContext.getELContext(), null, applicationbean);
app.getDBValues();

Затем поток будет выполнять цикл на основе переменной, которой будет присвоено значение false при уничтожении компонента приложения. Моя ошибка заключается в том, что поток теряет facescontext. Я видел несколько сообщений, где люди говорят что-то по всем строкам, что вы должны сохранить поток в запросе, но я не уверен, что это значит. Любые предложения были бы чрезвычайно полезны.

Ответ №1:

Если вы хотите отобразить фактические данные, вам следует использовать опрос или принудительный запуск на стороне сервера. Существует множество компонентов ajax, которые могут помочь. Посмотрите на
Компонент опроса PrimeFaces
RichFaces нажимает
опрос RichFaces
ICEfaces

Ответ №2:

Действительно, FacesContext это недоступно в новом потоке. Это потому, что она хранится в ThreadLocal и инициируется по запросу.

Вы можете получить желаемый компонент и передать его в новый поток, чтобы больше не полагаться там на контекст faces.