summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/rdb-das-c-conventionoverconfiguration.html
blob: 025a465e0baf79c9a407d904a28b56b3c818b5ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!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++ - ConventionOverConfiguration : 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=69443">
                    <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++ - ConventionOverConfiguration">RDB DAS C++ - ConventionOverConfiguration</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%2B-ConventionOverConfiguration-ConventionOverConfiguration"></A>ConventionOverConfiguration</H1>

<P>This concept reflects the notion that configuration (defining a bunch of stuff in a side file) can be avoided by following convention (adhering to prescribed patterns) and that this is generally a good thing. The RDB DAS has several reasonable conventions in place and using these can significantly reduce a developer's work-load.</P>

<P>As an example, the RDB DAS provides a straight-forward, one-to-one mapping of database tables to DataObject Types and from table columns to DataObject properties. If a user provides no mapping information to the contrary, a graph of DataObjects returned by the DAS will directly map Types/Properties to the Tables/Columns queried.</P>

<P>For example, consider a database with the following table:</P>
<DIV class="code"><DIV class="codeContent">
<PRE class="code-java">TABLE CUSTOMER
     ID         INTEGER
     LASTNAME   VARCHAR(20)
     ADDRESS    VARCHAR(30)</PRE>
</DIV></DIV>
<P>If an application uses the DAS to query this table with the following SQL statement:</P>
<DIV class="preformatted"><DIV class="preformattedContent">
<PRE>SELECT * FROM CUSTOMER
</PRE>
</DIV></DIV>
<P>The DAS will return a graph of DataObjects each of Type CUSTOMER and each instance in will have three properties: (ID, LASTNAME, ADDRESS). Here is the example code. Note that no configuration data is provided at all.</P>
<DIV class="panel"><DIV class="panelContent">
<P>DASImpl&#42; das = (DASImpl*) DASImpl::getFactory().createDAS(getConnection());<BR>
 CommandPtr readCustomers = das-&gt;createCommand(&quot;select * from CUSTOMER&quot;);<BR>
 DataObjectPtr root = readCustomers-&gt;executeQuery();</P>
</DIV></DIV>
<P>Another piece of convention followed by the RDB DAS has to do with database table keys. When asked to &quot;apply changes&quot;, the RDB DAS scans the SDO ChangeSummery and generates the set of INSERT/UPDATE and DELETE statements needed to flush the graph changes to the database. To generate the correct statements the RDB DAS needs to know how a DataObject's properties map to a database table key. In typical Object/Relational mappings frameworks, this information is provided in a config file with something like this:</P>
<DIV class="preformatted"><DIV class="preformattedContent">
<PRE>&lt;Table tableName=&quot;COMPANY&quot;&gt;
      &lt;Column columnName=&quot;ID&quot; primaryKey=&quot;true&quot;/&gt;
      .
      .
      .
   &lt;/Table&gt;
</PRE>
</DIV></DIV>
<P>However, the RDB DAS understands is that, in the absence of user provided cofiguration data, a DataObject property named &quot;ID&quot; maps to a key column named &quot;ID&quot; in the database. If a developer follows this convention (naming key columns &quot;ID&quot;) then this key-mapping information need not be specified in a configuration file. Convention Over Configuration strings are not case sensitives, so &quot;ID&quot;, &quot;Id&quot;, &quot;iD&quot; or&quot;id&quot; will be mapped as a primary key.</P>


<P>The RDB DAS also has convention in place for mapping DataObject relationships. If a database table (yyy) has a column named xxx_ID then the DAS will assume, in the absence of config data to the contrary, that there is a one-to-many relationship from table xxx to table yyy and that the key column for table xxx is named &quot;ID&quot;.</P>

<P>There is more &quot;convention over configuration&quot; coming. We are currently looking into support for optimistic concurrency control conventions and other areas. </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>