> I'm sure there's a good explanation for this.

The explanation is that if an object has a serializable reference to the 
context, serializing a single object would also serialize the context ... and 
all the objects in the context. If unsuspected developers serialize N 
individual objects at once, they will be creating N huge copies of the context 
and its contents.

There's unfortunately no clean solution for an "unmanaged" (de)serialization of 
the context-attached auto-expanding object graph. The one we have right now, 
that requires the context to be the serialization "root", seems like the best 
choice out of the available options.

Andrus

> On Feb 26, 2019, at 12:59 PM, Lon Varscsak <lon.varsc...@gmail.com> wrote:
> 
> So reviving this topic (which is different than the one I just posted
> separately), if I archive the DataContext myself along with the object, all
> works as I'd expect (objectContext is not null and I get values back from
> the object).  I guess I was just surprised that in the case of a Web
> application, where the serialization of an object is outside my knowledge
> (like when a framework might archive pages to save on memory) that I would
> also have to remember to have a reference to (so it would also serialize)
> the DataContext.  It happens that I almost always do, but sometimes one
> might fetch some stuff with a context that they don't have a reference to
> and would get this issue.
> 
> I'm sure there's a good explanation for this.
> 
> On Thu, Feb 7, 2019 at 6:17 AM Nikita Timofeev <ntimof...@objectstyle.com>
> wrote:
> 
>> Hi Lon,
>> 
>> The behavior you described in field-based objects seems normal
>> according to Cayenne own test case (see [1] for master branch and [2]
>> for 4.0 branch).
>> It should be like this in map-based objects too (i.e. no context and
>> no values inside). It is supposed that you attach object to context
>> manually after deserialization.
>> So unless you had some custom logic in map-based objects case, I
>> really don't know what is happening.
>> 
>> Maybe you can share your test case?
>> 
>> [1]
>> https://github.com/apache/cayenne/blob/master/cayenne-server/src/test/java/org/apache/cayenne/DataObjectSerializationIT.java#L129
>> [2]
>> https://github.com/apache/cayenne/blob/STABLE-4.0/cayenne-server/src/test/java/org/apache/cayenne/DataObjectSerializationIT.java#L129
>> 
>> On Thu, Feb 7, 2019 at 2:07 AM Lon Varscsak <lon.varsc...@gmail.com>
>> wrote:
>>> 
>>> Hey all,
>>> 
>>> Recently I switched to 4.1's field based data objects (I've been using
>>> 4/4.1 for a while, but using the Map based objects) and I ran into an
>>> issue.  It appears that when using this type of object, the
>>> de-serialization results in an object that is not usable.  It results in
>> a
>>> HOLLOW object that returns null for all of its values.  This object is
>> in a
>>> COMMITTED state to start (no changes), so it really shouldn't be doing
>>> anything special with serialization, but something is amiss.
>>> 
>>> To set the stage: So the object is called Site, it's PK is called siteId.
>>> I fetch an object, I then serialize that object (normally the web
>> framework
>>> would choose when to, but I've create some test code to verify this), I
>>> then deserialize the object.  Now when I call get*AnyAttribute*() on the
>>> deserialized Site object, they all return null and the object is HOLLOW.
>>> In the Map based template, the object is still hollow, but all of the
>>> properties will return a value.
>>> 
>>> Something else that really surprised me (just because of how long I've
>> been
>>> working with this code) is that the deserialized object in both cases no
>>> longer have an object context.  Not sure how I haven't encountered a
>>> problem with that before.
>>> 
>>> Any thoughts?
>>> 
>>> -Lon
>> 
>> 
>> 
>> --
>> Best regards,
>> Nikita Timofeev
>> 

Reply via email to