blob: e991794ae9dad008505894a77cb865f82443a13d [file] [log] [blame]
<?php require_once "_projectCommon/defs.php"; include "_projectCommon/header.php";
########################################################################
$Nav = NULL;
$pageTitle = "";
$pageKeywords = "";
$pageAuthor = "Eike Stepper";
?>
<div id="midcolumn">
<br/>
<table border="0" cellspacing="20" cellpadding="20">
<tr>
<td width="12px"/>
<td><img src="/cdo/images/Logo-CDO.png" width="160" height="100"></img></td>
<td width="32px"/>
<td>
<div class="blurb">CDO is both a development-time model repository and a run-time persistence framework.
Being highly optimized it supports object graphs of arbitrary size.</div>
<div class="blurb">CDO offers transactions with save points, explicit locking, change notifications,
queries, transparent temporality, time travel, branching, merging, offline clones,
fail-over clusters, automatic memory management, and more...</div>
</td>
<td width="32px"/>
</tr>
<tr><td colspan="5">
<br/>
<table border="0" cellspacing="20" cellpadding="20">
<tr>
<td width="44px"/>
<td><a href="/cdo/downloads/"><img src="https://dev.eclipse.org/huge_icons/actions/go-down.png"></img></a>&nbsp;&nbsp;&nbsp;</td>
<td valign="top"><h3><a href="/cdo/downloads/">Downloads</a></h3><p><i>Looking for the latest build? Milestones, maintenance builds, and more...</i></p></td>
</tr>
<tr><td colspan="3"></td></tr>
<tr>
<td width="44px"/>
<td><a href="/cdo/documentation/"><img src="https://dev.eclipse.org/huge_icons/mimetypes/x-office-book.png"></img></a>&nbsp;&nbsp;&nbsp;</td>
<td valign="top"><h3><a href="/cdo/documentation/">Documentation</a></h3><p><i>Browse through the product documentation, tutorials, presentations and the JavaDocs...</i></p></td>
</tr>
<tr><td colspan="3"></td></tr>
<tr>
<td width="44px"/>
<td><a href="/cdo/community/"><img src="https://dev.eclipse.org/huge_icons/categories/applications-internet.png"></img></a>&nbsp;&nbsp;&nbsp;</td>
<td valign="top"><h3><a href="/cdo/community/">Community</a></h3><p><i>Visit the community pages for information about various product and development topics...</i></p></td>
</tr>
<tr><td colspan="3"></td></tr>
<tr>
<td width="44px"/>
<td><a href="/cdo/support/"><img src="https://dev.eclipse.org/huge_icons/actions/mail-reply-all.png"></img></a>&nbsp;&nbsp;&nbsp;</td>
<td valign="top"><h3><a href="/cdo/support/">Support</a></h3><p><i>You have problems or questions not answered in the documentation? Look here for help...</i></p></td>
</tr>
<tr><td colspan="3"></td></tr>
</table>
</td></tr>
</table>
<h1 class="middle">Overview</h1>
<p>
CDO is a pure Java <i>model repository</i> for your EMF models and meta models. CDO can also serve as a
<i>persistence and distribution framework</i> for your EMF based application systems. For the sake of this overview a
model can be regarded as a graph of application or business objects and a meta model as a set of classifiers that
describe the structure of and the possible relations between these objects.
<p>
CDO supports plentyfold deployments such as embedded repositories, offline clones or replicated clusters. The
following diagram illustrates the most common scenario: <p align="center"><img src="http://download.eclipse.org/modeling/emf/cdo/drops/S20161018-1437/help/org.eclipse.emf.cdo.doc/html/cdo-overview.png">
<h2><a name="Functionality"></a>1&nbsp;&nbsp;Functionality</h2>
<p>
The main functionality of CDO can be summarized as follows:
<dl>
<dt><b>Persistence</b>
<dd>Persistence of your models in all kinds of database backends like major relational databases or NoSQL
databases. CDO keeps your application code free of vendor specific data access code and eases transitions between
the supported backend types.
<p>
<dt><b>Multi User Access</b>
<dd>Multi user access to your models is supported through the notion of repository sessions. The physical transport
of sessions is pluggable and repositories can be configured to require secure authentication of users. Various
authorization policies can be established programmatically.
<p>
<dt><b>Transactional Access</b>
<dd>Transactional access to your models with ACID properties is provided by optimistic and/or pessimistic locking
on a per object granule. Transactions support multiple savepoints that changes can be rolled back to. Pessimistic
locks can be acquired separately for read access, write access and the option to reserve write access in the
future. All kinds of locks can optionally be turned into long lasting locks that survive repository restarts.
Transactional modification of models in multiple repositories is provided through the notion of XA transactions
with a two phase commit protocol.
<p>
<dt><b>Transparent Temporality</b>
<dd>Transparent temporality is available through audit views, a special kind of read only transactions that provide
you with a consistent model object graph exactly in the state it has been at a point in the past. Depending on the
chosen backend type the storage of the audit data can lead to considerable increase of database sizes in time.
Therefore it can be configured per repository.
<p>
<dt><b>Parallel Evolution</b>
<dd>Parallel evolution of the object graph stored in a repository through the concept of branches similar to source
code management systems like Subversion or Git. Comparisons or merges between any two branch points are supported
through sophisticated APIs, as well as the reconstruction of committed change sets or old states of single objects.
<p>
<dt><b>Scalability</b>
<dd>Scalability, the ability to store and access models of arbitrary size, is transparently achieved by loading
single objects on demand and caching them <i>softly</i> in your application. That implies that objects that are no
longer referenced by the application are automatically garbage collected when memory runs low. Lazy loading is
accompanied by various prefetching strategies, including the monitoring of the object graph's <i>usage</i> and the
calculation of fetch rules that are optimal for the current usage patterns. The scalability of EMF applications can
be further increased by leveraging CDO constructs such as remote cross referencing or optimized content adapters.
<p>
<dt><b>Thread Safety</b>
<dd>Thread safety ensures that multiple threads of your application can access and modify the object graph without
worrying about the synchronization details. This is possible and cheap because multiple transactions can be opened
from within a single session and they all share the same object data until one of them modifies the graph. Possible
commit conflicts can be handled in the same way as if they were conflicts between different sessions.
<p>
<dt><b>Collaboration</b>
<dd>Collaboration on models with CDO is a snap because an application can opt in to be notified about remote
changes to the object graph. By default your local object graph transparently changes when it has changed remotely.
With configurable change subscription policies you can fine tune the characteristics of your <i>distributed shared
model</i> so that all users enjoy the impression to collaborate on a single instance of an object graph. The level
of collaboration can be further increased by plugging custom collaboration handlers into the asynchronous CDO
protocol.
<p>
<dt><b>Data Integrity</b>
<dd>Data integrity can be ensured by enabling optional commit checks in the repository server such as referential
integrity checks and containment cycle checks, as well as custom checks implemented by write access handlers.
<p>
<dt><b>Security</b>
<dd>The data in a repository can be secured through pluggable <a href="http://download.eclipse.org/modeling/emf/cdo/drops/S20161018-1437/help/org.eclipse.emf.cdo.doc/html/../../org.eclipse.net4j.util.doc/javadoc/org/eclipse/net4j/util/security/IAuthenticator.html" title="Interface in org.eclipse.net4j.util.security"><code>authenticators</code></a> and
<a href="http://download.eclipse.org/modeling/emf/cdo/drops/S20161018-1437/help/org.eclipse.emf.cdo.doc/html/../javadoc/org/eclipse/emf/cdo/server/IPermissionManager.html" title="Interface in org.eclipse.emf.cdo.server"><code>permission managers</code></a>. A default security model is provided on top of these low-level
components. The model comprises the concepts of users, groups, roles and extensible permissions.
<p>
<dt><b>Fault Tolerance</b>
<dd>Fault tolerance on multiple levels, namely the setup of fail-over clusters of replicating repositories under
the control of a fail-over monitor, as well as the usage of a number of special session types such as fail-over or
reconnecting sessions that allow applications to hold on their copy of the object graph even though the physical
repository connection has broken down or changed to a different fail-over participant.
<p>
<dt><b>Offline Work</b>
<dd>Offline work with your models is supported by two different mechanisms:
<ul>
<li>One way is to create a <b>clone</b> of a complete remote repository, including all history of all branches.
Such a clone is continuously synchronized with its remote master and can either act as an embedded repository to
make a single application tolerant against network outage or it can be set up to serve multiple clients, e.g., to
compensate low latency master connections and speed up read access to the object graph.
<p>
<li>An entirely different and somewhat lighter approach to offline work is to check out a single version of the
object graph from a particular branch point of the repository into a local CDO <b>workspace</b>. Such a workspace
behaves similar to a local repository without branching or history capture, in particular it supports multiple
concurrent transactions on the local checkout. In addition it supports most remote functionality that is known from
source code management systems such as update, merge, compare, revert and check in.
</ul>
</dl>
</div>
<div id="rightcolumn">
<br/>
<div class="sideitem">
<h6>Related Links</h6>
<p><a href="http://www.eclipse.org/projects/project_summary.php?projectid=modeling.emf.cdo">About This Project</a></p>
<p><a href="http://www.ohloh.net/projects/8908?p=CDO">View Ohloh statistics</a></p>
<p><a href="http://wiki.eclipse.org/Development_Resources">Becoming a Committer</a></p>
</div>
<div class="sideitem">
<h6><a href="<?=$PR?>/news-whatsnew.php"><img alt="RSS Feed" src="http://www.eclipse.org/images/rss2.gif"/></a>&nbsp;&nbsp;
<a href="/<?=$PR?>/news-whatsnew.php">What's New</a></h6>
<?php
$xml = file_get_contents("$projectRoot/feeds/news.xml");
getNews(3, "whatsnew", $xml);
?>
</div>
<div class="sideitem">
<h6><a href="<?=$PR?>/news-whatsnew.php"><img alt="RSS Feed" src="http://www.eclipse.org/images/rss2.gif"/></a>&nbsp;&nbsp;
<a href="/<?=$PR?>/news-whatsnew.php">Upcoming Events</a></h6>
<?php
getNews(3, "bleedingedge", $xml);
?>
</div>
<div class="sideitem">
<h6><a href="<?=$PR?>/news-whatsnew.php"><img alt="RSS Feed" src="http://www.eclipse.org/images/rss2.gif"/></a>&nbsp;&nbsp;
<a href="/<?=$PR?>/news-whatsnew.php">Docs</a></h6>
<?php
getNews(3, "docs", $xml);
?>
</div>
</div>
<?php
########################################################################
include "_projectCommon/footer.php"; ?>