I'm still on the JSF learning curve, but I believe we're talking here about saving the UIComponent tree state, and that that is done via a custom approach in JSF.

Firstly the JSF framework saves the classnames of the UIComponent object tree, so that it can build an identical tree (but of new UIComponent instances) when it needs to.

Then each UIComponent object in the tree has its "saveState" method called, which is expected to return an object array containing its state. The UIComponent doesn't use java serialization; components with no children typically just store the primitive values of its member fields into an object array. Note that saveState can't use normal serialization because the "component tree" has already been rebuilt by the framework and that the return value of saveState is used to *repopulate a particular UIComponent instance* (the one restoreState is called on) rather than creating a UIComponent tree as deserialisation would do.

I don't know why this custom approach was used.

If I'm on the wrong track, please let me know.

Regards,

Simon

Adam Winer wrote:
Ah, so you don't save the objects directly, you save the byte streams?

That's excellent for development - it's a pain figuring out down the road that one object way down deep isn't serializable, and only when you try clustering right before going production :) - but seems like an unnecessary performance hit at deployment time. Perhaps a flag to switch between the two?

-- Adam



On 10/19/05, *Mathias Brökelmann* <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:

    You are right the two objects in SerailizedView are serialized and put
    into the session.

    The instances of the server side state where not serialized before.
    This doesn´t affect the component instances since they are only
    referenced by class name in the state but it could have an effect on
    the state of the components. Some components may have statefull
    objects in their state (t:savestate for instance)

    The next thing is that clustering or a restart of the container is now
    better supported because the user will see a NotSerializeableException
    immediatly if a value of the state is not serializable.

    2005/10/18, Adam Winer <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:
     > What exactly do you mean by "the serialized view is now really
     > serialized (this was not the case before)"?  Before, server-side
     > state saving (at least in 1.1 RI) was just stashing the UIViewRoot,
     > which dies for a bunch of reasons.  I'm gonna guess that
     > you grab the SerializedView object with StateManager.saveState(),
     > and then save off its two components.


    --
    Mathias



Reply via email to