Как я могу отправлять сообщения XMPP после успешной транзакции? - PullRequest
2 голосов
/ 06 сентября 2011

В моем проекте все сервисы созданы как сессионные компоненты без сохранения состояния. Во время рабочего процесса создаются новые данные, и об этом следует сообщать клиентам. Я хочу отправлять эти сообщения только тогда, когда транзакция успешно зафиксирована.

У меня зарегистрирован ServletContextListener, который отправляет мои пакеты xmpp (библиотека smack). Когда я получаю пакет, я нахожу свой компонент сеанса с сохранением состояния и запускаю обработку запроса.

public void processPacket(Packet packet) {
    try{
        if(packet instanceof RawRequest){
            DispatchIQService service = Core.lookup(DispatchIQService.class);
            service.process(connection, (RawRequest)packet);
            // sending of the messages should happen here, because transaction completed successful.
        }else{
            log.debug("Packet ignored: " + packet.toXML());
        } 
    }catch(Exception e){
        log.error(e, e);
    }
}
  1. Как собрать эти сгенерированные сообщения во время рабочего процесса по нескольким компонентам? Я бы возвратил этот список из bean-компонента отправки и впоследствии отправил бы сообщения. Моим простым решением было бы перенаправить список, в который я добавляю свои сообщения, но есть ли более элегантный способ?

  2. У меня есть ресурс XMPP (список http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/Roster.html), к которому я должен получить доступ из всех компонентов. Как это сделать? Сохранить его в статическую переменную и синхронизировать доступ к нему не звучит очень хорошо.

1 Ответ

2 голосов
/ 06 сентября 2011

Маркус, я не гуру J2EE, но для ваших целей рекомендую взглянуть на JMS . Это поможет вам реализовать подход, основанный на сообщениях. Что касается меня, я использовал систему RabbitMQ. Это был большой опыт, но для запуска системы требуется дополнительное программное обеспечение.

...