company logo

Synchronized versioning

Synchronized versioning works similar to independent scope versioning but version numbers are uniquely defined on database level and represent the temporal sequence. Thus, proper versions may be selected when accessing related global instances. When selecting an instance in a property handle, related instances are automatically read for the version older or equal to the version of the selected instance. This prevents applications from many inconsistencies, but not from all. Since creating new versions for an instance owner scope A will not automatically create new versions for instance owner scope B, which is referenced via relationship in A. Thus, changes made in A in version v1, v2, ... cannot be reflected properly in B.

Synchronized versioning also provides flexibility for creating application specific version management. Instance or owner scope versions are not upgraded automatically, but have to be upgraded explicitly by the application. Besides creating new versions, one may upgrade each instance (or collection) to a version number greater than the current owner scope version but lower or equal to the last database version.

Running synchronized versioning modes is based on versions created on database level, i.e. one must not call the owner scope specific createVersion() function, but Database::createVersion(), instead. In order to upgrade the owner scope (instance or object space) to a new version, one may call the owner scope specific updateVersion() function. Before creating a new scope version, instance data will be stored for the current instance version, i.e. the function has to be called before entering modifications for the new version.

In general, synchronized versioning is a better solution than independent versioning concerning consistency, but it is not a perfect one.

Synchronized versioning may be defined in connection with object space, owner scope or instance versioning. Usually, synchronized versioning makes not much sense in combination with object space versioning, but in some special cases this might be a useful option. One must not define synchronized versioning together with database versioning.

More about the behavior of synchronized versioning is described in "Versioning scopes".