How to Achieve Persistence? II


*If neither the programming language, nor its standard library, nor the operating system supports persistence, it is still possible to implement a library for this. This is more easily achieved in object-oriented languages but also traditional languages attempted it. The first idea for this was published by Herlihy (1982), an object-oriented implementation was provided by Borchert for Oberon (1994).
*The principal idea is that each persistent class provides so-called marshaling procedures that convert an object into a sequence of bytes (on some stream) and that are able to construct an object on base of such a sequence of bytes.
*Problem: Writing such objects is easy but how to locate a reading method? Or better: How to construct the right object that has to be asked to read itself?
*Solution: The design pattern of object factories helps. Maintain a registry with class names and associated constructor objects. Each object that is written to an output stream must be preceded by a class information (usually just a string that specifies the name of the class). On reading, first the class name is read, then the factory is asked to find the constructor object associated with that class name. Afterwards the constructor object creates an instance of that class using the marshaling constructor which takes an input stream as argument.
*Drawback: All persistent objects must belong to classes that are derived from a abstract base class for persistent objects.
*Another drawback for C++: No free matured solution for C++ is known to me. Only commercial or experimental libraries.
