2014-10-01 79 views
0

我開始學習EJB技術。我的問題受到YouTube指南的啓發:https://www.youtube.com/watch?v=NM61Xt7SGmk。這是有點長,所以我會盡量告訴它短:使用EJB時​​可以混合使用DI和JNDI查找嗎?

有引入了EJB的工作方式有兩種:

  1. 手動創建的javax.naming.InitialContext對象,並在此之後,獲得EJB使用。用於獲取EJB實例的lookup(String jndiPath)方法。
  2. 使用依賴注入:使用@EJB之類的註釋,並讓容器來管理所有這些EJB引用。

如果某人在一個應用程序(.ear或.war)中不一致地使用上述兩種方法會怎麼樣?手動創建上下文(在1.點中)以及由容器創建的上下文(在2.點中)是否是相同的上下文?它是否會導致不必要的重複EJB實例?它會起作用嗎?

回答

0

回答你的問題的第一部分。

許多大型項目有時會發現自己使用這兩種機制。這通常發生在:

  1. 應用程序需要訪問遠程ejbs(可能運行在不同的服務器上)。應用程序將不得不通過InitialContext進行手動查找當應用程序定義自己的ejbs時,它將簡單地使用EJB注入。但是,在這裏進行手動查找同樣是允許的。唯一的原因是它不必要,當你可以讓容器爲你做。
  2. EJB規範允許無狀態EJB池,以便每個請求可以由不同的ejb bean實例處理。如果在你的問題中你的意思是不同的情況,情況可能如此。但是還要注意,注入的對象可能(並且大部分是)實際bean實現的代理。對於單例bean,容器在執行上下文中保證一個bean的單個實例,因此無論你是手動查找還是ejb注入,它都會給你相同的bean。
  3. 有狀態的ejbs有狀態和客戶端會話必須維護。如果您處於同一客戶端會話中,手動查找或注入會提供相同的實例(可能此部分需要更多說明)

所以要回答問題的最後部分,不會有任何重複。

相關問題