A persistent object is an object that is saved on secondary storage during a program execution and thus survives the program execution in which it was created. A persistent object may be read by another program execution. Any BETA object can in principle be persistent. In the current implementation, the execution state (i.e. component stacks) is not saved. Furthermore, for certain types of objects it may not be meaningful to make them persistent. This is e.g. the case with user interface objects generated by libraries such as xtenv, bifrost and macenv. Xtenv objects may e.g. have partial state information about windows, widgets, etc., but this information will not be sufficient to restore the screen.
By default, when an object is made persistent, all objects that can be reached through references are also made persistent. This includes statically enclosing objects [1]. The set of objects that can be reached from an object in this way is called the transitive closure of the object.
Persistent objects are saved in a persistent store, which is a collection of persistent objects. A persistent store has a name. In the current implementation, the name of a persistent store is the name of a file system directory containing the files making up the persistent store. Several persistent stores may exist and references between objects in different persistent stores are supported. A persistent store is itself a BETA object with a number of attributes.
An object may be pointed out to become a persistent root by means of the put operation on the persistent store. A persistent root must be given a logical name in the form of a text string. On checkpoint time, all objects reachable from persistent roots are saved in the persistent store.
Persistence in BETA - Reference Manual | © 1991-2002 Mjølner Informatics |
[Modified: Monday October 23rd 2000 at 22:18]
|