Revision as of 07:14, 19 October 2007

Contents

Introduction

CDOObjects represent the object instances of the models that your application deals with. Internally each such object is managed by a singleton CDOStateMachine. The state machine accurately transits objects and trees of objects through the states TRANSIENT, NEW, CLEAN, DIRTY, PROXY and CONFLICT. When a CDOObject is in one of the persistent states NEW, CLEAN or DIRTY the state machine associates a CDORevision that carries the current values of the modeled structural features. All revisions created or used in a CDOSession are shared by the CDORevisionMnager of that session. CDOObjects are only known to the CDO client. Only revisions are subject to (network) transfers between client and server.

CDOObject

Interface

A CDOObject is basically an EObject with a handful of additional read-only features as the following java code shows:

The method names differ from the regular Java getter notation to make it less likely that name collisions with your model name space occur. To understand the details about the return types you should browse the JavaDoc.

Categories

While a user application always deals with EObjects the internal CDOStateMachine interacts with InternalCDOObjects. Depending on how the EObjects relate to the InternalCDOObjects there are a handful of different categories of CDOObjects, that is, implementations of InternalCDOObject. The following type hierarchy shows an example with the shipped test model installed:

The main categories are:

Native objects extend CDOObjectImpl and fall into three sub categories:

Meta objects are the EModelElements contained in a session's package registry. Although their state is immutable they interface the state machine via CDOMetaImpl instances so that they can be referenced from ordinary objects.

From a CDO perspective native objects are the most efficient and full featured ones. They are the only category that combine the user application contract and the CDO state machine contract in a single object instance. Whenever possible you should generate your models to produce subclasses of CDOObjectImpl! The following table compares some important characteristics of the different object categories:

Model Type

Native

Legacy

Meta

Dynamic

Generated

Unwoven

Woven

DevelopmentArtifacts

Ecore

Unaffected

N/A

Genmodel

N/A

Slightly modified

Unaffected

Instance Interface

CDOObject

EObject

EModelObject

Statemachine Interface

CDOAdapter

CDOCallback

CDOMeta

Location of Internal Values

class

DynamicCDOObject

Java Byte Code

store

CDOObject

N/A

view

CDOAdapter

CDOCallback

CDOMeta

id

CDOSession

state

N/A

revision

resource

Location ofModel Valuesper CDOState

TRANSIENT

EObject

NEW

CDORevision

EObjectandCDORevision

DIRTY

CLEAN

EModelObject

Client Infra Structure

Sessions

A CDOSession is your connection to a single repository on a CDO server. Before you can do anything with CDO you need to open a session. There are two ways to obtain a session:

If you already have an instance of a Net4j IConnector, which represents the physical connection to the server, at hand you can use the CDOUtil class:

The advantage of the latter approach is that you can leave all the wiring and configuration of the various components to the container which uses factories and element processors that you can contribute centrally via extension points.