2015-05-24 25 views
0

我用的making sure a transaction is committed before other commands are executed.爲什麼我的Jboss服務器開始處理所有事務?

問題摔跤我沒有得到答案,但BalusC表達了他的懷疑,我的... 「JSF託管bean事務..?這是不是默認的行爲。什麼你有沒有注意到你的JSF支持bean類?你應該基本上將事務方法分離成一個真正的服務類,然後將它注入到你的JSF管理bean中。「

我喜歡這個想法,但事情是我沒有任何我的豆的任何交易相關的註釋。我打開了跟蹤日誌記錄com.arjuna.ats.jta,發現容器打開和關閉事務。到目前爲止,如此期待。

但它確實爲應有盡有。從服務器請求一個靜態PNG?開始交易。通過@Schedule運行一個方法?開始交易。沒有實體經理,數據庫或涉及任何事務。

這是預期的行爲?

我甚至在沒有數據庫的服務器上部署了一個新的測試項目,甚至在那裏Arjuna開始每個調用的事務。

當我創建的任何和所有bean已經有連接到它們的活動事務時,我應該如何將我的db方法分離爲一個真正的服務bean?

回答

0

這是預期的行爲?

那麼,沒有。至少不像Java EE,JSF和EJB那麼重要。所以就是這樣。

但該項目(和足夠我曾經嘗試和三角測量問題的新測試項目的POM文件的)是EE6和Seam 3的混蛋Seam 3 comes with a built-in, automatic transaction wrapper:

Seam事務有一個內置的ServletRequestListener,它爲每個請求自動開始並提交(或者在事務設置爲回滾時回滾)一個事務!這應該不得不手動指定事務,或者想知道事務是否存在。

提示

如有需要禁用此監聽器,在web.xml中上下文PARAM命名org.jboss.seam.transaction.disableListener設置爲true將禁用監聽器。

所以,在我看來,爲了重構我的數據庫調用到真正的服務豆,我有三種選擇:

  • 禁用聽衆從POM完全
  • 刪除煤層交易(org.jboss.seam.transaction
  • 升級到EE7/JSF 2。2,擺脫縫

編輯:

這是不是整個事情,雖然。 @Schedule方法在類中註釋@Singleton,使其成爲一個EJB,並且這些默認情況下是事務性的。使用@TransactionAttribute{SUPPORTS}註解該特定類(即「如果有一個事務使用事務,但如果沒有則使用一個新事務」)注意到這一點。

相關問題