yi gong updated Bug WELD-1418
Change By: yi gong (27/Apr/13 12:31 PM)
Description: There's a race condition in AbstractConversationContext when create first conversation scope if it's the first request of one session.
Suppose such scenario
# User requests a jsf page
# weld creates a conversations map in the AbstractConversationContext.associate()
# Because it is the first request, there's no session. Weld keep this map in request
#
 A conversation scoped bean is created and put to the map.
#
 In somewhere, a session is created
# In the render phase, server sends partial response back. The page need some jsf resource, eg, jsf2 ajax or jsf resource
# Browser requests the new jsf resource
# At this time  The first request has not finished. So it doesn't reach dissociate() and doesn't put conversations map in the session.
# Meanwhile  The second request reach associate(). There's no conversations map in the session, and the session is existing. It puts its new map! <====
# Then, even the first request finishes it's response and reach dissociate(), because there's already a map, it doesn't put its owner anymore. <====

A quick and dirty fix is always create session before associate(). However, it's better to merge the map in the dissociate()


I upload a example which is very easy to reproduce the problem.




This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira