2010-08-23 31 views
1

我們在學校學習EJB 3.0,並試圖確定我們的老師提出的問題的最佳實踐。我們還沒有使用Spring。EJB3.0:使用依賴注入而不是會話對象

問題如下: 創建一個EJB,記錄同一用戶上次調用bean的時間(調用第一個用戶John),並將其顯示在Web(servlet)上下文中。如果一個不同的用戶(稱他爲Bill)調用這個bean,它顯示了Bill最後一次調用bean的時間,這與John最後一次做的時間不同。

現在,我們可以使用servlet請求中的會話對象來執行此操作。這將爲每個會話分配一個EJB實例,而不會利用依賴注入。像這樣的(僞):

doGet{ 

    timeManagerEJB = session.getattribute("localTimeEJB"); 

    if(timeManagerEJB == null) { 

timeManagerEJB = InitialContext.lookup("path..."); 

session.setAttribute("localTimeEJB", timeManagerEJB); 

} 

} 

這是做的最好的方法還是有內置的EJB框架的功能來處理狀態EJB的多個實例,可能採取的依賴注入的優勢在哪裏?

回答

1

這是實現它的最好方法,還是有一個內置於EJB框架中的函數來處理有狀態EJB的多個實例,可能利用依賴注入?

你不能注入一個有狀態會話Bean成無狀態的物體,如無狀態會話Bean,或者可以通過多個併發客戶端共享一個Servlet,你必須使用在這種情況下,JNDI(並把引用到http會話)。