如何在servlet线程中获取新的有状态会话bean?

Eri*_*son 6 java servlets dependency-injection java-ee ejb-3.0

我正在试验EJB3

我想将一个有状态会话bean注入一个servlet,这样每个访问servlet的用户都会获得一个新的bean.

显然,我不能让bean成为servlet的实例变量,因为它将被共享.并且不允许显着地注入局部变量.

我可以使用new运算符来创建bean,但这似乎不是正确的方法.

有没有正确的方法来做到这一点?看起来我想要做的事情是相当简单的,毕竟,我们希望每个新客户都能找到一个空的购物车.

ewe*_*nli 14

您无法使用new获取新的SFSB.

你通常做的是用lookup一个新的InitialContext.

MyBean bean = (MyBean) new InitialContext().lookup( name );
Run Code Online (Sandbox Code Playgroud)

然后,您将获得对可以在请求中重用的特定SFSB的引用.

这个答案:

您通常不应该注入SFSB,除非它是进入另一个SFSB或Java EE客户端.您应该在引用类(例如您的servlet)上使用@EJB来声明ejb-ref,然后在代码中执行JNDI查找以获取实例.然后可以将此实例直接放在您的Http会话中.

有关SFSB的更多信息,您可能对我的其他答案感兴趣:

希望能帮助到你.