User's Manual

Chapter 11. Services Tutorials 145
Gray nodes represent types that are ignored by the versioning service.
There are two kinds of edges in Figure 11-9:
1. Unlabeled edges represent the subtype relationship between two nodes. For example, VUT2
extends UT2.
2. Labeled edges are those where the edge tail is an object type that has an attribute whose type
is the edge head. For example, VT2 has the component attribute c1s of type C1.
Four kinds of attributes are important from the versioning perspective: marked versioned (vnd),
marked unversioned (unv), required (rqd) and components (cnt).
11.5.6. Differences between WAF 5.2 and 6.0
If you used the versioning service in previous releases of WAF prior to and including 5.2, you will
notice a number of differences between the old and current implementation.
The old implementation operated on the domain object level. The current implementation operates on
the data object level. Key differences that stem from this are:
1. Previously, you had to subclass VersionedACSObject in order to make your domain objects
versioned. This is no longer necessary.
2. Consequently, you are no longer required to use the methods getMaster(), setMaster(),
etc. The notion of master is gone. Although marked deprecated, these methods remain in order
to provide some degree of backwards compatibility on the API level.
3. In the old versioning systems, calling the delete() method never actually deleted the under-
lying data object. It merely marked it as deleted via the is_deleted flag in the vc_objects table.
This was referred to as a soft delete. It was possible to hard-delete an object via the perma-
nentlyDelete() method of the VersionedACSObject class. This is no longer supported. In
the current versioning system, all deletes are hard deletes.
As a consequence, it is no longer necessary to write queries such as this:
select
f.id, frob_name
from
frobs f,
vc_objects v
where
f.id = v.object_id
and v.is_deleted = ’0’;
Instead, one can simply write:
select
f.id, frob_name
from
frobs f
4. The old versioning provided the ability to turn off versioning on a per instance basis. The method
trackChanges() could be overloaded to tell the versioning service whether or not this domain
object wished to be versioned. The new versioning service no longer provides this capability.
What it offers instead is the ability to turn off versioning entirely until the end of the current
transaction by calling Versions.suspendVersioning().
It is possible to request that an attribute of an object be not versioned. For instance:
versioned object type Frob {
BigInteger[1..1] id = frobs.id INTEGER;
unversioned String[0..1] type = frobs.type VARCHAR;