【问题标题】:Implementing a JMS Buffer layer in Java EE 6在 Java EE 6 中实现 JMS 缓冲区层
【发布时间】:2015-05-28 10:20:30
【问题描述】:

寻找解决以下问题的架构模式。

在我的架构中,我有一个 Stateless EventDispatcher EJB,它实现:

public void dispatchEvent(MyEvent ev)

此方法被各种其他 EJB 在其业务方法中调用。我的 EventDispatcher 的目的是隐藏事件调度方式的复杂性(无论是 JMS 还是其他机制)。

现在让我们假设我的 bean 正在使用 JMS。因此它只是查看传递给它的事件,然后构建 JMS 消息并将它们分派到正确的主题。它可以产生多个 JMS 消息,并且只有在周围事务最终成功提交(XA 事务)时才会发送它们。

问题:我可能正在查看发送数千条单独消息的交易。由于事务中发生的其他事情(对象已更新,然后后来已删除),某些消息可能会变得无效。所以我需要大量的逻辑来根据上下文“清理”消息,并最终决定它是一个大 JMS 批处理消息还是多个小消息。

解决方案:我想要的是使用某种“TransactionalContext”对象并在我的无状态 EJB 中使用它来“缓冲”所有事件。然后我需要某种回调来告诉我事务即将提交。这类似于我们使用 EntityManager 的方式,我可以对实体进行更改,它会保留更改并在无状态 EJB 之间共享。在“刷新”时间(事务完成),它会执行其逻辑来确定要执行的 SQL。我需要一个可用于我的无状态 bean 的 TransactionContext,它每个事务都有一个唯一的会话,并且在事务即将完成时有一个回调。

你会怎么做?

请注意,我不在有效的 CDI 上下文中,其中一些事务由于 @Schedule 计时器而开始。其他事务由于 JMS MDB 而开始。

【问题讨论】:

标签: java jakarta-ee transactions jms stateless-session-bean


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2011-06-08
    • 2023-03-08
    相关资源
    最近更新 更多