Java 如何在servlet线程中获得新的有状态会话bean?
我正在试验EJB3 我想将一个有状态会话bean注入到servlet中,这样每个点击servlet的用户都将获得一个新bean 显然,我不能让bean成为servlet的实例变量,因为它将被共享。显然,不允许注入局部变量 我可以使用新操作符创建bean,但这似乎不是正确的方法Java 如何在servlet线程中获得新的有状态会话bean?,java,servlets,dependency-injection,jakarta-ee,ejb-3.0,Java,Servlets,Dependency Injection,Jakarta Ee,Ejb 3.0,我正在试验EJB3 我想将一个有状态会话bean注入到servlet中,这样每个点击servlet的用户都将获得一个新bean 显然,我不能让bean成为servlet的实例变量,因为它将被共享。显然,不允许注入局部变量 我可以使用新操作符创建bean,但这似乎不是正确的方法 有没有正确的方法?看来我想做的是相当简单的,毕竟,我们希望每个新客户都能找到一个空的购物车。你不能使用new来获得一个新的SFSB 您通常要做的是使用InitialContext查找一个新的 MyBean bean = (
有没有正确的方法?看来我想做的是相当简单的,毕竟,我们希望每个新客户都能找到一个空的购物车。你不能使用
new
来获得一个新的SFSB
您通常要做的是使用InitialContext
查找一个新的
MyBean bean = (MyBean) new InitialContext().lookup( name );
然后,您将获得对特定SFSB的引用,可以跨请求重用该引用
发件人:
通常不应注射SFSB,
除非进入另一个SFSB或
javaee客户机。您应该使用@EJB
在引用类上(例如,您的
servlet)来声明ejb引用和
然后在代码中执行JNDI查找,以
获取实例。此例
然后可以直接放在你的
Http会话
有关SFSB的更多信息,您可能会对我的其他回答感兴趣:
希望有帮助。新SFSB的名称应该是什么?您应该能够在
@Stateful(name=“xxx”)
中提供名称
,并使用它进行查找。它实际上有点复杂,有各种各样的名称(参见beanName
,name
,和mappedName
),以及前缀java:comp/env/
是否必须使用。我从来不记得这一切之间的微妙之处。尝试一下最简单的情况,也许会产生另一个问题。