【发布时间】:2015-04-20 19:16:14
【问题描述】:
我有一个带有 Spring 托管 bean 的 Spring 3.0 + JSF 2.0 Web 应用程序。目前所有的 bean 都是会话范围的。在我们的应用程序中,我们没有使用任何向导类型的功能。所有主要功能都出现在不同的选项卡中。
最近我们使用静态代码分析器之一分析了应用程序代码,它指出了会话范围 bean 中许多位置可能存在的竞争条件问题。我了解在多个选项卡场景中,使用会话 bean 可能会出现问题。然后我看了一篇文章http://blog.primefaces.org/?p=702 建议可以将JSF viewScope 实现为spring 的自定义范围来防止这种情况。当我尝试将它用于我的几个 bean 时,它会破坏相应的应用程序功能。
现在我有 2 个问题 - 1. 就我的应用程序的竞争条件而言,当前使用 spring session bean 的情况在未来会有多可怕? 2. 是否有其他方法可以处理会话范围 bean 的多个选项卡问题?
欢迎任何建议。谢谢
【问题讨论】:
-
我不使用 Spring,但我知道 Spring 已经支持
@Scope("view")之类的东西(可能是因为只有某个版本,或者使用了一些自定义代码;使用“spring jsf view scope”进行谷歌搜索会产生很多结果)。它应该适合您的功能要求。然后,关于选择正确的 bean 范围,这是一个有用的阅读:stackoverflow.com/questions/7031885/… 你永远不应该依赖极端情况永远不会发生。使用错误的作用域是完全错误的。 -
@user2704708....我过去曾与
JSF 2.0 +spring 3.0和@viewscope合作过。我尝试过这个stackoverflow.com/questions/13005421/…。结帐答案可能是我会帮助你得到一些想法 -
我用于 Spring 3 + JSF 2 的方法是让 JSF
@ApplicationScopedbean 加载整个 Spring 上下文。然后,该 bean 充当无状态单例,并注入到我用于视图的每个@ViewScopedbean 中。这样,每个视图都可以通过该 bean 定位服务并访问 DAO 服务。