使用@EJB时,每个托管bean是否都有自己的@EJB实例?

2023-11-21

我正在将 JSF 2.2 用于 Web 项目,并且现在正在实现登录页面。

我有一个login.xhtml作为view,和一个名为的支持 beanUserLoginView.
这种豆子有一个EJB属性beanprivate UserService userService(如图所示here).

这是否意味着每个新UserLoginView得到一个新实例UserService?

在生产环境中这样实现可以吗?


这是否意味着每个新的 UserLoginView 都会获得一个新的 UserService 实例?

没有。给定的UserService is a @Stateless EJB. @StatelessEJB 作为容器自动生成的可序列化代理进行池化和注入。其中,EJB 发生异常时的堆栈跟踪就是这一点的证据。您会看到支持 bean 方法和 EJB 方法之间有额外的层。

自动生成的代理类@StatelessEJB看起来大致是这样的(实际上更复杂,例如DB事务也需要在这里获取、启动和提交,具体取决于@TransactionAttributeEJB 类和/或方法):

public class UserServiceProxy extends UserService implements Serializable {

    public User find(Long id) {
        UserService instance = getAnAvailableInstanceFromPool();
        User result = instance.find(id);
        releaseInstanceToPool(instance);
        return result;
    }

    public Long save(User user) {
        UserService instance = getAnAvailableInstanceFromPool();
        Long result = instance.save(user);
        releaseInstanceToPool(instance);
        return result;
    }

    // ...
}

你看到了吗?它只是从 EJB 池中获取一个可用实例,然后将方法调用委托给它,最后将其释放到池中以供将来重用。实际上,正是这个代理实例被注入到您的 JSF 托管 bean 中。

顺便说一下,CDI 也是这样工作的。这正是为什么使用 CDI 可以将范围较窄的 Bean 注入范围较广的 Bean 中,并且仍然可以使其按预期工作。 JSF的@ManagedBean注入actual实例,因此它不会那样工作。如果 JSF 也使用代理来实际获取当前 bean 实例,那么它就会起作用FacesContext并委托给它。

Only @StatefulEJB 实际上与客户端的生命周期相关。如果托管 bean 作为客户端,它确实会获得“它自己的”实例。也可以看看JSF 请求作用域 bean 会在每个请求上不断重新创建新的有状态会话 bean?

And @SingletonEJB 池中基本上最多有一个实例。因此每个客户端将始终获得相同的实例。


在生产环境中这样实现可以吗?

绝对地。否则它们就不存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用@EJB时,每个托管bean是否都有自己的@EJB实例? 的相关文章

