環境:
jboss4.3
ejb3
執行緒和事務:
>>在同乙個無狀態bean中,如果呼叫的第乙個方法沒有事務,那在第乙個方法裡呼叫的bean裡其它的方法也將沒有事務,不管其它方法的事務配置。事務的特性將由第乙個確定,同乙個bean裡,不能使用多事務。
>>在同乙個無狀態bean中,不管呼叫的第乙個方法有或者沒有事務,在第乙個方法裡通過多執行緒呼叫的bean裡其它的方法也將沒有事務,不管其它方法的事務配置。也就是說在多執行緒裡面,事務不具有傳遞特性。這個容易理解,因為多執行緒裡的錯誤不能在原呼叫或者啟動的方法裡捕獲。
>>在不同的無狀態bean中, 無論呼叫的bean中是否有事務,只好被呼叫的另乙個bean中有相應的事務,則可以正常執行。事務在這種情況下有傳遞性。
>>在不同的無狀態bean中, 無論呼叫的bean中是否有事務,它通過多執行緒呼叫的另乙個bean中有相應的事務,則可以正常執行。由於事務可以控制在區域性的另乙個bean裡,所以這裡可以有事務的存在,但它不是由啟動新執行緒的父方法的事務傳遞過來的,它是自己維護的,換句話說,這裡事務同樣不具有傳遞特性。
總結:事務在多執行緒情況下,不具有傳遞性。在同乙個bean中,由最先呼叫的方法決定是否有事務。在不同的bean中,可以由其它被呼叫bean的方法進行內部事務控制,但最先呼叫bean的方法的事務有傳遞性。
多資料來源和事務(這裡的jboss沒有對多資料來源事務支援):
>>在同乙個無狀態bean中,如果呼叫的方法沒有事務,且在此方法裡的多資料來源都只進行唯讀,沒有問題。
>>在同乙個無狀態bean中,如果呼叫的方法沒有事務,且在此方法裡的多資料來源乙個進行唯讀,另乙個進行讀寫,沒有報錯。但資料不會寫到資料庫。
>>在同乙個無狀態bean中,如果呼叫的方法有事務,且在此方法裡的多資料來源都進行唯讀,則報錯。
>>在同乙個無狀態bean中,如果呼叫的方法有事務,且在此方法裡的多資料來源乙個進行唯讀,另乙個進行讀寫,則報錯。
>>在同乙個無狀態bean中,如果呼叫的方法有事務,且在此方法裡的多資料來源兩個都進行讀寫,則報錯。
>>在同乙個無狀態bean中,不同的方法中有不同資料來源的呼叫,此時,事務會由最先呼叫的方法決定,如果最先呼叫的方法是唯讀事務,則不會報錯,但不同資料來源都不能進行寫事務操作。如果最先呼叫的方法是寫事務,則會報錯,與在同乙個方法裡呼叫效果一樣。
>>同乙個無狀態bean中,多執行緒條件下,由於事務在多執行緒裡不具有傳遞性,所以當在乙個方法裡的多資料來源乙個在新執行緒裡,乙個在原執行緒裡,都不會報錯,但由於新執行緒沒有事務,所以無法進行寫事務操作。
>>在不同的無狀態bean中,如果呼叫的bean裡的方法沒有事務,而在另乙個bean裡有事務,由於事務在不同bean裡有區域性性控制,所以不會報錯。
>>在不同的無狀態bean中,如果呼叫的bean裡的方法有事務,而在另乙個bean裡未顯式指定事務,由於事務在不同bean裡有傳遞性,所以會報錯。
>>在不同的無狀態bean中,如果呼叫的bean裡的方法有事務,而在另乙個bean裡有事務,由於事務在不同bean裡有傳遞性,所以會報錯。
>>在不同的無狀態bean中,如果呼叫的bean裡的方法有事務,而在另乙個bean裡有新事務,由於事務在不同bean裡有區域性性控制,所以不會報錯。
>>在不同的無狀態bean中,多執行緒條件下,由於事務可以控制在區域性的另乙個bean裡,所以這裡可以有事務的存在,但它不是由啟動新執行緒的父方法的事務傳遞過來的,它是自己維護的,換句話說,這裡事務同樣不具有傳遞特性。
總結多資料來源:事務在多執行緒情況下,不具有傳遞性。在同乙個bean中,由最先呼叫的方法決定是否有事務,有事務情況下,多資料來源都只能讀,不能寫,否則報錯。在不同的bean中,可以由其它被呼叫bean的方法進行內部事務控制,但最先呼叫bean的方法的事務有傳遞性。
EJB3使用小記
這陣子在專案裡面用ejb3做乙個資料同步的功能,在開發過程中那個遇到幾個技術點,簡單記錄下。1.因為資料量有點大 百萬使用者 所以必須迴圈獲取記錄,平衡下來,每次取數1k 3k之間,同時取數和對返回的更新都需要記錄狀態,為了單條記錄錯誤不影響整個流程,所以取消了整個方法的事務,僅控制在單個操作。簡單...
EJB3 入門檔案(二)
了解基本的 session bean 與 message driven bean 撰寫方式,接下來看一些生命週期 攔截器 timer 等服務。來看看 session bean 與 message driven bean 的生命週期與回呼方法。攔截器 interceptor 攔截器可以介入方 法呼叫前...
EJB3 入門檔案(二)
了解基本的 session bean 與 message driven bean 撰寫方式,接下來看一些生命週期 攔截器 timer 等服務。來看看 session bean 與 message driven bean 的生命週期與回呼方法。攔截器 interceptor 攔截器可以介入方 法呼叫前...