[Seaside-dev] Seaside 3.0.4 ... Issue 482

Dale Henrichs dhenrich at vmware.com
Tue Feb 15 19:17:44 UTC 2011


I think Issue482 requires a post load doit when loaded into an existing 
Seaside3.0.x installation.

The contents of the table class instance variable were changed to effect 
the speedup, but if you are updating an existing installation the class 
initialize methods won't be re-executed automatically, so the new code 
will be running with the old table contents....

Now it's true that I've seen the tests pass when run in an updated 
issue, but I am wondering if there might be trouble lurking somewhere...

A naive comparison of the WAEncoder code in 3.0.3:

   encoded isString
     ifTrue: [ stream nextPutAll: encoded ]
     ifFalse: [ stream nextPut: encoded ]

and in 3.0.4:

   encoded notNil
     ifTrue: [ stream nextPutAll: encoded ]
     ifFalse: [ stream nextPut: encoded ]

makes me think that if the encode variable is a Character then it will 
be passed into the #nextPutAll:, which is expecting a String ... now it 
is possible that the Pharo implementation doesn't care whether the arg 
to nextPutAll: is a Character or a String, or maybe I'm missing 
something ...

Anyway, I guess this is a long winded way of saying that I think an 
explicit post load doit is _required_ that explicitly rebuilds the 
tables with new contents:

   WAUrlEncoder initialize.
   WAXmlEncoder initialize.

I expect to add this to the Metacello config.

I ran into this in GemStone, because we have a primitive that encodes 
the string based on the encoding table and of course the primitive 
choked when the table contents changed.

This happens to be one of the reasons that I've branched Seaside-Core 
for GemStone ... I don't expect to be able to eliminate all of the 
places where I've found it necessary to create a GemStone branch of the 
common Seaside code, but perhaps this _is_ an instance where some 
creative application of Grease would improve the portability?

Dale


More information about the seaside-dev mailing list