2011-06-09 26 views
3

即時通訊目前正在開發使用JSF 2,JPA 2和彈簧3可以通過spring-managed-transaction存活多個request-response-s嗎?

我想我很瞭解使用@Transactional的,它的傳播,但還是老樣子,只適用於一個線程,這在我的情況是一個我的web應用程序的請求響應

基本上我需要的是:

  1. 遠程業務服務的客戶端是發起和結束,如果發生
  2. 春季西港島線做例外轉換任何異常交易中的一個

下面是希望能夠描述的意向,例如:

  1. 客戶端(假設它是一個移動設備,不一定是Web應用程序)要求服務器上創建一個新的事務
  2. 服務器返回事務ID
  3. 客戶端調用serviceA,傳遞的transactionId使用
  4. 的serviceA運行使用(通過基礎上的transactionId)交易完成,但交易沒有COMMITED
  5. 客戶端繼續調用serviceB,傳球同樣的transactionId使用
  6. serviceB運行使用serviceA發起前一個交易
  7. 如果serviceB正確運行,那麼客戶可以要求服務器提交基礎上的transactionId
  8. 如果serviceB運行異常,春天可以做sql異常翻譯

這可能嗎?

謝謝!

回答

2

我希望你其實並不需要這樣長事務......這通常是一個相當糟糕的主意,因爲(如果你懷疑它的解釋只是google this mantra)交易應儘可能的短。

相反,您可能只需要「長談話」:基本上,您可以跨多個調用/請求使用分離的實體(對您的數據庫進行只讀訪問),然後重新附加它們(使用您的更改)當你準備好提交你的tx時。

無論哪種方式,@Transactional在這裏確實沒有用處,我也不知道任何可以實現所描述的開箱即用機制。

也許可以考慮使用彈簧的Webflow:它提供易於使用會話相關的功能,應該在上下文(JPA/JSF)很好地工作......

見相關討論here

HTH

相關問題