PrimeFaces Push и многопоточность - PullRequest
1 голос
/ 28 ноября 2011

Я правильно настроил сервер 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Я что-то упустил? Любая помощь будет оценена, спасибо заранее.

1 Ответ

2 голосов
/ 29 ноября 2011

Ответ Cagatay Civici с Primefaces Forum (http://forum.primefaces.org/viewtopic.php?f=3&t=16545):

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

Существует такжеоткрыт вопрос: http://code.google.com/p/primefaces/issues/detail?id=849

...