There's a race condition in AbstractConversationContext when create first conversation scope if it's the first request of one session.
Suppose such scenario
a jsf page
a conversations map in the AbstractConversationContext.associate()
# Because it is the first request, there's no session. Weld keep this map in request
somewhere, a session is created
# In the render phase, server sends
response back. The page need some jsf resource, eg, jsf2 ajax or
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.
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()
Such page reference a conversation scoped bean