随机推荐

  • android 是否有向 Google keep 添加数据的意图

    android 是否有向其中添加数据的意图谷歌保留 可以通过新的 Intent Intent ACTION SEND 实现 有一种技术可以通过编程方式选择适当的应用程序 而不是显示可能性 测试
  • Grails GGTS IDE GrailsProcessDiedException:Grails 进程终止

    我在 GGTS IDE 上遇到了以下奇怪的异常 Command terminated with an exception org grails ide eclipse longrunning client GrailsProcessDied
  • C++20 概念:元素可迭代概念

    我正在尝试创造一个概念ElementIterable它可以确定类型是否是嵌套范围 例如 中的元素std vector
  • 0x9d 在什么 8 位字符集中有意义?

    英语的 8 位类似 ASCII 的字符集是什么0x9d有意义吗 我正在清理一些旧的数据文件 偶尔会发现0x9d在其他 ASCII 文本中 不 这不是 UTF 8 它在 Windows 1252 中无效 Python latin 1 编解码器
  • 如何在 iPhone sdk 中创建 Excel 工作表和文件?

    我想生成应用程序来在 iPhone sdk 中创建 excel 文件 任何人都可以建议我创建它 嗯 对的人看到了你的帖子 SourceForge 上有一个开源 C 库 xlslib 这将完全满足您的需要 但是等等 还有更多 有一个 Obje
  • 限制访问 Web ASP .NET 应用程序的用户数量

    如何限制 Web 应用程序的用户数量 您可能希望将 Web 应用程序限制为一次仅处理 20 个用户 我们公司销售基于多个许可证的应用程序 但我们不确定网络应用程序中的行为是什么 我看到一些建议说 当用户登录时 您可以将用户帐户标记为 Log
  • android logcat中的致命信号6是什么[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我是 Android 开发新手 我的应用程序在从 Activity 切换 11 次时不断被终止 而且它只说 致命信号 6 SIGABRT tid 9485 中的代码 6 Thre
  • Python/SciPy:如何从 CubicSpline 获取三次样条方程

    我正在通过给定的一组数据点生成三次样条曲线图 import matplotlib pyplot as plt import numpy as np from scipy import interpolate x np array 1 2 4
  • 如何从 Tomcat Java 应用程序捕获 SOAP 消息到外部服务器?

    我有一个 Web 应用程序 它在 Tomcat6 内运行并通过 HTTPS 将 SOAP 消息发送到某个外部系统 我想拦截这些消息 为了做到这一点 我在工具 gt Fiddler 选项对话框 重新启动 Fiddler 后 我可以看到对多个主
  • 如何读取内存中存储的图像文件?

    在我的 Android 应用程序中 我使用以下代码将图像文件存储在内部存储器中 FileOutputStream fos con openFileOutput fileName con MODE PRIVATE fos write baf
  • 在不同的控制器中设计表单

    我正在使用 devise gem 进行登录 退出程序 我从设备生成视图文件 使用rails g devise views 我看到有一个 devise sessions new html erb 文件 其中包含登录表单 我创建了另一个文件 d
  • TypeScript - 检查对象的属性是否是具有给定签名的函数

    我有一个从对象获取属性的函数 Utils ts export function getProperty
  • 如何在 Java 中将电话号码格式化为字符串?

    我一直将电话号码存储为很长的长度 我想在将电话号码打印为字符串时简单地添加连字符 我尝试使用DecimalFormat但这不喜欢连字符 可能是因为它用于格式化十进制数字而不是长整数 long phoneFmt 123456789L Deci
  • Android studio java.exe 以非零退出值 3 结束

    我已经通过了与 multidex 问题相关的非零退出值 1 2 但现在我得到了非零退出值 3 工作室留言 Information Gradle Executing tasks emoticons lib proj assembleDebug
  • 通过AJAX调用提示用户保存文件

    我正在将 DHTMLX 网格导出到 csv 并已成功创建 CSV 文件 我遇到的问题是它没有提示用户保存 打开文件 我使用 javascript 中的 post 调用将 CSV 字符串发送到 PHP 然后将该字符串写入 csv 由于某种原因
  • 如何在 C# 中使用 imageMagick

    您能解释一下如何将 ImageMagick 与 C 一起使用吗 我正在尝试将 PDF 页面转换为图像 我想运行 imageMagick 命令 convert 密度 300 input pdf output png string argume
  • 获取类函数的参数数量

    有没有办法检测类中函数的参数数量 我想做的是以下内容 class foo path path to file if file exists path die require path if class exists class die c
  • 在 Maps V2 上绘制多色折线

    我按照以下方式在地图上绘制纯色折线 效果很好 PolylineOptions polyLine new PolylineOptions polyLine width 5 polyLine color Color RED polyLine g
  • WPF 的语法荧光笔[重复]

    这个问题在这里已经有答案了 我目前正在为 WPF 应用程序寻找语法荧光笔 用户可以在文本框中输入内容 希望能够识别代码并相应地突出显示语法 我想先支持C 稍后再支持其他语言 问题重复394751 如果您不介意没有任何文档 Avalon编辑是
  • 使用@EJB时,每个托管bean是否都有自己的@EJB实例?

    我正在将 JSF 2 2 用于 Web 项目 并且现在正在实现登录页面 我有一个login xhtml作为view 和一个名为的支持 beanUserLoginView 这种豆子有一个EJB属性beanprivate UserService