2010-10-11 30 views
0

我有一個基於JMS隊列的系統,可以使整個系統以異步方式工作。來自無狀態EJB的JMS同步請求答覆

現在,對於某些週期性任務,我需要以同步的方式執行一些非耗時的任務,這樣我就可以立即對結果執行一些操作,而無需使用數據庫來存儲請求並將其與結果配對(如同異步操作)。

代碼本身不是問題,但是EJB運行容器事務,這意味着producer.send()代碼和consumer.receive()不會順序執行(即不發送消息,所以沒有任何問題在receive()幾行下方接收)。

如何在無狀態EJB3環境中同步接收JMS消息和響應?

感謝答案,

博佐

回答

1

你可以切換你的bean使用Bean管理的事務。

@MessageDriven 
@TransactionManagement(BEAN) 
public class MyMDB implements MessageListener { 

    // this is optional 
    @Resource 
    private UserTransaction ut; 

    //... 

} 
1

您應該瞭解EJB中影響通過JMS發送請求/回覆消息的事務上下文。

「解決方案是暫停事務,創建新事務,發送請求,提交新事務,取消暫停第一個事務並繼續。」

在下面的URL中,您將找到問題陳述和解決方案。 順便說一句,這適用於容器管理和Bean管理事務..

http://blogs.oracle.com/fkieviet/entry/request_reply_from_an_ejb