2010-05-14 24 views
6

我正在試驗EJB3如何在servlet線程中獲得新的有狀態會話bean?

我想注入一個有狀態的會話bean到一個servlet中,以便每個訪問該servlet的用戶都會獲得一個新的bean。

很明顯,我不能讓這個bean成爲servlet的一個實例變量,因爲它將被共享。並且不允許注入局部變量。

我可以使用new運算符來創建一個bean,但這似乎不是正確的方法。

有沒有正確的方法來做到這一點?看起來我想要做的事很簡單,畢竟我們希望每個新客戶都能找到一個空的購物車。

回答

14

您不能使用new來獲得新的SFSB。

你通常做的是lookup一個新的使用InitialContext

MyBean bean = (MyBean) new InitialContext().lookup(name); 

然後您可以獲得可以跨請求重用的特定SFSB的引用。

this answer

你不應該通常注入SFSB, 除非是到另一個SFSB或成 一個Java EE客戶端。您應該在引用類上使用@EJB (例如您的 servlet)來聲明ejb-ref和 ,然後在代碼中執行JNDI查找以獲得該實例的 。然後可以將此實例 直接放置在您的 Http會話中。

有關SFSB的更多信息,你可能會希望從我這些其他答案:

希望它能幫助。

+0

新的SFSB應該叫什麼名字? – 2010-05-14 11:30:54

+0

您應該能夠在@Stateful(name =「xxx」)中提供'name'並將其用於查找。它實際上有點複雜,並且有各種各樣的名稱(請參閱'beanName','name'和'mappedName')以及是否必須使用前綴'java:comp/env /'。我從來都不記得所有這些之間的微妙之處。嘗試一下最簡單的情況,否則會產生另一個問題。 – ewernli 2010-05-14 11:54:10