| <?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> </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> </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> </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> </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 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> |
| <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> |
| <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> |
| <a href="/<?=$PR?>/news-whatsnew.php">Docs</a></h6> |
| <?php |
| getNews(3, "docs", $xml); |
| ?> |
| </div> |
| </div> |
| |
| <?php |
| ######################################################################## |
| include "_projectCommon/footer.php"; ?> |