apache-tuscany/site/trunk/site-publish/concept-conventionoverconfiguration.html
2014-11-21 09:30:19 +00:00

157 lines
No EOL
9.5 KiB
HTML

<!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="resources/space.css">
<STYLE type="text/css">
.footer {
background-image: url('http://cwiki.apache.org/confluence/images/border/border_bottom.gif');
background-repeat: repeat-x;
background-position: left top;
padding-top: 4px;
color: #666;
}
</STYLE>
<SCRIPT type="text/javascript" language="javascript">
var hide = null;
var show = null;
var children = null;
function init() {
/* Search form initialization */
var form = document.forms['search'];
if (form != null) {
form.elements['domains'].value = location.hostname;
form.elements['sitesearch'].value = location.hostname;
}
/* Children initialization */
hide = document.getElementById('hide');
show = document.getElementById('show');
children = document.all != null ?
document.all['children'] :
document.getElementById('children');
if (children != null) {
children.style.display = 'none';
show.style.display = 'inline';
hide.style.display = 'none';
}
}
function showChildren() {
children.style.display = 'block';
show.style.display = 'none';
hide.style.display = 'inline';
}
function hideChildren() {
children.style.display = 'none';
show.style.display = 'inline';
hide.style.display = 'none';
}
</SCRIPT>
<TITLE>Concept - ConventionOverConfiguration</TITLE>
<META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
<BODY onload="init()">
<TABLE border="0" cellpadding="2" cellspacing="0" width="100%">
<TR class="topBar">
<TD align="left" valign="middle" class="topBarDiv" nowrap="">
&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-java-project.html" title="DAS Java Project">DAS Java Project</A>&nbsp;&gt;&nbsp;<A href="rdb-das.html" title="RDB DAS">RDB DAS</A>&nbsp;&gt;&nbsp;<A href="rdb-das-user-guide.html" title="RDB DAS - User Guide">RDB DAS - User Guide</A>&nbsp;&gt;&nbsp;<A href="" title="Concept - ConventionOverConfiguration">Concept - ConventionOverConfiguration</A>
</TD>
<TD align="right" valign="middle" nowrap="">
<FORM name="search" action="http://www.google.com/search" method="get">
<INPUT type="hidden" name="ie" value="UTF-8">
<INPUT type="hidden" name="oe" value="UTF-8">
<INPUT type="hidden" name="domains" value="">
<INPUT type="hidden" name="sitesearch" value="">
<INPUT type="text" name="q" maxlength="255" value="">
<INPUT type="submit" name="btnG" value="Google Search">
</FORM>
</TD>
</TR>
</TABLE>
<DIV id="PageContent">
<DIV class="pageheader" style="padding: 6px 0px 0px 0px;">
<!-- We'll enable this once we figure out how to access (and save) the logo resource -->
<!--img src="/wiki/images/confluence_logo.gif" style="float: left; margin: 4px 4px 4px 10px;" border="0"-->
<DIV style="margin: 0px 10px 0px 10px" class="smalltext">Apache Tuscany</DIV>
<DIV style="margin: 0px 10px 8px 10px" class="pagetitle">Concept - ConventionOverConfiguration</DIV>
<DIV class="greynavbar" align="right" style="padding: 2px 10px; margin: 0px;">
<A href="http://cwiki.apache.org/confluence/pages/editpage.action?pageId=52811">
<IMG src="http://cwiki.apache.org/confluence/images/icons/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A>
<A href="http://cwiki.apache.org/confluence/pages/editpage.action?pageId=52811">Edit Page</A>
&nbsp;
<A href="http://cwiki.apache.org/confluence/pages/listpages.action?key=TUSCANY">
<IMG src="http://cwiki.apache.org/confluence/images/icons/browse_space.gif" height="16" width="16" border="0" align="absmiddle" title="Browse Space"></A>
<A href="http://cwiki.apache.org/confluence/pages/listpages.action?key=TUSCANY">Browse Space</A>
&nbsp;
<A href="http://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=TUSCANY&fromPageId=52811">
<IMG src="http://cwiki.apache.org/confluence/images/icons/add_page_16.gif" height="16" width="16" border="0" align="absmiddle" title="Add Page"></A>
<A href="http://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=TUSCANY&fromPageId=52811">Add Page</A>
&nbsp;
<A href="http://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=TUSCANY&fromPageId=52811">
<IMG src="http://cwiki.apache.org/confluence/images/icons/add_blogentry_16.gif" height="16" width="16" border="0" align="absmiddle" title="Add News"></A>
<A href="http://cwiki.apache.org/confluence/pages/createblogpost.action?spaceKey=TUSCANY&fromPageId=52811">Add News</A>
</DIV>
</DIV>
<DIV class="pagesubheading" style="margin: 0px 10px 0px 10px;">
Added by <A href="http://cwiki.apache.org/confluence/users/viewuserprofile.action?username=adriano_crestani">Adriano Crestani</A>, last edited by <A href="http://cwiki.apache.org/confluence/users/viewuserprofile.action?username=lresende@apache.org">Luciano Resende</A> on Apr 29, 2007
&nbsp;(<A href="http://cwiki.apache.org/confluence/pages/diffpages.action?pageId=52811&originalId=52885">view change</A>)
</DIV>
<DIV class="pagecontent">
<DIV class="wiki-content">
<H1><A name="Concept-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>DAS das = DAS.FACTORY.createDAS(getConnection());<BR>
Command readCustomers = das.createCommand(&quot;select * from CUSTOMER&quot;);<BR>
DataObject root = readCustomers.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.</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>
<DIV class="footer">
Generated by
<A href="http://www.atlassian.com/confluence/">Atlassian Confluence</A> (Version: 2.2.9 Build: 527 Sep 07, 2006)
<A href="http://could.it/autoexport/">AutoExport Plugin</A> (Version: Unknown - PluginManager Error)
</DIV>
</BODY>
</HTML>