I’ve been googling for a couple hours on this issue to no eval.
WELD docs and the CDI spec are pretty clear regarding thread safety of the scopes provided.
For example:
-
Application Scope – not safe
-
Session Scope – not safe
-
Request Scope – safe, always bound to a single thread
-
Conversation Scope – safe (due to the WELD proxy serializing access from multiple request threads)
I can’t find anything on the View Scope defined by JSF 2.x.
It is in roughly the same bucket as the Conversation Scope in that it is very possible for multiple requests to hit the scope concurrently despite it being bound to a single view / user. What I don’t know is if the JSF implementation serializes access to the bean from multiple requests.
Anyone have knowledge of the spec or of the Morraja/MyFaces implementations that could clear this up?
The view scope is with normal usage thread safe. It can be used by only one browser window/tab. Namely, it’s keyed by an unique hidden input field which is set on the initial GET request. Every postback on the same view will use the one and same view scoped bean. The browser itself already "synchronizes" postback requests in the same window/tab. A new browser window/tab is effectively a new GET request and will therefore create a new and completely independent view.
As to ajax postbacks, they are by specification queued. This is mentioned in chapter 13.3.2 of the JSF 2 specification:
Only when using PrimeFaces, queueing can be disabled with
<p:ajax async="true">. When using this in combination with view scoped beans, threadsafety must be reconsidered the same way as for session scoped beans.See also: