SourceForge.net Logo

How to make the changes persistent?

To make object and attribute modifications persistent,

  • newly created instances must be added to a containment relationship

  • all the changes have to be put in a UnitOfWork. For more details on UnitOfWorks please refer to the openMDX base and kernel tutorial.

Below is a complete example putting together all previously explained topics.

Example 6-10. Create a Person instance, set some attributes and make it permanent in a UnitOfWork

// In our lab model Person instances are referenced by containment 
// by reference "person" originating from a given segment instance. 
// Therefore the given segment instance has to be retrieved.
Path segmentPath = new Path(PROVIDER_URI).add("segment").add(SEGMENT_QUALIFIER);
Segment segment = (Segment)rootPkg.refObject(segmentPath.toUri());

// retrieve class proxy for class Person from package
RefClass personClass = lab1Pkg.refClass(
  "org:openmdx:example:lab1:Person"
);

// begin unit of work
lab1Pkg.refBegin();

// use class proxy to create a new Person instance
RefObject person = personClass.refCreateInstance(null);

// set some attribute values
person.refSetValue(
  "org:openmdx:example:lab1:Person:givenName",
  "Hans"
);
person.refSetValue(
  "org:openmdx:example:lab1:Person:lastName", 
  "Muster"
);
person.refSetValue(
  "org:openmdx:example:lab1:Person:middleName", 
  "Fritz"
);

// adding person instance to segment (not JMI compliant!)
segment.refAddValue(
  "org:openmdx:example:lab1:Segment:person",
  qualifier,
  person
);

// commit unit of work
lab1Pkg.refCommit();