java - EJB:了解容器如何选择 bean
问题描述
我试图了解 statefull bean 的工作原理(我阅读了理论部分并且我知道 statfull 和 statelss bean 之间的区别......),因此我创建了一个 statefull bean 和一个 rest API 来访问它。
我发现容器为每个请求创建/实例化一个新bean。
然后我使用了一个 servlet 来访问同一个 statfull bean,这一次容器只创建了一个bean 来服务所有请求。
所以我的问题是:
- 为什么容器会为 rest API 创建许多 bean?我知道它将每个请求视为一个单独的客户端,但它是如何知道的,因为使用 http 请求访问了 rest API 或 servlet?
- 为什么将来自servlet的请求视为一个客户端?(因此它创建一个 bean)
- 就我而言(在本地进行测试)如何在使用 servlet 时强制容器创建更多的 bean(如何模拟多个客户端)。
先感谢您
解决方案
我检查了规格,但找不到有关此的内容。但这似乎是合理的:
必须有人照顾 SFSB 实例,完成后关闭它。
将 SFSB 的 EJB 业务方法公开为 REST 服务时,将使用通用 servlet。唯一可用的范围是单个(无状态)HTTP 调用的请求范围,因此在调用完成后,通用 servlet 应该关闭 SFSB。
servlet 有一个明确的生命周期。注入的 EJB 是在 servlet 初始化期间创建的,并且可以在销毁时关闭。
您可以在创建每个 HTTP 会话时查找新的 SFSB 实例,使用会话上下文对该会话进行后续调用,并在匹配会话关闭时关闭 SFSB。
推荐阅读
- xpath - 获取包含具有特定类的另一个元素的 xpath 元素
- flutter - 错误:函数表达式不能有名称。Navigator.push(context, MaterialPageRoute(builder: context){ ^^^^^^^^^^^^^^^^^
- django - 如何将自动生成的数据库模型图集成到管理文档界面中?
- raspberry-pi - WiFi直接无法将Raspberry Pi连接到Android
- android - 尝试将 ViewGroup 添加到不同活动的线性布局中
- c# - 当您有一个通用的 buttonclicked 事件时,如何知道按下了哪个按钮?
- php - Consolibyte Quickbooks PHP SDK(Web 连接器)- 身份验证失败
- amazon-web-services - 需要 S3 存储桶策略帮助才能将一个文件额外限制为特定 IP
- python - 无法在 vs 代码中安装 dlib 它显示一些安装错误
- python-3.x - python tox:如何使用具有多个版本的命名环境?