On 10/08/07, Chris Muller asqueaker@gmail.com wrote:
Put a halt in that method before it checks MaClientServerPreferences debug and tell me what "exc" is.
MaObjectSerializationSoftwareError: class-definition not found
it tries to find a class definition with id 207 while MaClassIdManager nextClassId is 206 at same time, on client side i have a two instances of MaClassIdManager both have classes with id 207. I'm not sure which one is used in anchor request, here their classDefinitionsById dictionaries contents:
.... few hours later...
i finally found the cause! It was because of assigning new read strategy to session just after connecting to it. I disabled assignment, and after this all works just fine (because serializing anchor request graph not causes of serializing readstrategy because its nil ).
Can you give an example in what sequence we must set read strategy , does it needs to be inside transaction and/or only after reifying root object? And why it works with local magma repository, but fails with remote?
Also look at the the entire stack to see what led to the cause of the error. If you paste me the stack I might be able to make an educated guess.
Is there some modification you've made to Magma? Anchor requests are made hundreds of times across the remote connection in the test cases. I believe Hilaire also has tested his program across the Internet. Have you tried it in a standard Magma image (without Gjaller) to observe it works there before adding the additional Gjaller components in?
As far as i know, no modifications was made to magma (Keith - correct me if i'm wrong)
-- Best regards, Igor Stasenko AKA sig.
Sig,
The "Class id not found" it is an indication that there is a class missing from the #protocol, which indicates you have inadvertently extended the protocol. There are two serializers in the client (and, therefore, two ClassIdManagers), one for the persistent domain model, the other used by "Ma client server" strictly for communicating with the server. It is the latter which can have a protocol error (class-id not found).
Look at what kind of object 207 is, it either needs to be added to the #protocol or it shouldn't be sent across.
Can you give an example in what sequence we must set read strategy , does it needs to be inside transaction and/or only after reifying root object?
You can set it anytime after connecting, even before reading the root.
Here's the sequence of steps I took to try to recreate the problem.
1) create a new repository, Dictionary root. 2) start a server listening on 1010:
MagmaServerConsole new open: 'c:\temp\rsError' ; processOn: 1010 ; inspect
3) start a new image ("client") and inspect a new session:
(MagmaSession host: 'localhost' port: 1010) inspect
4) In the session inspector window:
self connectAs: 'test'
5) Set its readStrategy:
self readStrategy: ((MaReadStrategy minimumDepth: 2) onAny: MagmaPerson readToDepth: 5; yourself)
6) inspect the root
self root inspect
Everything worked just fine.
Please help me to help you by providing this level of detail so that I may reproduce the issues you find. The only sentence you gave me to go on for reproducing the problem is this:
It was because of assigning new read strategy to session just after connecting to it.
Regards, Chris
magma@lists.squeakfoundation.org