I believe a different solution will be necessary there to resolve this issue for page flows (I don't think it is as simple as removing the bean context from the session).
The change shouldn't have any noticeable effect on control lifecycle. The control's lifecycle will remain exactly the same, the change will just ensure that we don't get into the invalid state with multiple threads. - Chad On 1/10/06, Rich Feit <[EMAIL PROTECTED]> wrote: > > Just a few questions: > > - Is it valid to store a Control instance for a longer duration, and > to put it into different bean contexts? This would be the case for > Control member variables in page flows. > > - What impact would this have on lifecycle? Maybe this is only an > issue as it relates to the question above... > > Rich > > Chad Schoettger wrote: > > >Due to some of the issues brought to light by BEEHIVE-1028, I would like > to > >propose that we remove the ability to store a session bean context in the > >HttpSession when using the ControlFilter. > > > >Here's a summary of the issue: > > > >When multiple threads within the same session hit a ControlFilter (with > the > >ControlFilter's 'useSession' init param set to true). The same > >ServletBeanContext may be used for both threads: > > > >ThreadId Info > >------------- ------------------------------------------ > > 34 onAcquire > > 34 begin dummyControlMethod > > 34 end dummyControlMethod > > 35 begin dummyControlMethod > > 34 onRelease > > 35 end dummyControlMethod > > > >Here is what happens in the ServletBeanContext: > >- A new ServletBeanContext is created and stored in the session for > thread > >#34 > >- The ServletBeanContext's beginContext() method is invoked and passed > the > >current request and response for thread #34 > >- Thread #35 sees that there is already a context in the session, grabs > it > >and calls begin context with its request and response. > >- The ServletBeanContext's beginContext() method stores requests and > >responses on a Stack. > >- Now thread #34 calls ServletBeanContext().endContext() which pops the > >Stack (pops thread #35's request and response from the stack > >- Now we are at a point in which things are pretty messed up. > > > >I believe that the core issue here is that it is improper to store a bean > >context in a session, since the servlet bean context works on a > per-request > >scope, but at any given time there may be multiple requests made on a > single > >session. > > > >My recommendation would be to remove the ability to store the bean > context > >in the session, and just create a new bean context for each request > >received. This is a fairly straightforward modification to the > ControlFilter > >and will resolve this issue. > > > >Questions/Comments? > > > > - Thanks, > > Chad > > > > > > >
