Я правильно настроил сервер Push, используя компонент PrimeFaces p: push (используя веб-сервер Jetty для обработки веб-сокетов).Однако механизм Push не работает при попытке отобразить предупреждение при получении другого потока.
Вот часть кода, который я использую:
JSF страница запускаетАсинхронный вызов веб-службы:
<f:view ...>
<pm:page title="TEST">
<p:push onmessage="handleMessage" channel="counter" widgetVar="pushEssaisCounter" autoConnect="true" />
<pm:view id="essais-run">
<h:form prependId="false">
<pm:header title="TEST">
<f:facet name="right">
<pm:commandButton value="Async Call" actionListener="#{AsyncHandler.onRun}" update="erunMessages erunResult" swatch="a" inline="true" icon="check" />
</f:facet>
</pm:header>
<pm:content> ...
Поддерживающий компонент, обрабатывающий actionListener и разветвляющийся в новом потоке ( AsyncHandler.java ):
public void onRun(ActionEvent event) {
Executors.newSingleThreadExecutor().submit(new EssaiCallable());
}
Код, выполняемый асинхронноновый поток (после получения ответа веб-службы ):
private class EssaiCallable implements Callable<CreerEssaiS1F2Response> {
@Override
public synchronized CreerEssaiS1F2Response call() throws Exception {
log.info("ASYNC TEST RESPONSE received!");
RequestContext.getCurrentInstance().push("counter", 666);
}
}
У меня нет исключений или ошибок при запуске этого кода, но содержимое просто никогда не отправляется :-( AmЯ что-то упустил? Любая помощь будет оценена, спасибо заранее.