Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在servlet线程中获得新的有状态会话bean?_Java_Servlets_Dependency Injection_Jakarta Ee_Ejb 3.0 - Fatal编程技术网

Java 如何在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 = (

我正在试验EJB3

我想将一个有状态会话bean注入到servlet中,这样每个点击servlet的用户都将获得一个新bean

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

我可以使用新操作符创建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/
是否必须使用。我从来不记得这一切之间的微妙之处。尝试一下最简单的情况,也许会产生另一个问题。