| <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <html> |
| |
| <head> |
| <title>Understanding the Technical Background (CDO Model Repository Documentation)</title> |
| |
| <link rel="stylesheet" href="../book.css" charset="UTF-8" type="text/css"> |
| |
| <noscript></noscript> |
| <script type="text/javascript"> |
| function windowTitle() |
| { |
| if (location.href.indexOf('is-external=true') == -1) { |
| parent.document.title="Understanding the Technical Background (CDO Model Repository Documentation)"; |
| } |
| } |
| </script> |
| </head> |
| |
| <body bgcolor="white" onload="windowTitle();"> |
| <!-- <div class="help_breadcrumbs breadcrumbs_top"><a href="../Overview.html" title="CDO Model Repository Documentation">CDO Model Repository Documentation</a> > <a href="index.html" title="Category in CDO Model Repository Documentation">User's Guide</a></div> --> |
| |
| <table border="0"> |
| <tr> |
| <td width="100%"><h1>Understanding the Technical Background</h1></td> |
| <td align="right" valign="middle" nowrap><a href="Doc08_Collaborating.html" title="Backward to Collaborating in Real-Time"><img src="../../images/backward.png" border="0"></a> <a href="../operators/index.html" title="Forward to Operator's Guide"><img src="../../images/forward.png" border="0"></a></td> |
| </tr> |
| </table> |
| <p class="author">Author: Eike Stepper</p> |
| <p> |
| This article explains the relationship between the main concepts that are exposed in the |
| <a href="Doc01_UserInterface.html" title="Article in CDO Model Repository Documentation">CDO User Interface</a> and their underlying technical core concepts. |
| <p align="center"><img src="tech-overview.png"> |
| |
| <p> |
| <b>Table of Contents</b> <p> |
| <table border="0"> |
| <tr><td>1 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundModelElements" title="Chapter in CDO Model Repository Documentation">Technical Background of Model Elements</a></td></tr> |
| <tr><td></td><td>1.1 </td><td class="te" colspan="3"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundNativeModels" title="Chapter in CDO Model Repository Documentation">Native Models</a></td></tr> |
| <tr><td></td><td>1.2 </td><td class="te" colspan="3"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundLegacyModels" title="Chapter in CDO Model Repository Documentation">Legacy Models</a></td></tr> |
| <tr><td></td><td>1.3 </td><td class="te" colspan="3"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundDynamicModels" title="Chapter in CDO Model Repository Documentation">Dynamic Models</a></td></tr> |
| <tr><td>2 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundRepositories" title="Chapter in CDO Model Repository Documentation">Technical Background of Repositories</a></td></tr> |
| <tr><td>3 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundCheckouts" title="Chapter in CDO Model Repository Documentation">Technical Background of Checkouts</a></td></tr> |
| <tr><td>4 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundSessions" title="Chapter in CDO Model Repository Documentation">Technical Background of Sessions</a></td></tr> |
| <tr><td>5 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundViews" title="Chapter in CDO Model Repository Documentation">Technical Background of Views</a></td></tr> |
| <tr><td>6 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundTransactions" title="Chapter in CDO Model Repository Documentation">Technical Background of Transactions</a></td></tr> |
| <tr><td>7 </td><td class="te" colspan="4"><a href="Doc09_TechnicalBackground.html#Doc_BackgroundCompare" title="Chapter in CDO Model Repository Documentation">Technical Background of the Compare Integration</a></td></tr> |
| </table> |
| </p> |
| |
| |
| <h2><a name="Doc_BackgroundModelElements"></a>1 Technical Background of Model Elements</h2> |
| <p> |
| Model elements are <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EObject.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EObjects</code></a>. |
| <p> |
| EObjects are instances of concrete <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EClass.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EClasses</code></a>, sometimes referred to as model element types. |
| <p> |
| EClasses are contained by <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EPackage.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EPackages</code></a>, often referred to as meta models and sometimes less specifically as just models. |
| <p> |
| EPackages are registered in the <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EPackage.Registry.html" target="_blank" title="Interface in org.eclipse.emf.ecore.EPackage"><code>EPackage.Registry</code></a>.<p><b>See Also:</b></p> |
| <ul> |
| <li><a href="http://help.eclipse.org/mars/nav/21" title="Article in CDO Model Repository Documentation">EMF Developer Guide</a></li> |
| </ul> |
| |
| |
| <h3><a name="Doc_BackgroundNativeModels"></a>1.1 Native Models</h3> |
| <p> |
| The term "native model" refers to an <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EPackage.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EPackage</code></a> that is <a href="../programmers/client/Doc02_PreparingModels.html#Doc_GeneratingModel" title="Chapter in CDO Model Repository Documentation">generated</a> |
| with some CDO-specific <a href="../programmers/client/Doc02_PreparingModels.html#Doc_MigratingManually" title="Chapter in CDO Model Repository Documentation">options</a> to fully exploit CDO's unprecedented |
| characteristics with respect to scalability and performance. |
| <p> |
| Native model elements are lazily loaded when they are needed and automatically garbage-collected when they are no longer needed. |
| Repositories with native model elements can scale to arbitrary sizes. Clients may not be able to load all objects |
| of these large repositories at the same time, but they are able, for example, to iterate all objects of a large repository |
| without worrying about memory management. |
| <p> |
| Technically native model elements are instances of the Java class <a href="../../javadoc/org/eclipse/emf/internal/cdo/CDOObjectImpl.html" title="Class in org.eclipse.emf.internal.cdo"><code>CDOObjectImpl</code></a>.<p><b>See Also:</b></p> |
| <ul> |
| <li><a href="http://thegordian.blogspot.de/2008/11/how-scalable-are-my-models.html" title="Article in CDO Model Repository Documentation">CDO Scalability</a></li> |
| <li><a href="../programmers/client/Doc02_PreparingModels.html" title="Article in CDO Model Repository Documentation">Preparing EMF Models for CDO</a></li> |
| </ul> |
| |
| |
| <h3><a name="Doc_BackgroundLegacyModels"></a>1.2 Legacy Models</h3> |
| <p> |
| Generating or regenerating an <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EPackage.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EPackage</code></a> with the CDO-specific <a href="../programmers/client/Doc02_PreparingModels.html#Doc_MigratingManually" title="Chapter in CDO Model Repository Documentation">options</a> |
| (as explained in <a href="Doc09_TechnicalBackground.html#Doc_BackgroundNativeModels" title="Chapter in CDO Model Repository Documentation">Native Models</a>) is not always possible, for example if an EPackage has already |
| been generated by a third party. In these cases the original generated EPackage can still be used with CDO; |
| and is then referred to as a "legacy model". |
| <p> |
| The integration of legacy models with CDO is based on CDOLegacyAdapters. |
| <p> |
| Legacy model elements are not loaded lazily and not automatically garbage-collected. |
| |
| <h3><a name="Doc_BackgroundDynamicModels"></a>1.3 Dynamic Models</h3> |
| <p> |
| It is not strictly necessary for an <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EPackage.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EPackage</code></a> to be generated into Java code to be used with CDO. |
| An EPackage can also be loaded dynamically at runtime (see <a href="../programmers/client/Doc02_PreparingModels.html#Doc_CreatingEcore" title="Chapter in CDO Model Repository Documentation">Creating an Ecore Model</a> for an example of the |
| XML representation of an EPackage). |
| <p> |
| Technically dynamic model elements are instances of the Java class DynamicCDOObjectImpl. |
| <p> |
| Dynamic model elements share the characteristics of <a href="Doc09_TechnicalBackground.html#Doc_BackgroundNativeModels" title="Chapter in CDO Model Repository Documentation">native</a> model elements |
| with respect to enhanced scalability and performance, |
| |
| <h2><a name="Doc_BackgroundRepositories"></a>2 Technical Background of Repositories</h2> |
| <p> |
| The term "repository" is a slightly ambiguous in CDO, as it may refer to both a server-side / core-level <a href="../../javadoc/org/eclipse/emf/cdo/server/IRepository.html" title="Interface in org.eclipse.emf.cdo.server"><code>IRepository</code></a> |
| and a client-side / UI-level <a href="../../javadoc/org/eclipse/emf/cdo/explorer/repositories/CDORepository.html" title="Interface in org.eclipse.emf.cdo.explorer.repositories"><code>CDORepository</code></a>. |
| <p> |
| An IRepository is a "real" repository backed by a physical database (of one of various <a href="../../javadoc/org/eclipse/emf/cdo/server/IStore.html" title="Interface in org.eclipse.emf.cdo.server"><code>forms)</code></a>. In production |
| such repositories typically exist in a CDO server |
| that provides remote access through one or more <a href="../../../org.eclipse.net4j.doc/javadoc/org/eclipse/net4j/tcp/ITCPConnector.html" title="Interface in org.eclipse.net4j.tcp"><code>ITCPConnectors</code></a>. |
| The <a href="../operators/index.html" title="Category in CDO Model Repository Documentation">Operator's Guide</a> explains how to configure and operate a CDO server. |
| <p> |
| A CDORepository is more of a <a href="Doc02_ManagingRepositories.html#Doc_CreatingRepositories" title="Chapter in CDO Model Repository Documentation">configured connection</a> to a "real" IRepository, which |
| is remembered across Eclipse sessions. In the case of a <a href="Doc02_ManagingRepositories.html#Doc_LocalRepositories" title="Chapter in CDO Model Repository Documentation">local repository</a> (connection) |
| an internal IRepository is created with an <a href="../../../org.eclipse.net4j.db.doc/javadoc/org/eclipse/net4j/db/h2/H2Adapter.html" title="Class in org.eclipse.net4j.db.h2"><code>H2</code></a> database <a href="Doc02_ManagingRepositories.html#Doc_RepositoryShowInSystemExplorer" title="Chapter in CDO Model Repository Documentation">stored on the local disk</a>. |
| <p> |
| Internally a <a href="../../javadoc/org/eclipse/emf/cdo/explorer/repositories/CDORepository.html#isConnected()" title="Method in org.eclipse.emf.cdo.explorer.repositories.CDORepository"><code>connected</code></a> CDORepository maintains a single <a href="../../javadoc/org/eclipse/emf/cdo/session/CDOSession.html" title="Interface in org.eclipse.emf.cdo.session"><code>CDOSession</code></a> to the underlying IRepository. |
| This session is shared by all <a href="../../javadoc/org/eclipse/emf/cdo/view/CDOView.html" title="Interface in org.eclipse.emf.cdo.view"><code>views</code></a> and <a href="../../javadoc/org/eclipse/emf/cdo/transaction/CDOTransaction.html" title="Interface in org.eclipse.emf.cdo.transaction"><code>transactions</code></a> of all <a href="../../javadoc/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.html" title="Interface in org.eclipse.emf.cdo.explorer.checkouts"><code>checkouts</code></a> |
| from that CDORepository.<p><b>See Also:</b></p> |
| <ul> |
| <li><a href="Doc02_ManagingRepositories.html" title="Article in CDO Model Repository Documentation">Managing Repositories</a></li> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundSessions" title="Chapter in CDO Model Repository Documentation">Technical Background of Sessions</a></li> |
| </ul> |
| |
| |
| <h2><a name="Doc_BackgroundCheckouts"></a>3 Technical Background of Checkouts</h2> |
| <p> |
| A <a href="../../javadoc/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.html" title="Interface in org.eclipse.emf.cdo.explorer.checkouts"><code>CDOCheckout</code></a> is not necessarily a physical copy of a repository on the local disk (only <a href="Doc04_CheckingOut.html#Doc_OfflineCheckouts" title="Chapter in CDO Model Repository Documentation">offline checkouts</a> |
| maintain a locally replicated repository copy). More generally they represent the following two aspects: |
| <ul> |
| <li> A reference to a configured <a href="../../javadoc/org/eclipse/emf/cdo/explorer/repositories/CDORepository.html" title="Interface in org.eclipse.emf.cdo.explorer.repositories"><code>CDORepository</code></a> as a way to use the internal <a href="../../javadoc/org/eclipse/emf/cdo/session/CDOSession.html" title="Interface in org.eclipse.emf.cdo.session"><code>CDOSession</code></a> of that CDORepository. |
| <li> The <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html" title="Interface in org.eclipse.emf.cdo.common.branch"><code>CDOBranchPoint</code></a> information, i.e., <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html#getBranch()" title="Method in org.eclipse.emf.cdo.common.branch.CDOBranchPoint"><code>branch</code></a> and <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html#getTimeStamp()" title="Method in org.eclipse.emf.cdo.common.branch.CDOBranchPoint"><code>time stamp</code></a>, |
| that is needed to open <a href="../../javadoc/org/eclipse/emf/cdo/view/CDOView.html" title="Interface in org.eclipse.emf.cdo.view"><code>CDOViews</code></a> and <a href="../../javadoc/org/eclipse/emf/cdo/transaction/CDOTransaction.html" title="Interface in org.eclipse.emf.cdo.transaction"><code>CDOTransactions</code></a> on the shared CDOSession of |
| the referenced CDORepository |
| </ul> |
| <p> |
| A CDOCheckout internally maintains a main CDOView that is, for example, used to provide the resources and model elements that |
| are displayed in the <a href="Doc01_UserInterface.html#Doc_ProjectExplorerIntegration" title="Chapter in CDO Model Repository Documentation">Project Explorer</a>. As objects that are provided by CDOViews are read-only |
| any modification action on these objects, for example as offered in the various context menus or triggered by drag and drop events, |
| operates on <a href="../../javadoc/org/eclipse/emf/cdo/view/CDOView.html#getObject(T)" title="Method in org.eclipse.emf.cdo.view.CDOView"><code>transactional copies</code></a> of the objects in the context of a background thread. |
| <p> |
| Each <a href="Doc07_UsingModels.html#Doc_EditingModelElementsEditor" title="Chapter in CDO Model Repository Documentation">model editor</a> opened on a resource or model element of a CDOCheckout typically |
| (but depending on the implementation of that editor) maintains its own CDOTransaction to isolate changes and locks from other |
| views and transactions. Typically the save action of a model editor delegates directly to the <a href="../../javadoc/org/eclipse/emf/cdo/transaction/CDOUserTransaction.html#commit(org.eclipse.core.runtime.IProgressMonitor)" title="Method in org.eclipse.emf.cdo.transaction.CDOUserTransaction"><code>commit</code></a> |
| method of its associated CDOTransaction. |
| |
| <h2><a name="Doc_BackgroundSessions"></a>4 Technical Background of Sessions</h2> |
| <p> |
| A <a href="../../javadoc/org/eclipse/emf/cdo/session/CDOSession.html" title="Interface in org.eclipse.emf.cdo.session"><code>CDOSession</code></a> is the technical representation of a <a href="../../javadoc/org/eclipse/emf/cdo/common/protocol/CDOProtocol.html" title="Interface in org.eclipse.emf.cdo.common.protocol"><code>CDOProtocol</code></a> connection to an <a href="../../javadoc/org/eclipse/emf/cdo/server/IRepository.html" title="Interface in org.eclipse.emf.cdo.server"><code>IRepository</code></a>. |
| On the transport level this connection is provided by an <a href="../../../org.eclipse.net4j.doc/javadoc/org/eclipse/net4j/connector/IConnector.html" title="Interface in org.eclipse.net4j.connector"><code>IConnector</code></a> / <a href="../../../org.eclipse.net4j.doc/javadoc/org/eclipse/net4j/acceptor/IAcceptor.html" title="Interface in org.eclipse.net4j.acceptor"><code>IAcceptor</code></a> pair. |
| <p align="center"><img src="tech-sessions.png"> |
| <p><b>See Also:</b></p> |
| <ul> |
| <li><a href="Doc01_UserInterface.html#Doc_SessionsView" title="Chapter in CDO Model Repository Documentation">CDO Sessions View</a></li> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundViews" title="Chapter in CDO Model Repository Documentation">Technical Background of Views</a></li> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundTransactions" title="Chapter in CDO Model Repository Documentation">Technical Background of Transactions</a></li> |
| </ul> |
| |
| |
| <h2><a name="Doc_BackgroundViews"></a>5 Technical Background of Views</h2> |
| <p> |
| A <a href="../../javadoc/org/eclipse/emf/cdo/view/CDOView.html" title="Interface in org.eclipse.emf.cdo.view"><code>CDOView</code></a> is a technical facility that provides a client application with all the models and model elements in a repository |
| for a specific <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html#getTimeStamp()" title="Method in org.eclipse.emf.cdo.common.branch.CDOBranchPoint"><code>point in time</code></a> and in a specific <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html#getBranch()" title="Method in org.eclipse.emf.cdo.common.branch.CDOBranchPoint"><code>branch</code></a>. |
| The model elements provided by a CDOView are <a href="../../javadoc/org/eclipse/emf/cdo/util/ReadOnlyException.html" title="Exception in org.eclipse.emf.cdo.util"><code>read-only</code></a>. |
| <p align="center"><img src="tech-views.png"> |
| <p><b>See Also:</b></p> |
| <ul> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundSessions" title="Chapter in CDO Model Repository Documentation">Technical Background of Sessions</a></li> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundCheckouts" title="Chapter in CDO Model Repository Documentation">Technical Background of Checkouts</a></li> |
| </ul> |
| |
| |
| <h2><a name="Doc_BackgroundTransactions"></a>6 Technical Background of Transactions</h2> |
| <p> |
| A <a href="../../javadoc/org/eclipse/emf/cdo/transaction/CDOTransaction.html" title="Interface in org.eclipse.emf.cdo.transaction"><code>CDOTransaction</code></a> is a technical facility that provides a client application with all the latest models |
| and model elements in a repository in a specific <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html#getBranch()" title="Method in org.eclipse.emf.cdo.common.branch.CDOBranchPoint"><code>branch</code></a>. |
| The model elements provided by a CDOTransaction are writable. |
| Changes to these model elements must be <a href="../../javadoc/org/eclipse/emf/cdo/transaction/CDOUserTransaction.html#commit(org.eclipse.core.runtime.IProgressMonitor)" title="Method in org.eclipse.emf.cdo.transaction.CDOUserTransaction"><code>committed</code></a> to make them |
| persistent in the repository and to distribute them to the views and transactions of other users. |
| <p align="center"><img src="tech-transactions.png"> |
| <p><b>See Also:</b></p> |
| <ul> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundSessions" title="Chapter in CDO Model Repository Documentation">Technical Background of Sessions</a></li> |
| <li><a href="Doc09_TechnicalBackground.html#Doc_BackgroundCheckouts" title="Chapter in CDO Model Repository Documentation">Technical Background of Checkouts</a></li> |
| </ul> |
| |
| |
| <h2><a name="Doc_BackgroundCompare"></a>7 Technical Background of the Compare Integration</h2> |
| <p> |
| With CDO both EMF Compare editors and EMF Merge editors are instrumented to utilize an optimized CDO mechanism in order to compute |
| matches in a very efficient and scalable way. This mechanism consists of special <a href="../../javadoc/org/eclipse/emf/spi/cdo/CDOSessionProtocol.html#loadMergeData(org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo, org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo, org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo, org.eclipse.emf.cdo.spi.common.commit.CDORevisionAvailabilityInfo)" title="Method in org.eclipse.emf.spi.cdo.CDOSessionProtocol"><code>client-server protocol</code></a> |
| and remote database queries to determine and deliver the <a href="../../javadoc/org/eclipse/emf/cdo/common/id/CDOID.html" title="Interface in org.eclipse.emf.cdo.common.id"><code>object IDs</code></a> that are involved in all changes |
| between two different <a href="../../javadoc/org/eclipse/emf/cdo/common/branch/CDOBranchPoint.html" title="Interface in org.eclipse.emf.cdo.common.branch"><code>CDOBranchPoints</code></a>. The response times depend on the implementation of the <a href="../../javadoc/org/eclipse/emf/cdo/server/IStore.html" title="Interface in org.eclipse.emf.cdo.server"><code>backend storage</code></a>. |
| The response time of the default implementation, the DBStore, scales more |
| with the sizes of the stored meta models (i.e., the number of concrete <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EClass.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EClasses</code></a>) than with the sizes of the stored models |
| (i.e., the number of <a href="http://download.eclipse.org/modeling/emf/emf/javadoc/2.11/org/eclipse/emf/ecore/EObject.html" target="_blank" title="Interface in org.eclipse.emf.ecore"><code>EObjects</code></a>). |
| |
| <p align="right"> |
| <a href="Doc08_Collaborating.html" title="Backward to Collaborating in Real-Time"><img src="../../images/backward.png" border="0"></a> <a href="../operators/index.html" title="Forward to Operator's Guide"><img src="../../images/forward.png" border="0"></a></p> |
| <!-- <div class="help_breadcrumbs breadcrumbs_bottom"><a href="../Overview.html" title="CDO Model Repository Documentation">CDO Model Repository Documentation</a> > <a href="index.html" title="Category in CDO Model Repository Documentation">User's Guide</a></div> --> |
| |
| <div class="copyright">Copyright (c) 2014 Eike Stepper (Berlin, Germany) and others.<br>All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html</div> |
| </body> |
| </html> |