GlassFish 域中的 JSF 托管 Bean 唯一性

Posted

技术标签:

【中文标题】GlassFish 域中的 JSF 托管 Bean 唯一性【英文标题】:JSF Managed Bean Uniqueness in GlassFish Domain 【发布时间】:2018-04-10 05:14:00 【问题描述】:

如果我在 GlassFish 域内的一个应用程序 EAR 中部署 @ManagedBean 或 CDI @Named JSF 支持 bean,然后在同一 GlassFish 域内的不同应用程序 EAR 中部署相同的托管或命名 bean,这是否会导致冲突或任何问题? 例如,我有一个 LoginController 类,它注册为一个托管或命名的 bean,用于登录不同的应用程序。我还有一些其他常见的水平实用程序,它们注册为托管或命名的 bean,我希望在部署为不同 EAR 的不同应用程序中重用这些应用程序,这些 EAR 可能会或可能不会部署到同一个 GlassFish 域或服务器。 我已经实现了这一点,并且想知道托管或命名 bean 相对于 GlassFish 域和跨应用程序/EAR 的范围。 在 JEE 和 GlassFish 中实现此目的的最佳方法是什么?

【问题讨论】:

旁注:JSF 托管 Bean 已被弃用(从 JSF 2.3 开始)。相反,您应该使用 CDI @Named beans 你试过了吗?应该没那么难 谢谢@AndyGuibert。我已将剩余的 ManagedBean 注释转换为 CDI 命名 bean,但关于 GlassFish 环境中 JSF 支持 bean 范围的基本问题尚未得到解答。 @Kukeltje 我已经实现了,但是很难判断出现的问题是由于这种类型的冲突还是重用组件实现的其他问题,所以我正在寻找一个明确的答案。 【参考方案1】:

每个应用程序都创建自己的 CDI 上下文。

这意味着应用程序不使用服务器上其他应用程序的上下文。

因此您可以毫无问题地使用相同的名称

您可以将上下文想象成一个包含对象的大地图,其中每个应用程序都有自己的地图。

【讨论】:

这也是我的理解。在您知道@milkmaid 的 JEE 文档中是否有明确记录这一点的地方? @Chris 这应该回答你所有的问题:LINK

以上是关于GlassFish 域中的 JSF 托管 Bean 唯一性的主要内容,如果未能解决你的问题,请参考以下文章

JSF 获取托管 bean 中的当前操作

托管 bean 问题中的用户输入验证(JSF 2.0)

从 JSF 中的托管 bean 获取资源文件的路径

JSF 2 应用程序中的默认托管 Bean 范围是啥?

迁移到 tomcat 后,将枚举值作为参数从 JSF 页面传递给 bean 方法失败

如何从jsf / primefaces中的托管bean向页面添加组件[重复]