@FlowScoped bean

时间:2016-08-29 15:34:46

标签: jsf concurrency cdi managed-bean flow-scope

我已经用@FlowScoped bean做了一个小实验,据我所知,其目的是更容易创建“向导式”Web应用程序,逐步在一系列页面上累积数据,然后,一旦所有数据都是准备好了,把它写入持久存储(这只是一个例子,当然在中间步骤中没有什么可以阻止写入持久存储)。正如我所看到的,对@FlowScoped bean的调用不同步,因此原则上存在破坏存储在bean中的数据的可能性(通过双提交,或通过任何其他方式启动两个几乎同时的HTTP请求,它调用bean的方法)。这与@ConversationScoped bean不同,它们的调用是同步的。

令我感到困惑的是,关于@SessionScoped bean,我找到了几个链接,这些链接谈到需要同步访问@SessionScoped bean(或者建议根本不使用它们,除了很少更改的用户数据),但是我没有找到类似@FlowScoped bean的东西。

什么被认为是使用@FlowScoped bean的“最佳实践”?我错过了什么吗?

修改

@FlowScoped似乎,至少在我看来,部分受到Spring WebFlow的激励,我有一些经验,据我所知,它提供了与JSF 2的集成(并非所有JSF 2.2功能似乎都被实现) ,但似乎PrimeFaces可用,例如)。我知道Spring WebFlow + JSF实际上是在“真实世界”应用程序中使用的,并且优先处理流范围对象的线程安全问题以及双提交问题(必须为每个HTTP请求提供流执行ID,并且它expires并在调用Spring WebFlow“action”方法的HTTP请求之后返回一个新的:因此,对于同一用户和流ID,不能同时调用多个“action”方法。

所以我想理解,如果我希望使用@FlowScoped bean来构建应用程序“flow”(不使用Spring WebFlow),那么JSF 2.2的最佳实践是什么。我是否真的需要自己同步对@FlowScoped bean的访问,或者有一些标准的方法来处理这些问题?

0 个答案:

没有答案