[英]Is there something that behaves like .wait() and .notify() in EJB environment?
我知道我不能修改EJB容器中的線程,因此我不知道如何在EJB環境中以正確的方式執行以下操作:
涉及的是 :
場景是 :
客戶端調用服務器方法,然后將幾個消息發送到隊列 。 之后, Server會做其他一些事情。 在此期間, Mdb消耗一條消息,調用Wi進行一些相當長的計算,並得到結果。 現在Mdb將結果提供給Server 。 當服務器獲取它發送的每條消息的所有“結果”時,它會使用W s的結果進行更多計算,並將結果返回給客戶端 。
我的問題 :
在Java SE,我只想做.wait()來讓服務器等待在W S的結果, 服務器沒有發送消息后,下班后。 然后mdb在設置結果時會.notify()。 因為我不能修改EJB容器中的線程,正如規范所述,我迷失了因為我找不到任何適當的方法來在EJB環境中實現相同的行為。
對此問題的任何幫助都將非常感謝,提前感謝。
PS:我正在使用JBoss 5.1.0,以防有任何特定於供應商的措施來解決這個問題。
對此的適當解決方案是用於消息傳遞的“請求/響應”模式。 簡而言之,您可以通過發送消息並等待響應消息來通過消息傳遞系統執行“同步”操作(所有這些在J2EE世界中都是合法的)。 有多種方法可以在實踐中實現這一點,但一般的想法是你發送帶有某種唯一標識符的請求消息,然后使用為你的請求ID設置的消息過濾器等待響應消息已發送(這通常是“correlationId”字段用於)。 MDB將獲取請求消息,處理它們,並使用請求消息中指定的唯一標識符發送響應消息。 您可以使用一個隊列執行所有這些操作,或者您可以使用單獨的請求/響應隊列,或者您可以執行創建“臨時”響應隊列 (每個請求)等瘋狂的操作。 您可以使用Message.setJMSReplyTo
方法告訴MDB將請求消息發送到何處。
一般模式是:
receive()
直到收到並處理所有消息(或超時) (顯然,服務器直接從第2步到第4步,我只是用這種方式寫它來突出控制流程。)
什么對象充當MDB返回所有消息的服務器? 它可能需要某種CountDownLatch來等待,消息數量的大小(由MDB改變直到達到零)。 當它變為零時,它將喚醒可以運行返回客戶端的代碼。 請參閱CountDownLatch的API文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.