如何在成功交易后发送XMPP消息?

时间:2011-09-06 08:01:43

标签: java design-patterns ejb-3.0 stateless

在我的项目中,我将所有服务设计为无状态会话bean。在工作流程期间,将创建新数据,并将其报告给客户端。我只想在成功提交事务时发送此消息。

我注册了一个ServletContextListener,它调度我的xmpp数据包(smack库)。当我收到一个数据包时,我找到了我的调度有状态会话bean并开始处理请求。

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的工作流程中收集生成的消息?我将从dispatch bean返回此列表,然后发送消息。我的简单解决方案是在我添加消息的列表中进行路由,但是有更优雅的方式吗?

  2. 我有一个XMPP资源(名册http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/Roster.html),我必须从所有bean访问。我怎么能做到这一点?将它存储到静态变量中并同步对它的访问听起来不太好。

1 个答案:

答案 0 :(得分:2)

马库斯,我不是J2EE的大师,但出于你的目的,我建议你看一下JMS。这将有助于您实现基于消息的方法。 至于我,我曾经使用过RabbitMQ系统。这是非常棒的经验,但运行系统需要额外的软件。