Change Summary Processing

SDO provides an important feature called the ChangeSummary. Using this feature, a graph of related DataObjects can track changes made to iteself. These changes include additions to the graph, deletions, DataObject property (attribute) changes and even changes to object relationships.

The RDB DAS leverages the SDO ChangeSummary to drive graph chages to a database. Here is a simple example:

   DAS das = DAS.FACTORY.createDAS(getConnection());
   Command select = das.createCommand("Select * from CUSTOMER where ID = 1");
   DataObject root = select.executeQuery();

   DataObject customer = (DataObject) root.get("CUSTOMER[1]");
   customer.set("LASTNAME", "Pavick");
   das.applyChanges(root);

The first half of this example creates a new read command and executes it. The result is a graph of DataObjects (in this case just one) represented by the containing "root".

The second half of the example makes modification to a single object in the graph and then calls the applyChanges() method. As part of the applyChanges processing, the das will scan the SDO ChangeSummary and notice the modified DataObject. It will then generate the UPDATE statement required to reflect the change to the database:

   UPDATE CUSTOMER SET LASTNAME = 'Pavick' WHERE ID = 1

Notice that only a single column is updated rahther than all columns. This is because the SDO ChangeSummary has enough fidelity to track changes on a property-by-property bases and the das has the ability to generate partial updates.

When the das has completed its processing of the ChangeSummary all generated statements are executed against the database. In this trivial example there is only a single statement to execute. However, if there is more than a single statement to execute -- possibly many INSERT/UPDATE and DELETE statements -- then the das will sort the set of statements accordng to its write operation ordering algorithm.

Tuscany/TuscanyJava/DAS_Java_Overview/RDBDAS_Java_User_Guide/Change_History_Processing (last edited 2009-09-20 22:48:00 by localhost)