2011-02-09 33 views
4

它只是我或者是JMS API與它如何模擬Transacted和XA Transacted等價物不一致?什麼是事務性非xa JMS會話的要點?

我不完全理解爲什麼有XA形式的連接工廠,的QueueConnectionFactory,會議等和這麼多的重複:

例如

XAQueueConnection 

    XAQueueSession 
    createXAQueueSession() throws JMSException; 

    QueueSession 
    createQueueSession(boolean transacted, 
         int acknowledgeMode) throws JMSException; 

包含交易及交易會話非的方法呢?

  • 爲什麼呢?
  • 如果我有一個XAQC爲什麼我想要一個非交易QS?
  • 如果我想爲什麼要創建一個XAueueConnection?

回答

4

這些提供了服務類的梯度。 JMS允許...

  • 消息以外的工作單元
  • 一個單相的內部消息提交的(1PC)
  • 兩相的內部消息提交(2PC/XA)

其中每一個的成本隨可靠程度而增加。通常,您想要使用應用程序所需的最低成本方法。如果你有一個非持久性的,即將到期的,遺忘的消息(例如股票行情事件),將其放入一個工作單元內是很浪費的。同樣,如果您需要一個事務處理會話,但JMS是您唯一的資源管理器,那麼XA將是一種浪費。另一方面,如果您確實需要XA進行某些操作,那並不意味着您應該在所有操作中使用XA。例如,您可能只有一個連接,您可以在其中爲XA事務維護一個會話,在另一個會話中維護非XA消息。其中第一個是接收長時間運行的進程的請求,並使用進程的詳細信息更新數據庫。其他會話用於發送定期狀態更新。連接必須是XAConnection,但出於性能的考慮,您需要在其下面有XA和非XA會話。您也可以維護單獨的連接,但此方法允許您在單個連接內執行XA和非XA消息傳遞。對於有很多連接的經紀人來說,這種優化可能至關重要。不可否認,這不是一個非常常見的用例,但它仍然是一個有效的案例,並且足以用於規範中。