Уведомление о событии java для JSF Bean

Есть ли способ уведомить jsf/spring bean, когда java-программа получает асинхронные сообщения? Более того, java-программа представляет собой Java BayeuxClient (Cometd) в качестве pojo. Программа успешно получает сообщения в метаканалах и каналах с подпиской, как показано ниже.

@Listener(Channel.META_CONNECT)
    public void metaConnect(Message message) {
    boolean connected = message.isSuccessful();
            ...
    }

@Subscription("/notification")
    public void subscribeUpdates(Message message) {

    String updates=message.getDataAsMap().toString()    
        .....   
    }

FacesContext недоступен в этих методах, даже bean-компонент аннотирован(@Component @Scope("session") для интеграции jsf/spring. Bean-компоненты не могут быть введены, поскольку FaceContext недоступен. вышеуказанные методы?


person user2263197    schedule 09.04.2013    source источник


Ответы (1)


Взгляните на интеграцию CometD-Spring.

Вы можете определить свои службы CometD в файле конфигурации Spring (или аннотировать их) и связать зависимости с помощью обычных механизмов Spring.

Я не рекомендую обращаться к FacesContext напрямую, потому что это привяжет вас к HTTP-транспорту, и вы не сможете использовать транспорт WebSocket, что даст вам прирост производительности.

Я предлагаю вам преобразовать логику обмена сообщениями в POJO, которые не зависят от транспорта, то есть не зависят от таких классов, как HttpServletRequest, HttpSession, FacesContext и т. д.

person sbordet    schedule 10.04.2013
comment
Спасибо. Мне нужно отправить две переменные (статус сети и статус синхронизации) на веб-страницу. Я смог нажать, используя ICEfaces Ajax Push из контекста лиц. Я могу определить статус сети из сообщения, полученного по методу metaConnect выше. Статус сети, установленный на true, автоматически запускает процесс синхронизации после повторного подключения к удаленному серверу. Локальный сервер будет действовать как клиент Java Bayeux. Проблема заключается в передаче состояния сети и результата процесса синхронизации на веб-страницу. Я использовал Annotated Client-Side Service как Spring Bean и мог получать сообщения с подпиской. - person user2263197; 10.04.2013