RE: Hollow state

From: Craig Miskell (cmiskel..lbatross.co.nz)
Date: Wed Feb 19 2003 - 13:55:26 EST

  • Next message: David Solis: "Another problem due to changes PageRecorder in 2.4 version"

    On Thu, 2003-02-20 at 07:33, Andrus Adamchik wrote:
    > Serialization works the other way around in Cayenne - DataContext
    > serializes and deserializes its objects. Making context transient allows
    > to avoid double serialization (Craig Miskell, who implemented this code
    > may, correct me if I am wrong).
    This is correct, although not to avoid double serialization. To quote
    from DataContext (readObject):

            // CayenneDataObjects have a transient datacontext
            // because at deserialize time the datacontext may need to be
    different
            // than the one at serialize time (for programmer defined
    reasons).
            // So, when a dataobject is resurrected because it's datacontext
    was
            // serialized, it will then set the objects datacontext to the
    correctone
            // If deser'd "otherwise", it will not have a datacontext (good)

    This all stems from the fact that simply serializing a DataObject should
    not (and from the user perspective would be rather surprising if) the
    DataContext, and *all* the other DataObjects currently registered in
    that DataContext, were serialized too.

    However, this situation does kind of show a flaw in that logic (well,
    the logic is sound but it doesn't account for all potential uses).

    David: while your solution (refetching etc.) will work, I don't think
    it's quite the best generic solution, and I get the feeling I'm going to
    have to do some serious thinking about how to facilitate this sort of
    situation.

    Off the top of my head, however, we might do something similar to EOF,
    where there is a "current DataContext" variable (probably per thread),
    and the value is used as the DataContext when deserializing
    CayenneDataObject's. When deserializing a DataContext, it just sets
    that variable to itself and deserializes it's objects (they'll pick it
    up). Then we just need some hook into the Tapestry property
    deserialization to set the variable to the relevant DataContext for the
    Visit (typical usage at least).

    Any thoughts on whether this will actually fix the problem (does such a
    hook exist in Tapestry that could be used?)

    Craig



    This archive was generated by hypermail 2.0.0 : Wed Feb 19 2003 - 13:56:04 EST