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 >