summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/rdb-das-c-workingwithoptimisticconcurrencycontrol.html
diff options
context:
space:
mode:
Diffstat (limited to 'site/trunk/site-publish/rdb-das-c-workingwithoptimisticconcurrencycontrol.html')
-rw-r--r--site/trunk/site-publish/rdb-das-c-workingwithoptimisticconcurrencycontrol.html103
1 files changed, 103 insertions, 0 deletions
diff --git a/site/trunk/site-publish/rdb-das-c-workingwithoptimisticconcurrencycontrol.html b/site/trunk/site-publish/rdb-das-c-workingwithoptimisticconcurrencycontrol.html
new file mode 100644
index 0000000000..96e836ce5a
--- /dev/null
+++ b/site/trunk/site-publish/rdb-das-c-workingwithoptimisticconcurrencycontrol.html
@@ -0,0 +1,103 @@
+
+<!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++ WorkingWithOptimisticConcurrencyControl : 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%">
+ &nbsp;
+ </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=69484">
+ <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%">
+ &nbsp;<A href="home.html" title="Apache Tuscany">Apache Tuscany</A>&nbsp;&gt;&nbsp;<A href="home.html" title="Home">Home</A>&nbsp;&gt;&nbsp;<A href="das-overview.html" title="DAS Overview">DAS Overview</A>&nbsp;&gt;&nbsp;<A href="das-c.html" title="DAS C++">DAS C++</A>&nbsp;&gt;&nbsp;<A href="das-c-documentation-menu.html" title="DAS C++ Documentation Menu">DAS C++ Documentation Menu</A>&nbsp;&gt;&nbsp;<A href="rdb-das-c-user-guide.html" title="RDB DAS C++ - User Guide">RDB DAS C++ - User Guide</A>&nbsp;&gt;&nbsp;<A href="" title="RDB DAS C++ WorkingWithOptimisticConcurrencyControl">RDB DAS C++ WorkingWithOptimisticConcurrencyControl</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>&nbsp;&nbsp;
+ </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%2BWorkingWithOptimisticConcurrencyControl-WorkingWithOptimisticConcurrencyControl"></A>WorkingWithOptimisticConcurrencyControl</H1>
+
+<P>The RDB DAS provides a straightforward mechanism for support of <SPAN class="error">&#91;OptimisticConcurrencyControl\|RDB DAS C+\+ - OptimisticConcurrencyControl|RDB DAS C++ - OptimisticConcurrencyControl&#93;</SPAN>. To enable OCC a client must designate an integer version column in the configuration (usually via a config xml file). The following example is an example of a cofig file that identifies a version column:&lt;Config xsi:noNamespaceSchemaLocation=&quot;http:///org.apache.tuscany.das.rdb/config.xsd&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;</P>
+
+<P> &lt;Command name=&quot;select book 1&quot; SQL=&quot;select * from BOOK where BOOK_ID = 1&quot; kind=&quot;Select&quot;/&gt;</P>
+
+<P> &lt;Table tableName=&quot;BOOK&quot;&gt;<BR>
+ &lt;Column columnName=&quot;BOOK_ID&quot; primaryKey=&quot;true&quot;/&gt;<BR>
+ &lt;Column columnName=&quot;OCC&quot; collision=&quot;true&quot; managed=&quot;true&quot;/&gt;<BR>
+ &lt;/Table&gt;</P>
+
+<P> &lt;/Config&gt;</P>
+
+<P>This line in the config file &#95;&lt;Column columnName=&quot;OCC&quot; collision=&quot;true&quot; managed=&quot;true&quot;/&gt;_designates the column named &quot;OCC&quot; as the version column and also sets &quot;managed&quot; to true. The &quot;managed&quot; attribute has to do with how the version column is changed. In order for OCC to work, some agent must change the value of the version column each time the row is modified. A new value in the version column is what tells the DAS that the row has been modified. If a version column is &quot;managed&quot; then the DAS is responsible for incrementing the value of the column each time some column in the row is changed. The other option is &quot;managed= false&quot; and in this case, the DAS will assume some other agent is responsible for updating the version column. This other agent is likely to be the client application itself or the database via a trigger or some other mechanism.</P>
+
+<P>When applying changes made to a graph (see <SPAN class="error">&#91;ChangeSummaryProcessing\|RDB DAS C+\+ - ChangeSummaryProcessing|RDB DAS C++ - ChangeSummaryProcessing&#93;</SPAN>), the DAS will throw an exception if any table row has been modified since the row was read. For example, if a DAS client reads a row representing a specific Customer and then tries to update that Customer, the DAS will throw an exception if the Customer has already been modified by some other agent. The following example illustrates applying changes and checking for a collision failure:DAS* das = DASImpl::getFactory().createDAS(Config(&quot;ManagedBooksConfig.xml&quot;), getConnection());<BR>
+ // Read a book instance<BR>
+ CommandPtr select = das-&gt;getCommand(&quot;select book 1&quot;);<BR>
+ DataObjectPtr root = select-&gt;executeQuery();<BR>
+ DataObjectPtr book = root-&gt;getDataObject(&quot;BOOK<SPAN class="nobr"><A href="http://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=TUSCANY&title=1&linkCreation=true&fromPageId=69484" title="Create Page: 1" class="createlink">1<SUP><IMG class="rendericon" src="http://cwiki.apache.org/confluence/images/icons/plus.gif" height="7" width="7" align="absmiddle" alt="" border="0"></SUP></A></SPAN>&quot;);<BR>
+ book-&gt;setInt(&quot;QUANTITY&quot;, 2);</P>
+
+<P> // Try to apply changes and catch potential update collision<BR>
+ try <DIV class="error"><SPAN class="error">Unknown macro: { das.applyChanges(root); }</SPAN> </DIV> catch (DASOptimisticConcurrencyControlException&amp;) <DIV class="error"><SPAN class="error">Unknown macro: { recover(); }</SPAN> </DIV></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 &copy; 2003-2007, The Apache Software Foundation&nbsp;&nbsp;
+ </DIV>
+
+ </BODY>
+</HTML> \ No newline at end of file