How to store live objects in Monticello?

Bert Freudenberg bert at freudenbergs.de
Mon Feb 12 13:06:20 UTC 2007


A workaround would be to put that string into a method, and  
unserialize the project into the class var in the class-side  
#initialize.

A totally hackish thing would be to include the project file in the  
MCZ, which is just a ZIP archive after all, and when #initialize is  
called on your class, walk up the call chain to find the Monticello  
instance that initiated the load - peek into its innards to get at  
the file ;-)

- Bert -

On Feb 12, 2007, at 13:50 , Milan Zimmermann wrote:

> Mathew,
>
> do you mean class-side initilization that would run when the MCZ is  
> loaded in
> the image on the "target" system? If so, that is not what I am  
> looking for -
> I am explicitly trying to initialize that member only on the first  
> system
> that creates the MCZ. In more detail, when creating resource for  
> the test, I
> stream eToys .pr file into a String, and the tests then stream  
> Projects from
> this string as if they were loading the .pr file. The reason I need  
> that, is
> I cannot (and do not want to) ship these .pr files around with the  
> tests.
>
> Milan
>
> On 2007 February 12 00:27, Matthew Fulmer wrote:
>> On Sun, Feb 11, 2007 at 10:07:48PM -0500, Milan Zimmermann wrote:
>>> Hi,
>>>
>>> I am trying to do something like this: I have a class  
>>> LoadProjectTest
>>> that is essentially a singleton and the LoadProjectTest  class is in
>>> category eToys-Tests. I'd like to do something like this: In the  
>>> image
>>> where this class originates, I am creating the instance, and  
>>> setting one
>>> instance variable with some value from a local file. I'd like the
>>> instance to be stored in Monticello, when I "save" the category.  
>>> Then,
>>> when the MCZ is loaded into another image, the instance would be  
>>> there,
>>> filled with the value as created in the originating image.
>>>
>>> However, when I load the MCZ into another image, the instance is  
>>> null;
>>> although I was assuming otherwise, that makes sense as the  
>>> Monticello
>>> repository stores code not live objects.
>>>
>>> Is it possible to, somehow, to make Monticello to keep the  
>>> instance, so
>>> it is deserialized from the MCZ when the MCZ is loaded into the  
>>> target
>>> image?
>>
>> You would write some class initialization code that creates this
>> instance, and stores it where you see fit. Put your code in the
>> class-side initialize method.
>>
>> A good example of a code that does just that is the class
>> ExternalType in category FFI-Kernel. Look at the methods in
>> category "class initialization"
>>
>>> Thanks Milan
>>
>> Hope it helps.
>







More information about the Squeak-dev mailing list