簡體   English   中英

在Java EE 6中實現JMS緩沖層

[英]Implementing a JMS Buffer layer in Java EE 6

尋找一種架構模式來解決以下問題。

在我的體系結構中,我有一個無狀態EventDispatcher EJB,它實現:

public void dispatchEvent(MyEvent ev)

各種其他EJB在其業務方法中調用此方法。 我的EventDispatcher的目的是隱藏事件分配方式的復雜性(無論是JMS還是其他機制)。

現在,讓我們假設我的bean正在使用JMS。 因此,它僅查看傳遞給它的事件,並構建JMS消息並將其分配給正確的主題。 它可以產生多個JMS消息,並且僅在周圍事務最終成功提交(XA事務)時才發送它們。

問題:我可能正在查看發送數千條單獨消息的事務。 某些消息可能由於事務中發生的其他事情而變得無效(對象先更新,然后再刪除)。 因此,我需要大量邏輯來基於上下文“清理”消息,並最終決定是一個大的JMS批處理消息還是多個小的JMS批處理消息。

解決方案:我想使用某種“ TransactionalContext”對象,並在我的無狀態EJB中使用它來“緩沖”所有事件。 然后,我需要某種回調來告訴我事務即將提交。 這類似於我們使用EntityManager的方式,我可以對實體進行更改,並且可以保留更改並在無狀態EJB之間共享。 在“刷新”時間(事務完成),它會執行其邏輯以找出要執行的SQL。 我需要一個對我的無狀態bean可用的TransactionContext,它在每個事務中都有一個唯一的會話,並且在事務即將完成時具有回調。

你會怎么做?

請注意,我不是在有效的CDI上下文中,由於@Schedule計時器,其中一些事務正在啟動。 其他事務由於JMS MDB而開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM