2012-01-06 22 views
3

如果一個EJB的方法對同一個EJB進行JNDI查找,然後執行其他方法,這是否保證在同一個線程中執行?如何處理EJB對象的實際實例;它是否與調用方法中使用的實例相同?EJB請求自己的引用?

回答

3

EJB規範使得沒有限制到注入EJB入本身的可能性(見EJB 3.1規範,章節16.5.1.1):

的〔@EJB]參考可以是會話bean的業務接口或會話Bean的無界面視圖,或會話Bean或實體Bean的本地主界面或遠程主界面。

與每個EJB調用一樣,它將始終在同一個線程中執行;基於該不可重入實例規則,它不能相同實例(章13年4月10日):

[...]有狀態和無狀態會話bean沒有被編碼爲折返。這條規則的一個含義是,應用程序不能對無狀態或有狀態的會話bean實例進行回送調用。

這意味着:如果bean A調用bean B上的方法,並且B調用A上的任何方法,容器必須確保B調用A的另一個實例;它是同一個線程的事實並不重要,因爲重入和線程安全是不同的事情。

同樣的情況也適用於當一個通過查找的JNDI引用調用本身,容器在尋找A的釋放實例反之涉及在運行時,如果A直接調用它的方法,這是一個簡單的Java方法調用「this」,而不涉及容器。