Object identity
Florian Minjat
florian.minjat at emn.fr
Tue Jun 12 20:16:59 UTC 2007
I have another question : if I ask magma for an object Player which
references others Players in its Letters, will magma deserialize all
the referenced players ?
If it is the case, is there a way to ask for an 'half-deserialization'
? By that I mean for example getting the referenced Players with all
their primitive objects but no referenced object ? Otherwise I will
need to seriously rethink the Mailbox/Letter model of my application.
Florian
Chris Muller wrote:
> Hi Florian, this is an interesting problem.
>
> First to answer your question, Magma identifies an object as already
> in the repository if it has a "permanent" oid. This is an oid range
> between MaOidCalculator #firstUserObjectOid and #lastUserObjectOid.
> The #hash of an object never comes into play to determine this, or
> anything in Magma for that matter.
>
> One way to get your large object-model into Magma would be to change
> the method MaObjectBuffer>>#ensureSpaceFor: to allow more than 10
> megabyte serializations. I only suggest this only because it is an
> arbitrary limit and it looks like your model is right there just over
> the limit. Change it to 50-meg on the fastest computer you have, It
> should work. Submit the commit and let it run all night.
>
> Another option would be to temporarily change your Players to
> reference the other players only logically; by some temporary id or
> something. Once you get them loaded into Magma, then reset the
> references back to the actual objects.
>
> Note #maTransientVariables is available to implement on Player so it
> will not serialize those variables, so you could actually ADD a new
> logical reference, if necessary, and make the hard player reference
> transient (temporarily).
>
> Please let me know if these ideas are feasible.
>
> - Chris
>
>
> On 6/10/07, Florian Minjat <florian.minjat at emn.fr> wrote:
>> Hi,
>> I am trying to transfer a big object hierarchy to Magma : 110100
>> objects in 9004144 bytes.
>> The basic structure is composed of ~70 Players with a lot of stuff
>> inside. Each players can have some Letters which references other
>> Players as sender or recipients.
>> The problem is that I can't submit one player to an empty Magma
>> repository without letting Magma insert all the references Players.
>> And the resulting transaction is too big, causing an error. So I
>> separated all the Letters from the Players, inserted the players
>> (~50min) and then tried to insert the Letters. But I close the
>> connection to the magma repository between the two, so Magma tried
>> again to load all the references Players.
>> So here is my question : how does Magma identify a given object as
>> already inside a repository ? Does it compare the hash of the objects
>> and I just need to redefine the hash method of Players ?
>> Each try is quite long so I would like to understand a little more
>> of the inner mechanisms of Magma instead of trying numerous times.
>>
>> Florian
>> _______________________________________________
>> Magma mailing list
>> Magma at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/mailman/listinfo/magma
>>
>
More information about the Magma
mailing list