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

标签 java design-patterns ejb-3.0 stateless

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

我注册了一个 ServletContextListener,用于发送我的 xmpp 数据包(smack 库)。当我收到一个数据包时,我找到我的调度有状态 session 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 的工作流中收集生成的消息?我将从调度 bean 返回此列表,然后发送消息。我的简单解决方案是通过我添加消息的列表进行路由,但有没有更优雅的方法?

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

最佳答案

Markus,我不是 J2EE 专家,但出于您的目的,我建议您看一下 JMS .这将帮助您实现基于消息的方法。 至于我,我曾经使用 RabbitMQ 系统。这是很棒的体验,但需要额外的软件才能运行该系统。

关于java - 交易成功后如何发送XMPP消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316693/

相关文章:

java - 如何在 EJB 3 中动态设置 @RolesAllowed

java - 无法使用 classLoader.getResourceAsStream() 从 WEB-INF 文件夹中检索图像

java - 限制 JMS 目标实例

c++ - 访问父类对象集合成员的子类函数

design-patterns - SED:在模式上方插入行并将模式空间附加到它

java - 将任意数据与 ejb 调用上下文关联

java - java中如何正确声明引用变量?

java - 更改通过另一个 ListView 的外部单击监听器通知数据更改的 ListView View 项的颜色

java - 在 TomEE+ 上使用 JAX-RS 时为 "No resource methods"

javascript - ES6 - 默认参数结合解构 : What does this pattern mean?