how do we know which are which?

On 1/17/06, Rich Feit <[EMAIL PROTECTED]> wrote:
>
> What I'm asking is whether we could separate out support for
> request-specific contexts, for use with controls that get resources that
> are tied to a specific request (and *not* ones that merely use the
> request as a path to get a ServletContext-scoped object).
>
> Daryl Olander wrote:
> > It's obviously control dependent.  For example, in the database control
> the
> > connection is acquired in the onAcquire method.  You can invision other
> > controls that could hold something like a disconnected dataset that you
> can
> > share between requests for some reason.  It's really about the control.
> >
> > On 1/17/06, Rich Feit <[EMAIL PROTECTED]> wrote:
> >
> >> That's true, and I see how that could cause perf issues.  I do think
> >> that having one context per controller instance could create massive
> >> user sessions, though -- it would be worth looking into.
> >>
> >> One other basic question I have is about use case.  In general, what
> are
> >> you acquiring in onAcquire that actually is scoped to a particular
> >> request?  Is it possible that we could separate out that kind of
> >> support, to avoid having a separate context per FlowController?
> >>
> >> An alternative would be to make the base context *much* more
> lightweight
> >> than it is today (or than it was when I looked at it last).
> >>
> >> Rich
> >>
> >> Daryl Olander wrote:
> >>
> >>
> >>> Yes there is one per instance.  The problem with scoping it to the
> >>>
> >> request
> >>
> >>> you then have to call the JavaControlUtils.initJavaControls on each
> >>>
> >> request
> >>
> >>> to make sure the controls point to their context (this is currently
> done
> >>>
> >> in
> >>
> >>> create).
> >>>
> >>> I don't believe we can do it on the request boundary, but would have
> to
> >>>
> >> do
> >>
> >>> it at each of the synchronization blocks.
> >>>
> >>> On 1/17/06, Rich Feit <[EMAIL PROTECTED]> wrote:
> >>>
> >>>
> >>>
> >>>> One question I have is about session size.  The reason that
> >>>> FlowController itself wasn't a Controls context originally was that
> it
> >>>> would have magnified the size of the controller instance in the
> session
> >>>> (there's a lot of state in the base context classes).  With this
> change,
> >>>> is there now a PageFlowBeanContext per FlowController instance?  If
> so,
> >>>> this could increase the session size by a lot, in any case where
> there's
> >>>> more than one FlowController in the session (e.g., nesting or
> multiple
> >>>> browser windows, but it would be particularly dramatic in a portal).
> >>>>
> >>>> Am I understanding correctly?
> >>>>
> >>>> If so, would it be possible instead to scope the PageFlowBeanContext
> >>>> into the request?  This seems similar to what Chad did on the
> >>>> ControlFilter side (disabling the ability to store the context in the
> >>>> session).  I'd have the same question here that I would there;
> >>>> basically, is it OK to have a control that lives longer than a
> context
> >>>> it gets put into?  But if it *is* OK, then this might be a good
> >>>> alternative.
> >>>>
> >>>> Rich
> >>>>
> >>>> Daryl Olander wrote:
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>> I have the first part of the page flow Control Container issue fixed
> >>>>>
> >> and
> >>
> >>>>> passing BVTs.
> >>>>>
> >>>>> There are two basic problems with the current implementation of the
> >>>>>
> >>>>>
> >>>>>
> >>>> control
> >>>>
> >>>>
> >>>>
> >>>>> container support inside the page flow runtime.  The first issue is
> >>>>>
> >> that
> >>
> >>>>>
> >>>> we
> >>>>
> >>>>
> >>>>
> >>>>> don't guarantee that beginContext->onAcquire->endContext->onRelease
> >>>>>
> >> will
> >>
> >>>>>
> >>>> run
> >>>>
> >>>>
> >>>>
> >>>>> on only a single thread (request).  The result is that any resources
> >>>>> acquired in the onAcquire() event by a control can be shared by
> threads
> >>>>>
> >>>>>
> >>>>>
> >>>> in
> >>>>
> >>>>
> >>>>
> >>>>> multiple requests and that we at time call onRelease while another
> >>>>>
> >> thread
> >>
> >>>>> may be running in a control method.  (This is the problem that
> >>>>>
> >> originally
> >>
> >>>>> was seen.)  The second issue, is that the same request/response are
> >>>>>
> >> also
> >>
> >>>>> visible on two different threads.  In this problem the last thread
> >>>>>
> >> pushs
> >>
> >>>>>
> >>>> the
> >>>>
> >>>>
> >>>>
> >>>>> request/response onto a stack maintained by the
> >>>>>
> >> ServletBeanContext.  The
> >>
> >>>>> context is stored in the session, meaning all controls using the
> >>>>>
> >> context
> >>
> >>>>> actually just see the request/response that is on the top of the
> stack.
> >>>>>
> >>>>> My fix involves a couple of simple changes.  At the moment, I'm
> >>>>>
> >> ignoring
> >>
> >>>>>
> >>>> the
> >>>>
> >>>>
> >>>>
> >>>>> faces backing bean object which is the second part of this fix and
> not
> >>>>>
> >>>>>
> >>>>>
> >>>> yet
> >>>>
> >>>>
> >>>>
> >>>>> finished.  For my change I did the following:
> >>>>>
> >>>>> 1) I scope the PageFlowBeanContext (ServletBeanContext,
> >>>>> ControlContainerContext) to a FlowController.   Because we
> synchronize
> >>>>>
> >> on
> >>
> >>>>> the current page flow and the life time of the controls is the page
> >>>>>
> >> flow
> >>
> >>>>> instance, it makes sense that the ControlContainerContext is also
> >>>>>
> >> scoped
> >>
> >>>>>
> >>>> to
> >>>>
> >>>>
> >>>>
> >>>>> the page flow.
> >>>>>
> >>>>> 2) I then move the beginContext/endContext
> (initialization/termination)
> >>>>>
> >>>>>
> >>>>>
> >>>> code
> >>>>
> >>>>
> >>>>
> >>>>> into the synchronization blocks that prevent multiple threads into a
> >>>>>
> >> page
> >>
> >>>>> flow.  I believe there are three blocks of code that are
> synchronized
> >>>>>
> >> and
> >>
> >>>>> provide user code access to controls in a page flow, the onCreate,
> the
> >>>>> beforeAction/Action/afterAction, and JSP rendering.  This means we
> now
> >>>>>
> >> do
> >>
> >>>>>
> >>>> a
> >>>>
> >>>>
> >>>>
> >>>>> beginContext/endContext three times for a new page flow request. We
> >>>>>
> >> also
> >>
> >>>>> create a ControlContainerContext when a page flow is created.  It
> also
> >>>>> insures that the container guarantees that the control life cycle
> above
> >>>>>
> >>>>>
> >>>>>
> >>>> is
> >>>>
> >>>>
> >>>>
> >>>>> enforced.
> >>>>>
> >>>>> I've passed the BVTs, but there are very few controls tests.  I've
> >>>>>
> >> added
> >>
> >>>>>
> >>>> a
> >>>>
> >>>>
> >>>>
> >>>>> few tests that were not covered (like not calling a control method
> >>>>>
> >> during
> >>
> >>>>> JSP rendering for example).
> >>>>>
> >>>>> I'm proposing to send out the diff later today for review of this
> >>>>>
> >> portion
> >>
> >>>>>
> >>>> of
> >>>>
> >>>>
> >>>>
> >>>>> the change and I will then check this in tomorrow if there are no
> >>>>> objections.  This is a pretty risky change because I'm not
> completely
> >>>>> familiar with the page flow runtime and the controls life
> >>>>>
> >> cycle.  Please
> >>
> >>>>> review this fix and this message.
> >>>>>
> >>>>> Thanks
> >>>>>
> >>>>> BTW, this fix simply fixes the page flow problem.  This exact
> problem
> >>>>>
> >>>>>
> >>>>>
> >>>> still
> >>>>
> >>>>
> >>>>
> >>>>> exists in shared flows and global app.  At the moment, it looks like
> we
> >>>>> can't solve this problem there (still more thinking to be
> done).  The
> >>>>>
> >>>>>
> >>>>>
> >>>> result
> >>>>
> >>>>
> >>>>
> >>>>> is that we may end up deprecating the use of Controls in shared flow
> >>>>>
> >> and
> >>
> >>>>> global app.
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>>
> >
> >
>

Reply via email to