diff options
author | coreyg <coreyg@13f79535-47bb-0310-9956-ffa450edef68> | 2014-11-21 09:30:19 +0000 |
---|---|---|
committer | coreyg <coreyg@13f79535-47bb-0310-9956-ffa450edef68> | 2014-11-21 09:30:19 +0000 |
commit | 200a40b332420f94992eb39a6d0ea1cf1490ffc4 (patch) | |
tree | 1c76ef1d254c7bfc91128a313d319bd60da9d01e /site/trunk/site-publish/rdb-das-c-optimisticconcurrencycontrol.html | |
parent | 85f53ab6ab4f664d63774c94b672a875c9e52b8a (diff) |
Adding tuscany's website to their svn repo for svnpubsub
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1640879 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'site/trunk/site-publish/rdb-das-c-optimisticconcurrencycontrol.html')
-rw-r--r-- | site/trunk/site-publish/rdb-das-c-optimisticconcurrencycontrol.html | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/site/trunk/site-publish/rdb-das-c-optimisticconcurrencycontrol.html b/site/trunk/site-publish/rdb-das-c-optimisticconcurrencycontrol.html new file mode 100644 index 0000000000..8d926c8beb --- /dev/null +++ b/site/trunk/site-publish/rdb-das-c-optimisticconcurrencycontrol.html @@ -0,0 +1,96 @@ + +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML> + <HEAD> + <LINK type="text/css" rel="stylesheet" href="http://incubator.apache.org/tuscany/stylesheets/default.css"> + <LINK rel="SHORTCUT ICON" href="http://cwiki.apache.org/confluence/pages/$images/favicon.ico"> + <TITLE>RDB DAS C++ - OptimisticConcurrencyControl : Apache Tuscany</TITLE> + <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD> + + <BODY onload="init()"> + + <TABLE valign="top" border="0" cellspacing="0" cellpadding="0" width="100%" background="http://incubator.apache.org/tuscany/images/TuscanyLogoNEW_Text_120px_bg.jpg"> + <TR> + <TD valing="top" align="left"> + <A href="http://cwiki.apache.org/confluence/pages/$siteroot"><IMG src="http://incubator.apache.org/tuscany/images/TuscanyLogoNEW_Text_120px_bg.jpg" height="91" width="25" border="0"></A> + </TD> + <TD> + <A href="http://incubator.apache.org/tuscany/"><IMG src="http://incubator.apache.org/tuscany/images/TuscanyLogo.jpg" border="0"></A> + </TD> + + <TD width="100%"> + + </TD> + <TD align="right"> + <IMG src="http://incubator.apache.org/tuscany/images/apache-incubator-logo.png" border="0"> + </TD> + + <!-- Adds the edit page link to the top banner--> + <TD valign="bottom"> + <DIV style="padding: 2px 10px; margin: 0px;"> + <A href="http://cwiki.apache.org/confluence/pages/editpage.action?pageId=69452"> + <IMG src="http://incubator.apache.org/tuscany/images/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A> + </DIV> + </TD> + + </TR> + </TABLE> + + <TABLE border="0" cellpadding="2" cellspacing="0" width="100%"> + <TR class="topBar"> + <TD align="left" valign="middle" class="topBarDiv" nowrap="true" width="100%"> + <A href="home.html" title="Apache Tuscany">Apache Tuscany</A> > <A href="home.html" title="Home">Home</A> > <A href="das-overview.html" title="DAS Overview">DAS Overview</A> > <A href="das-c.html" title="DAS C++">DAS C++</A> > <A href="das-c-documentation-menu.html" title="DAS C++ Documentation Menu">DAS C++ Documentation Menu</A> > <A href="rdb-das-c-user-guide.html" title="RDB DAS C++ - User Guide">RDB DAS C++ - User Guide</A> > <A href="" title="RDB DAS C++ - OptimisticConcurrencyControl">RDB DAS C++ - OptimisticConcurrencyControl</A> + </TD> + + <TD align="left" valign="middle" class="topBarDiv" nowrap="true"> + <A href="http://mail-archives.apache.org/mod_mbox/ws-tuscany-user">User List</A> | <A href="http://mail-archives.apache.org/mod_mbox/ws-tuscany-dev">Dev List</A> | <A href="http://issues.apache.org/jira/browse/Tuscany">Issue Tracker</A> + </TD> + </TR> + </TABLE> + + <TABLE border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF"> + <TR> + <TD align="left" valign="top"> + <DIV id="PageContent"> + + <DIV class="pagecontent"> + <DIV class="wiki-content"> + <H1><A name="RDBDASC%2B%2B-OptimisticConcurrencyControl-OptimisticConcurrencyControl"></A>OptimisticConcurrencyControl</H1> + +<P>The RDB DAS is intended for use in disconnected scenarios. When the DAS returns a graph of SDO DataObjects as the result of a query, there are no locks held on the underlying database and the data is no longer associated with any database connection or transaction. However, although locks are not held, the DAS does employ a mechanism called <SPAN class="nobr"><A href="http://en.wikipedia.org/wiki/Optimistic_locking" title="Visit page outside Confluence" rel="nofollow">Optimistic Concurrency Control<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN> (OCC) to manage concurrency.</P> + +<P>Basically, when OCC is being utilized, the DAS checks whether the state of the database has changed since the original data was read before applying any writes to the same location. For example, suppose that a DAS client reads a set of Customers, modifies one Customer and then attempts to write the change back to the database:</P> +<DIV class="panel"><DIV class="panelContent"> +<P> CommandPtr select = das->createCommand("Select * from CUSTOMER where LASTNAME = 'Williams'");<BR> + DataObjectPtr root = select->executeQuery();</P> + +<P> DataObjectPtr customer = root->getDataObject("CUSTOMER[1]");<BR> + customer->setCString("LASTNAME", "Pavick");</P> + +<P> //Some period of time passes in which "CUSTOMER[1]" could be modified by another process or application</P> + +<P> das->applyChanges(root);</P> +</DIV></DIV> +<P>If OCC is enabled then as part of "applyChanges" processing the DAS will ensure that the table row representing "CUSTOMER[1]" has not been changed since it was read. This is possible because a feature of the original SDO graph is to "remember" its original state along with any changes that have been made. The DAS has access to this original state and uses it to create an "overqualified" update statement. When the DAS executes this update statement against the database, it will fail if the underlying data has been modified (a collision has occurred) and, if so, an exception will be thrown and the transaction rolled back. If there is no collision then the update statement execution succeeds and the change is applied. </P> + </DIV> + </DIV> + </DIV> + </TD> + </TR> + </TABLE> + + <SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript"> + </SCRIPT> + <SCRIPT type="text/javascript"> + _uacct = "UA-1174707-5"; + urchinTracker(); + </SCRIPT> + + <A href="http://www.statcounter.com/" target="_blank"><IMG src="http://c26.statcounter.com/counter.php?sc_project=2619156&java=0&security=94bd7e7d&invisible=0" alt="website stats" border="0"></A> + + <DIV class="footer"> + Copyright © 2003-2007, The Apache Software Foundation + </DIV> + + </BODY> +</HTML>
\ No newline at end of file |