EJB:了解容器如何选择bean

时间:2018-10-15 08:36:26

标签: java servlets ejb

我试图了解statefull bean的工作原理(阅读了理论部分,并且知道statfull和statelss bean之间的区别……),因此,我创建了一个statefull bean和一个REST API来访问它。
我发现容器为每个请求创建/实例化一个 Bean。
然后我使用servlet来访问相同的statfull bean,这一次容器只包装一个一个豆来满足所有请求。
所以我的问题是:

  1. 为什么容器会为rest API创建许多bean?我知道它会将每个请求视为一个单独的客户端,但它知道如何,因为其余的API或servlet是使用http请求访问的??
  2. 当来自servlet作为一个客户端时,为什么要考虑请求? (因此创建了一个bean)
  3. 在我的情况下(进行本地测试),在使用servlet时如何强制容器创建更多的bean(如何模拟一个以上的客户端)。

提前谢谢

1 个答案:

答案 0 :(得分:1)

我检查了规格,但找不到任何相关信息。但这似乎是合理的:

某些人必须注意SFSB实例,完成后将其关闭。

当将SFSB的EJB业务方法公开为REST服务时,将使用通用servlet。唯一可用的范围是单个(无状态)HTTP调用的请求范围,因此,在调用完成后,通用Servlet应关闭SFSB。

该Servlet具有明确的生命周期。注入的EJB是在Servlet初始化期间创建的,可以在销毁时关闭。

您可以在创建的每个HTTP会话中查找新的SFSB实例,使用会话上下文对该会话进行后续调用,并在匹配会话关闭时关闭SFSB。