Hey Daryl,

It solves a set of problems that involve multiple requests to different page flows. Consider this:
   - request A: hits x.jpf
   - request A: nests y.jpf
   - request B: hits z.jpf, blowing away the nesting stack
   - request A: returns from y.jpf, gets EmptyNestingStackException
or...
   - request A: hits x.jpf
   - request B: hits y.jpf, making it the current page flow
   - request A: forwards to a JSP that expects x.jpf to be current

The solution is to defer the committing of the nesting stack and the current page flow (and shared flow, and JSF backing bean) until the end of a chain of forwarded requests -- that way, the request state is internally consistent. You can still end up with faulty app behavior with two concurrent requests, but this gets rid of situations where our framework itself gets confused (EmptyNestingStackException, NoPreviousPageException, etc.).

The StorageHandler was originally the plug point where we could allow storing page flow instances in alternate locations (e.g., database or request). One thing that would be nice to change would be to have a base class to support deferred-until-end-of-request storage in general, so the logic could be used with locations other then the session. Ultimately we should be able to have a storage handler that applies per-pageflow, overriding the webapp-wide one.

Does this answer your question?

Rich

Daryl Olander wrote:
Rich,
Just curous what problem the DeferredSessionStorageHandler solves and in
general why we talk to the session thorugh the StorageHandlers?  The tags
store everything directly in the session.  Under what senarios do we ever
see having different implementations of this?

Reply via email to