Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

EclipseLink/FAQ/SDO

What is SDO?

SDO is designed to be a unified view of data, much like the POJO is in Java EE. There are several programming languages (of which Java is one) that support the SDO specification.

SDO as a Dynamic Object Model

SDO metadata is represented as Type and Property objects. A Type is comparable to a Java class, and a property to a Java field. This metadata is defined at runtime either programmatically or from an XML schema.

Type customerType = TypeHelper.INSTANCE.getType(“urn:example”,  “customer”);
Property firstNameProperty = customerType.getProperty(“first-name”);
 
Type addressType = TypeHelper.INSTANCE.getType(“urn:example”, “address”);

Data is represented as instances of Types called DataObjects, these correspond to objects in Java. DataObjects have many generic accessors that can be used to manipulate the data.

DataObject customerDO = DataFactory.INSTANCE.create(customerType);
customerDO.setString(firstNameProperty, “Jane”);
 
DataObject addressDO = DataFactory.INSTANCE.create(“urn:example”, address);
addressDO.set(“street”, “123 Any Street”);

SDO as a Typed Object Model

SDO as dynamic object models is useful in certain frameworks (dynamic models allow metadata to be added without requiring a redeployment of the application), but in other situations a strongly typed model is required (typed models allow for code completion in an IDE). A code generation step can be performed to produce typed interfaces complete with bean style accessors.

Customer customerDO = (Customer) DataFactory.INSTANCE.create(customerType);
CustomerDO.setFirstName(“Jane”);

SDO as an XML Representation

SDO has built in support for handling XML. The SDO metadata can be introspected to determine what the corresponding XML representation is.

XSDHelper.INSTANCE.isMixed(customerType);
XSDHelper.INSTANCE.isElement(firstNameProperty);

The DataObjects themselves can then be converted to from/XML

XMLHelper.INSTANCE.save(customerDO, “urn:example”, “customer”, System.out);

SDO as a Disconnected Object

SDO was designed to represent disconnected data in a SCA (Service Component Architecture) environment. The main mechanism for accomplishing this goal is the ChangeSummary which tracks changes made to data objects over time (for DataObjects that have a ChangeSummary property).

List changed = customerDO.getChangeSummary().getChangedDataObjects();

Summary

EclipseLink is focussed on separating data from its messaging or persisted representations. Now with SDO support this data can be a POJO or a DataObject. This allows you to work with data in both Java EE and SCA environments.

How do I use SDO?

The following examples demonstrate how to use EclipseLink SDO:

How do I use SDO to Interact with a Relational Database?

EclipseLink provides an integration point between SDO and JPA. For more informations see:

Back to the top