You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by re...@apache.org on 2008/08/01 17:15:29 UTC

svn commit: r681719 [4/10] - in /incubator/empire-db/site: ./ community/ css/ documentation/ downloads/ empiredb/ images/ images/diagrams/ images/logos/ images/mail/ images/menu/ javadocs/ js/ struts2ext/ support/

Added: incubator/empire-db/site/empiredb/empiredb.htm
URL: http://svn.apache.org/viewvc/incubator/empire-db/site/empiredb/empiredb.htm?rev=681719&view=auto
==============================================================================
--- incubator/empire-db/site/empiredb/empiredb.htm (added)
+++ incubator/empire-db/site/empiredb/empiredb.htm Fri Aug  1 08:15:26 2008
@@ -0,0 +1,253 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" >
+<!-- #BeginTemplate "../main.dwt" -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="language" content="en" />
+	<meta name="robots" content="index, follow" />
+	<meta name="keywords" content="java, jar, jdbc, sql, data, metadata, persistence, rdbms, orm, mapping" />
+	<meta name="description" content="Open Source relational data persistence component." />
+	
+	<!-- #BeginEditable "doctitle" -->
+<title>Empire-db - At a glance</title>
+	<!-- #EndEditable -->
+	
+	<script type="text/javascript" src="../js/prototype.js"></script>
+	<script type="text/javascript" src="../js/menu.js"></script>
+	<!-- #BeginEditable "javascripts" -->
+	<!-- #EndEditable -->
+	
+	<link rel="shortcut icon" href="../empire-db.ico" />
+	<link rel="stylesheet" href="../css/layout.css" type="text/css" />
+	<!-- #BeginEditable "stylesheets" -->
+	<!-- #EndEditable -->
+</head>
+
+<body>
+<div id="wrapper">
+
+	<!-- Header -->
+	<div id="header">
+		<div id="logo">
+			<img src="../images/logos/empire-db-logo.gif" alt="Empire-db: The relational data persistence component." />
+		</div>
+		<div id="asf">
+			<a target="_blank" href="http://incubator.apache.org/">
+			<img src="../images/logos/apache-incubator-logo.png" alt="Apache Incubator" /></a>
+		</div>
+		<div style="clear:both"></div>
+	</div>
+	
+	<!-- Top -->
+	<div id="top">
+		<div id="topbar">&nbsp;</div>
+	</div>
+	
+	<!-- Middle -->
+	<div id="middle">
+		<div id="left">    
+				<div id="menuBox">     
+					<ul id="mainMenu">
+						<li id="menu_home"><a href="../index.html">Home</a></li>
+						<li id="menu_news"><a href="../news.htm">News</a></li>
+						<li id="menu_empiredb"><a href="empiredb.htm">Empire-db</a>
+								<ul class="subMenu">
+									<li id="menu_empiredb_extending_pattern">
+									<a href="pattern.htm">The Empire DAO-<br />pattern</a></li>
+									<li id="menu_empiredb_handling_metadata">
+									<a href="metadata.htm">Handling data and metadata</a></li>
+									<li id="menu_empiredb_wrong">
+									<a href="hibernate.htm">What's wrong with Hibernate and JPA</a></li>
+									<li id="menu_empiredb_stringfree">
+									<a href="stringfree.htm">The principle of<br/>string-free coding</a></li>
+									<li id="menu_empiredb_faq">
+									<a href="faq.htm">FAQ</a></li>
+								</ul>
+						</li>
+						<li id="menu_struts2ext">
+						<a href="../struts2ext/struts2ext.htm">Empire-db and Struts2</a>
+							<ul class="subMenu">
+								<li id="menu_struts2ext_forms_controls">
+								<a href="../struts2ext/forms_controls.htm">Forms and controls</a></li>
+								<li id="menu_struts2ext_rendering_parsing">
+								<a href="../struts2ext/rendering_parsing.htm">Rendering and parsing</a></li>
+								<!--<li id="menu_struts2ext_tag_reference"><a href="struts2ext/tag_reference.htm">Tag reference</a></li>-->
+								<li id="menu_struts2ext_input_controls">
+								<a href="../struts2ext/input_controls.htm">Input controls</a></li>
+							</ul>
+						</li>
+						<li id="menu_downloads">
+						<a href="../downloads/downloads.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_license">
+									<a href="../downloads/license.htm">License</a></li>
+								</ul>
+						</li>
+						<li id="menu_documentation">
+						<a href="../documentation/documentation.htm">Documentation</a>					
+							<ul class="subMenu">
+								<li id="menu_documentation_class_overview">
+								<a href="../documentation/class_overview.htm">Empire-db class<br />overview</a></li>
+								<li id="menu_documentation_tutorials">
+								<a href="../documentation/tutorial.htm">Tutorial</a></li>
+								<li id="menu_documentation_getting_started">
+								<a href="../documentation/getting_started.htm">Getting started</a></li>
+								<li id="menu_documentation_api">
+								<a href="../documentation/api.htm">API</a></li>
+							</ul>
+						</li>
+						<li id="menu_community">
+						<a href="../community/community.htm">Community</a>					
+							<ul class="subMenu">
+								<li id="menu_community_mailing_lists">
+								<a href="../community/mailing_lists.htm">Mailing lists</a></li>
+								<!--<li id="menu_community_source_code"><a href="community/source_code.htm">Source code</a></li>-->
+								<li id="menu_community_jira">
+								<a href="../community/jira.htm">Ticketing system</a></li>
+								<!--<li id="menu_community_road_map"><a href="community/road_map.htm">Road map</a></li>-->
+								<li id="menu_community_contributors">
+								<a href="../community/contributors.htm">Contributors</a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="../disclaimer.htm">Disclaimer</a></li>
+					</ul>
+				</div>
+				
+		</div>
+	
+		<!-- #BeginEditable "menu" -->	
+	<script type="text/javascript">
+		var menu = new Menu( 'mainMenu', 'menu_empiredb' );
+		var next_page = "pattern.htm";
+	</script>
+		<!-- #EndEditable -->
+		<script type="text/javascript">
+			/* <![CDATA[ */
+			if( menu ) {
+				// Menu fully opened (comment out if not wanted)
+				// menu.openAll();
+			/* ]]> */
+			}
+		</script>
+	
+		<div id="main">		
+			
+			<div id="pathway">
+			<!-- #BeginEditable "pathway" -->
+	        	Empire-db
+	        <!-- #EndEditable -->
+	        </div>
+			
+			<div id="content">
+			<!-- #BeginEditable "content" -->
+		<h1>At a glance</h1>
+			<p>	Empire-db is a lightweight yet powerful relational database 
+			abstraction layer based on JDBC. It is Open Source and provided 
+			under the Apache 2.0 license.</p>
+		<p> With its unique intuitive and string-free command API you can build virtually any select, insert, update or delete 
+			statement independent from the target DBMS. Database entities are managed through dynamic beans which even allow 
+			data model changes at runtime. Still it acts passively and gives you full control over connection and transaction 
+			handling with zero configuration required.</p>
+		<p> Empire-db's object model for the schema definition offers unprecedented compile-time safety when building dynamic queries or working 
+			with metadata. As a positive side effect your IDE's code completion feature allows browsing of your data model which can 
+			dramatically improve productivity.</p>
+		<h2>Feature list:</h2>
+		<ul>
+			<li>No XML schemas or annotations to learn – everything&#39;s in Java 
+			(Plain Old Java Code).</li>
+			<li>Zero configuration footprint - not even one single configuration 
+			file!</li>
+			<li>DBMS independent data model definition, record handling and command definition, which keeps code 
+				portable to all SQL databases.</li>
+			<li>Metadata accessible and extensible through standard Java code.</li>
+			<li>Type-safe API for dynamic SQL command generation lets you build virtually any SQL statement exactly 
+				as you want it; intuitive and completely string-free.</li>
+			<li>No need to always work with full database entities. Build 
+			queries to provide you with the data exactly as you need it, and 
+			obtain the result for example as a list of any type of POJO with 
+			matching property setters or constructor.</li>
+			<li>Query results or record data may alternatively be obtained as 
+			XML even with added metadata.</li>
+			<li>Works with dynamic beans and type-safe field access. Special support for data exchange 
+			to and from traditional JavaBeans / POJOs is provided.</li>
+			<li>Automatic tracking of record state and field modification (aka "dirty checking") to 
+			only insert/ update modified fields.</li>
+			<li>Support for optimistic locking through timestamp column.</li>
+			<li>DDL generation for target DBMS from object definition, either for the entire database or for 
+				individual objects such as tables, views, columns and relations.</li>
+			<li>Support for data model changes (DDL) at runtime with full 
+			dynamic bean support.</li>
+		</ul>
+		<h2>Major benefits:</h2>
+		<ul>
+			<li>Maximum compile-time safety through <a href="stringfree.htm">the principle of string-free coding</a>. This leads to better code 
+				quality and maintainability.</li>
+			<li><a href="metadata.htm">Metadata support</a> reduces redundancies through all implementation layers.</li>
+			<li>Unlimited utilization of the power of SQL helps improving 
+			application performance, while retaining full database portability.</li>
+			<li>Increased productivity by utilizing the IDE's code completion feature for dynamic query 
+				generation and metadata access.</li>
+			<li>Easy to learn through intuitive SQL command API.</li>
+		</ul>
+			<!-- #EndEditable --></div>
+					
+			<div id="nav">
+				<hr />
+				<div id="nav_prev">
+					<a id="prev" href=""><img src="../images/prev.gif" alt="" /> Previous Page</a> 
+					&nbsp;
+				</div>
+				<div id="nav_next">
+					&nbsp;
+					<a id="next" href="">Next Page 
+					<img src="../images/next.gif" alt="" /></a>
+				</div>
+				<div style="clear: both;"></div>
+			</div>
+			
+			<script type="text/javascript">
+			/* <![CDATA[ */
+				if( ( typeof(prev_page) == "undefined" || prev_page == "" ) &&
+					( typeof(next_page) == "undefined" || next_page == "" ) ) 
+				{
+					$( 'nav' ).hide();
+				}
+				else 
+				{			
+					if( typeof(prev_page) != "undefined" && prev_page != "" ) {
+						$( 'prev' ).href = prev_page;
+						$( 'prev' ).show();
+					}
+					else {
+						$( 'prev' ).hide();
+					}
+					
+					if( typeof(next_page) != "undefined" && next_page !="" ) {
+						$( 'next' ).href = next_page;
+						$( 'next' ).show();
+					}
+					else {
+						$( 'next' ).hide();
+					}
+				}
+			/* ]]> */
+			</script>
+
+		</div>
+
+	</div>
+	
+	<!-- Footer -->		
+	<div id="footer">
+		<small>Copyright &copy; 2008, The Apache Software Foundation</small>&nbsp;<!--<p style="padding-right: 25px; text-align: right;">
+	    <a href="http://validator.w3.org/check?uri=referer">
+		<img
+	        src="images/valid-xhtml10.png"
+	        alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+	 	</p>--></div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

Propchange: incubator/empire-db/site/empiredb/empiredb.htm
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/empire-db/site/empiredb/faq.htm
URL: http://svn.apache.org/viewvc/incubator/empire-db/site/empiredb/faq.htm?rev=681719&view=auto
==============================================================================
--- incubator/empire-db/site/empiredb/faq.htm (added)
+++ incubator/empire-db/site/empiredb/faq.htm Fri Aug  1 08:15:26 2008
@@ -0,0 +1,289 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" >
+<!-- #BeginTemplate "../main.dwt" -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="language" content="en" />
+	<meta name="robots" content="index, follow" />
+	<meta name="keywords" content="java, jar, jdbc, sql, data, metadata, persistence, rdbms, orm, mapping" />
+	<meta name="description" content="Open Source relational data persistence component." />
+	
+	<!-- #BeginEditable "doctitle" -->
+<title>Empire-db - Frequently asked questions</title>
+	<!-- #EndEditable -->
+	
+	<script type="text/javascript" src="../js/prototype.js"></script>
+	<script type="text/javascript" src="../js/menu.js"></script>
+	<!-- #BeginEditable "javascripts" -->
+	<!-- #EndEditable -->
+	
+	<link rel="shortcut icon" href="../empire-db.ico" />
+	<link rel="stylesheet" href="../css/layout.css" type="text/css" />
+	<!-- #BeginEditable "stylesheets" -->
+<style type="text/css">
+#content h2 {
+	font-style: italic;
+	border-bottom: 1px solid;
+	background: url("../images/answer.gif") no-repeat scroll left center; /* replace .2em by whatever works for you */
+	padding-left: 20px;
+}
+
+#faq li {
+	list-style: none;
+	background: url("../images/question.gif") no-repeat scroll left center; /* replace .2em by whatever works for you */
+	padding-left: 20px;
+}
+</style>
+	<!-- #EndEditable -->
+</head>
+
+<body>
+<div id="wrapper">
+
+	<!-- Header -->
+	<div id="header">
+		<div id="logo">
+			<img src="../images/logos/empire-db-logo.gif" alt="Empire-db: The relational data persistence component." />
+		</div>
+		<div id="asf">
+			<a target="_blank" href="http://incubator.apache.org/">
+			<img src="../images/logos/apache-incubator-logo.png" alt="Apache Incubator" /></a>
+		</div>
+		<div style="clear:both"></div>
+	</div>
+	
+	<!-- Top -->
+	<div id="top">
+		<div id="topbar">&nbsp;</div>
+	</div>
+	
+	<!-- Middle -->
+	<div id="middle">
+		<div id="left">    
+				<div id="menuBox">     
+					<ul id="mainMenu">
+						<li id="menu_home"><a href="../index.html">Home</a></li>
+						<li id="menu_news"><a href="../news.htm">News</a></li>
+						<li id="menu_empiredb"><a href="empiredb.htm">Empire-db</a>
+								<ul class="subMenu">
+									<li id="menu_empiredb_extending_pattern">
+									<a href="pattern.htm">The Empire DAO-<br />pattern</a></li>
+									<li id="menu_empiredb_handling_metadata">
+									<a href="metadata.htm">Handling data and metadata</a></li>
+									<li id="menu_empiredb_wrong">
+									<a href="hibernate.htm">What's wrong with Hibernate and JPA</a></li>
+									<li id="menu_empiredb_stringfree">
+									<a href="stringfree.htm">The principle of<br/>string-free coding</a></li>
+									<li id="menu_empiredb_faq">
+									<a href="faq.htm">FAQ</a></li>
+								</ul>
+						</li>
+						<li id="menu_struts2ext">
+						<a href="../struts2ext/struts2ext.htm">Empire-db and Struts2</a>
+							<ul class="subMenu">
+								<li id="menu_struts2ext_forms_controls">
+								<a href="../struts2ext/forms_controls.htm">Forms and controls</a></li>
+								<li id="menu_struts2ext_rendering_parsing">
+								<a href="../struts2ext/rendering_parsing.htm">Rendering and parsing</a></li>
+								<!--<li id="menu_struts2ext_tag_reference"><a href="struts2ext/tag_reference.htm">Tag reference</a></li>-->
+								<li id="menu_struts2ext_input_controls">
+								<a href="../struts2ext/input_controls.htm">Input controls</a></li>
+							</ul>
+						</li>
+						<li id="menu_downloads">
+						<a href="../downloads/downloads.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_license">
+									<a href="../downloads/license.htm">License</a></li>
+								</ul>
+						</li>
+						<li id="menu_documentation">
+						<a href="../documentation/documentation.htm">Documentation</a>					
+							<ul class="subMenu">
+								<li id="menu_documentation_class_overview">
+								<a href="../documentation/class_overview.htm">Empire-db class<br />overview</a></li>
+								<li id="menu_documentation_tutorials">
+								<a href="../documentation/tutorial.htm">Tutorial</a></li>
+								<li id="menu_documentation_getting_started">
+								<a href="../documentation/getting_started.htm">Getting started</a></li>
+								<li id="menu_documentation_api">
+								<a href="../documentation/api.htm">API</a></li>
+							</ul>
+						</li>
+						<li id="menu_community">
+						<a href="../community/community.htm">Community</a>					
+							<ul class="subMenu">
+								<li id="menu_community_mailing_lists">
+								<a href="../community/mailing_lists.htm">Mailing lists</a></li>
+								<!--<li id="menu_community_source_code"><a href="community/source_code.htm">Source code</a></li>-->
+								<li id="menu_community_jira">
+								<a href="../community/jira.htm">Ticketing system</a></li>
+								<!--<li id="menu_community_road_map"><a href="community/road_map.htm">Road map</a></li>-->
+								<li id="menu_community_contributors">
+								<a href="../community/contributors.htm">Contributors</a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="../disclaimer.htm">Disclaimer</a></li>
+					</ul>
+				</div>
+				
+		</div>
+	
+		<!-- #BeginEditable "menu" -->	
+	<script type="text/javascript">
+		var menu = new Menu( 'mainMenu', 'menu_empiredb', 'menu_empiredb_faq' );
+		var prev_page = "stringfree.htm";
+	</script>
+		<!-- #EndEditable -->
+		<script type="text/javascript">
+			/* <![CDATA[ */
+			if( menu ) {
+				// Menu fully opened (comment out if not wanted)
+				// menu.openAll();
+			/* ]]> */
+			}
+		</script>
+	
+		<div id="main">		
+			
+			<div id="pathway">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; Frequently asked questions
+	        <!-- #EndEditable -->
+	        </div>
+			
+			<div id="content">
+			<!-- #BeginEditable "content" -->
+		<h1>Overview</h1>
+		<ul id="faq">
+			<li><a href="#question1">How long has Empire-db been around and why have I never heard of it?</a></li>		
+			<li><a href="#question2">What application is Empire-db suitable for?</a></li>
+			<li><a href="#question3">What Web application frameworks does Empire-db integrate with?</a></li>
+			<li><a href="#question4">Does Empire-db conform to the JPA standard?</a></li>									
+			<li><a href="#question5">Does Empire-db handle connection pooling and object caching?</a></li>						
+			<li><a href="#question6">How does Empire-db implement inserts, updates and optimistic locking?</a></li>
+			<li><a href="#question7">Can Empire-db generate arbitrary insert, update and delete statements?</a></li>
+			<li><a href="#question8">Can Empire-db change the data model at runtime?</a></li>		
+			<li><a href="#question9">Does Empire-db support DBMS specific SQL functions?</a></li>				
+		</ul>
+		<br/>
+		<h2 id="question1">How long has Empire-db been around and why have I never heard of it?</h2>
+		<p> The conceptual design and first implementation of Empire-db was made in the year 2000 by ESTEAM Software. 
+			In the following years it has constantly improved and proven its superior capabilities in various database 
+			related projects. In summer 2007 ESTEAM Software decided that the solution was now mature enough to be released 
+			as an Open Source project under the name Empire-db.</p>
+		
+		<h2 id="question2">What application is Empire-db suitable for?</h2>
+		<p> We have used Empire-db for both Web and Rich-client applications as well as for interfaceless cronjobs 
+			and from information systems to data warehousing. The more extensively you need to use a relational database 
+			and the more data driven your application is the more suitable is Empire-db.</p>
+    		
+		<h2 id="question3">What Web application frameworks does Empire-db integrate with?</h2>
+		<p> Conceptually you can use Empire-db with any Web application framework but there is a special – and we 
+			believe revolutionary – integration for the new Struts2 Web application framework offered by the Apache 
+			foundation. With what we call the Empire-Struts2-Extensions you can utilize all of Empire-db’s metadata 
+			capabilities through special HTML-Tags. We think that Web application development has never been more 
+			efficient and that separation of view and model has never been cleaner as with this solution.</p>
+		
+		<h2 id="question4">Does Empire-db conform to the JPA standard?</h2>
+		<p> No. The JPA standard is a least common denominator specification of object relational mapping (ORM). 
+			If Empire-db was yet another JPA implementation it could not offer any major benefits over existing 
+			solutions. We believe that only with a fundamentally different approach issues such as compile-time safety 
+			and metadata management can be addressed properly.</p>
+		
+		<h2 id="question5">Does Empire-db handle connection pooling and object caching?</h2>
+		<p> No. Empire-db is passive and leaves connection and transaction handling to you 
+		and your application 
+			container – thus leaving you in full control and requiring zero configuration. While object caching 
+			might be necessary for traditional ORM solutions, we think with the way Empire-db is designed there 
+			is no real need for it. Besides that, we feel that object caching in relational data persistence can be problematic.</p>
+
+		<h2 id="question6">How does Empire-db implement inserts, updates and optimistic locking?</h2>
+		<p> Empire-db automatically keeps track of all changes on an entity by keeping a modification flag for each 
+			attribute. Thus only modified fields are inserted and updated in the database. Empire-db also keeps 
+			track of an entity&#39;s state, hence it automatically knows whether to perform an insert or an update 
+			operation. For optimistic locking Empire-db requires a timestamp field to be provided with the corresponding 
+			table, through which concurrent changes in the database are detected. This feature is optional but 
+			strongly recommended.</p>
+
+		<h2 id="question7">Can Empire-db generate arbitrary insert, update and delete statements?</h2>
+		<p> Yes. The DBCommand object will let you generate SQL statements for either querying (select), updating, 
+			inserting or deleting data just as you'd write them, but entirely string-free only by using its unique 
+			API. This will make your code portable and you can easily run it 
+			on another DBMS just by selecting the corresponding driver.</p>
+
+		<h2 id="question8">Can Empire-db change the data model at runtime?</h2>
+		<p> Yes. With Empire-db you can even change the data model dynamically at runtime by creating, altering or 
+			deleting objects like tables, views, relations or columns – provided that the driver supports this feature. 
+			Because of its dynamic beans you can use new and changed objects just as if they had existed like that 
+			at compile time. This is something you clearly can't do with traditional JavaBeans 
+		/ POJOs.</p>
+
+		<h2 id="question9">Does Empire-db support DBMS specific SQL functions?</h2>
+		<p> Yes, if supported by the driver. An example is the Oracle's "connect by prior" phrase which can be used 
+			to perform hierarchical queries. With an Oracle driver attached to your database you can cast your DBCommand 
+			object into a DBCommandOracle object. This will then provide the two additional methods <code>connectByPrior()</code>
+			and <code>startWith()</code>. However this will make your code Oracle specific.</p>
+
+			<!-- #EndEditable --></div>
+					
+			<div id="nav">
+				<hr />
+				<div id="nav_prev">
+					<a id="prev" href=""><img src="../images/prev.gif" alt="" /> Previous Page</a> 
+					&nbsp;
+				</div>
+				<div id="nav_next">
+					&nbsp;
+					<a id="next" href="">Next Page 
+					<img src="../images/next.gif" alt="" /></a>
+				</div>
+				<div style="clear: both;"></div>
+			</div>
+			
+			<script type="text/javascript">
+			/* <![CDATA[ */
+				if( ( typeof(prev_page) == "undefined" || prev_page == "" ) &&
+					( typeof(next_page) == "undefined" || next_page == "" ) ) 
+				{
+					$( 'nav' ).hide();
+				}
+				else 
+				{			
+					if( typeof(prev_page) != "undefined" && prev_page != "" ) {
+						$( 'prev' ).href = prev_page;
+						$( 'prev' ).show();
+					}
+					else {
+						$( 'prev' ).hide();
+					}
+					
+					if( typeof(next_page) != "undefined" && next_page !="" ) {
+						$( 'next' ).href = next_page;
+						$( 'next' ).show();
+					}
+					else {
+						$( 'next' ).hide();
+					}
+				}
+			/* ]]> */
+			</script>
+
+		</div>
+
+	</div>
+	
+	<!-- Footer -->		
+	<div id="footer">
+		<small>Copyright &copy; 2008, The Apache Software Foundation</small>&nbsp;<!--<p style="padding-right: 25px; text-align: right;">
+	    <a href="http://validator.w3.org/check?uri=referer">
+		<img
+	        src="images/valid-xhtml10.png"
+	        alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+	 	</p>--></div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

Propchange: incubator/empire-db/site/empiredb/faq.htm
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/empire-db/site/empiredb/hibernate.htm
URL: http://svn.apache.org/viewvc/incubator/empire-db/site/empiredb/hibernate.htm?rev=681719&view=auto
==============================================================================
--- incubator/empire-db/site/empiredb/hibernate.htm (added)
+++ incubator/empire-db/site/empiredb/hibernate.htm Fri Aug  1 08:15:26 2008
@@ -0,0 +1,418 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" >
+<!-- #BeginTemplate "../main.dwt" -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="language" content="en" />
+	<meta name="robots" content="index, follow" />
+	<meta name="keywords" content="java, jar, jdbc, sql, data, metadata, persistence, rdbms, orm, mapping" />
+	<meta name="description" content="Open Source relational data persistence component." />
+	
+	<!-- #BeginEditable "doctitle" -->
+<title>Empire-db - What's wrong with Hibernate and JPA</title>
+	<!-- #EndEditable -->
+	
+	<script type="text/javascript" src="../js/prototype.js"></script>
+	<script type="text/javascript" src="../js/menu.js"></script>
+	<!-- #BeginEditable "javascripts" -->
+<script type="text/javascript" src="../js/maillink.js"></script>
+	<!-- #EndEditable -->
+	
+	<link rel="shortcut icon" href="../empire-db.ico" />
+	<link rel="stylesheet" href="../css/layout.css" type="text/css" />
+	<!-- #BeginEditable "stylesheets" -->
+<style type="text/css">
+.style1 {
+	color: #000000;
+}
+</style>
+	<!-- #EndEditable -->
+</head>
+
+<body>
+<div id="wrapper">
+
+	<!-- Header -->
+	<div id="header">
+		<div id="logo">
+			<img src="../images/logos/empire-db-logo.gif" alt="Empire-db: The relational data persistence component." />
+		</div>
+		<div id="asf">
+			<a target="_blank" href="http://incubator.apache.org/">
+			<img src="../images/logos/apache-incubator-logo.png" alt="Apache Incubator" /></a>
+		</div>
+		<div style="clear:both"></div>
+	</div>
+	
+	<!-- Top -->
+	<div id="top">
+		<div id="topbar">&nbsp;</div>
+	</div>
+	
+	<!-- Middle -->
+	<div id="middle">
+		<div id="left">    
+				<div id="menuBox">     
+					<ul id="mainMenu">
+						<li id="menu_home"><a href="../index.html">Home</a></li>
+						<li id="menu_news"><a href="../news.htm">News</a></li>
+						<li id="menu_empiredb"><a href="empiredb.htm">Empire-db</a>
+								<ul class="subMenu">
+									<li id="menu_empiredb_extending_pattern">
+									<a href="pattern.htm">The Empire DAO-<br />pattern</a></li>
+									<li id="menu_empiredb_handling_metadata">
+									<a href="metadata.htm">Handling data and metadata</a></li>
+									<li id="menu_empiredb_wrong">
+									<a href="hibernate.htm">What's wrong with Hibernate and JPA</a></li>
+									<li id="menu_empiredb_stringfree">
+									<a href="stringfree.htm">The principle of<br/>string-free coding</a></li>
+									<li id="menu_empiredb_faq">
+									<a href="faq.htm">FAQ</a></li>
+								</ul>
+						</li>
+						<li id="menu_struts2ext">
+						<a href="../struts2ext/struts2ext.htm">Empire-db and Struts2</a>
+							<ul class="subMenu">
+								<li id="menu_struts2ext_forms_controls">
+								<a href="../struts2ext/forms_controls.htm">Forms and controls</a></li>
+								<li id="menu_struts2ext_rendering_parsing">
+								<a href="../struts2ext/rendering_parsing.htm">Rendering and parsing</a></li>
+								<!--<li id="menu_struts2ext_tag_reference"><a href="struts2ext/tag_reference.htm">Tag reference</a></li>-->
+								<li id="menu_struts2ext_input_controls">
+								<a href="../struts2ext/input_controls.htm">Input controls</a></li>
+							</ul>
+						</li>
+						<li id="menu_downloads">
+						<a href="../downloads/downloads.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_license">
+									<a href="../downloads/license.htm">License</a></li>
+								</ul>
+						</li>
+						<li id="menu_documentation">
+						<a href="../documentation/documentation.htm">Documentation</a>					
+							<ul class="subMenu">
+								<li id="menu_documentation_class_overview">
+								<a href="../documentation/class_overview.htm">Empire-db class<br />overview</a></li>
+								<li id="menu_documentation_tutorials">
+								<a href="../documentation/tutorial.htm">Tutorial</a></li>
+								<li id="menu_documentation_getting_started">
+								<a href="../documentation/getting_started.htm">Getting started</a></li>
+								<li id="menu_documentation_api">
+								<a href="../documentation/api.htm">API</a></li>
+							</ul>
+						</li>
+						<li id="menu_community">
+						<a href="../community/community.htm">Community</a>					
+							<ul class="subMenu">
+								<li id="menu_community_mailing_lists">
+								<a href="../community/mailing_lists.htm">Mailing lists</a></li>
+								<!--<li id="menu_community_source_code"><a href="community/source_code.htm">Source code</a></li>-->
+								<li id="menu_community_jira">
+								<a href="../community/jira.htm">Ticketing system</a></li>
+								<!--<li id="menu_community_road_map"><a href="community/road_map.htm">Road map</a></li>-->
+								<li id="menu_community_contributors">
+								<a href="../community/contributors.htm">Contributors</a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="../disclaimer.htm">Disclaimer</a></li>
+					</ul>
+				</div>
+				
+		</div>
+	
+		<!-- #BeginEditable "menu" -->	
+	<script type="text/javascript">
+		var menu = new Menu( 'mainMenu', 'menu_empiredb', 'menu_empiredb_wrong' );
+		var prev_page = "metadata.htm";
+		var next_page = "stringfree.htm";
+	</script>
+		<!-- #EndEditable -->
+		<script type="text/javascript">
+			/* <![CDATA[ */
+			if( menu ) {
+				// Menu fully opened (comment out if not wanted)
+				// menu.openAll();
+			/* ]]> */
+			}
+		</script>
+	
+		<div id="main">		
+			
+			<div id="pathway">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; What's wrong with Hibernate and JPA
+	        <!-- #EndEditable -->
+	        </div>
+			
+			<div id="content">
+			<!-- #BeginEditable "content" -->
+		<h1>What's wrong with Hibernate and JPA</h1>
+		<p> For relational data persistence Hibernate is certainly the most popular solution on the market. It has been around 
+			for years and it’s probably been used in thousands of projects. With 
+		its latest version Hibernate even conforms to Sun’s Java 
+			Persistence API (JPA) specification. So with Hibernate offering everything why look for something else?</p>
+			<p> Well, we think that Hibernate and JPA are simply not as perfect as it seems. To explain why, we 
+			want to 
+			provide you with a few reasons what we think is wrong with Hibernate.
+		</p>
+		
+		<h2>Data model definition: The trouble with the metadata</h2>
+		<p> In order to work every relational data persistence solution needs to understand the underlying data model. 
+			Hibernate offers two ways of defining the data model: XML mapping files and annotations. Annotations have only 
+			recently been introduced to simplify object relational mapping and there are plenty of reasons why annotations 
+			are clearly the superior solution over XML mapping. Hence we will not consider XML mapping 
+			any further and concentrate on annotations. However, everything said 
+		here concerning annotations applies to XML mapping in a similar fashion.</p>
+		<p> The metadata you provide with annotations is required by Hibernate 
+		to know where and how to persist objects in the database. This 
+		information however may not only be useful for Hibernate but also for 
+		your application logic and thus you may want to access it from your code 
+		instead of redundantly providing the same information again. A good 
+		example is e.g. the maximum length of a text field or whether or not a 
+		field is mandatory. On a user interface for example, 
+			you may need this information for the display of a form input control 
+		or for validation.</p>	
+		<p> With annotations you can access this information from your code, but a particular annotation property cannot be 
+			directly referenced from Java code in contrast to a Java object’s property. Here’s an example:</p>
+		<p> This is how to access metadata using annotations:</p>
+		<pre><span style="color: #000000; ">Method field </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Employee.</span><span style="color: #800080; ">class</span><span style="color: #000000; ">.getDeclaredMethod(</span> <span style="color: #000000; ">&quot;</span><span style="color: #0000FF; ">getFirstname</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">, </span><span style="color: #800080; ">new</span><span style="color: #000000; "> Class[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">] );
+javax.persistence.Column col =</span><span style="color: #000000; "> field.getAnnotation( javax.persistence.Column.</span><span style="color: #800080; ">class</span><span style="color: #000000; "> );
+</span><span style="color: #800080; ">int</span><span style="color: #000000; "> length </span><span style="color: #000000; ">=</span><span style="color: #000000; "> col.length();</span></pre>
+		
+		<p> This code achieves the same using Empire-db's object model schema 
+		definition:</p>
+		<pre><span style="color: #800080; ">int</span><span style="color: #000000; "> length </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span class="style1">mydb</span><font color="#0000FF">.EMPLOYEES.FIRSTNAME</font><span style="color: #000000; ">.getSize();</span></pre>
+		<p><small style="display: block; margin: -10px 5px 0px 5px;">(Note that EMPLOYEES and FIRSTNAME are both <em>public final</em> 
+		member fields that we write in all upper-case letters, but could as 
+			well be made accessible through getters – it’s your code and your decision!)</small></p>
+
+		<p> Apart from the lack of compile-time safety and code complexity on the client 
+		side there are more issues why annotations are problematic. The metadata 
+		provided with the persistence annotations is often not sufficient. 
+		Additional annotations as with <a href="http://www.hibernate.org/412.html">
+		Hibernate Validator</a> are required or you may want to define and 
+		assign custom annotations, making 
+		your mapping and access code even less readable and manageable. Not to 
+		mention the impossibility of programmatic changes to your data model at 
+		runtime. With a Java object model for metadata in contrast all this is 
+		easy to achieve. 
+			So why use annotations if you can do better without?</p>
+		<p> We think that annotations should not be used to provide information 
+		likely to be required for application logic. Rather they 
+			should be used to provide code specific information for compiler optimization or code documentation. 
+			<code>@Deprecated</code> and 
+			<code>@SuppressWarnings</code> are good examples for acceptable 
+		annotations. Even though annotations integrate much better with Java 
+		code than XML mapping files, they&#39;re far from being as flexible as 
+		normal interfaces and classes. Annotations are new and cool now, but the 
+		more extensively they are being used, the more they are polluting your 
+		source code. Don&#39;t let annotation hell follow XML configuration hell.</p>
+
+		<h2>Data object definition: The getter setter mania</h2>
+			<p> Besides the metadata we also need somewhere to store and access 
+			our data. For Hibernate and JPA this is a JavaBean or POJO that is 
+			equipped with a member field<span style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Arial','sans-serif'">
+			</span>
+			<span lang="EN-GB" style="FONT-SIZE: 9.5pt; FONT-FAMILY: 'Arial','sans-serif'">
+			as well as a </span>getter and a setter method for each 
+			of the columns of the corresponding table. For large data models this means 
+			lots of lines of code. Hibernate tools 
+		may be used to automatically generate all this code using reverse engineering. 
+			However for large and mature projects you may run into the problem that once you 
+		have manually changed bean or mapping code – 
+			and you want to keep that change – automatic tools are problematic. 
+			So very often all this code including the metadata is maintained by hand. Even worse, since these 
+			objects are usually used as data 
+			transfer objects in order to fill business objects, you’ll find endless lines of code where property values are copied 
+			from one Java object to another. So what’s the point in having all these getters and setters in the first place?</p>
+		<p> With Empire-db's dynamic beans you only have one generic getter and setter 
+		for each entity that both have already been implemented. The 
+			amount of classes may stay the same as we also recommended creating an individual data object class for each database 
+			entity - although this is not necessary when using a generic DBRecord object. But we recommend this 
+			for two reasons: The first one is again type-safety, since you want your internal code to rely on certain entities. 
+			Secondly it is likely that, as your project grows, you will need to override existing and implement new methods there. 
+		But even so, due to the absence of all those member fields and their 
+		corresponding getter and setter methods you will end up with considerably less 
+		code to maintain. Still you may add special getters and setters for 
+		individual columns if necessary or convenient.</p>
+
+		<h2>Dynamic queries: The select dilemma</h2>
+		<p>	What we expect from a relational data persistence solution is good support for dynamic query generation, so let's look 
+			at how dynamic queries are handled. Again Hibernate offers two 
+		options: HQL and the criteria API. HQL is a language of its 
+			own which you have to learn first. It's basically an SQL dialect with Java code mapping extensions. After all, it's 
+		provided or assembled using unsafe string literals and the problem comes when trying to build complex statements with conditionally added 
+			constraints and joins. We think that at some point of complexity such building code becomes simply 
+		unmaintainable. The 
+			criteria API is better from this respect but on the other hand - as 
+		we found - too limited in its capabilities.</p>
+		<p> But there is another issue:
+			A common programming task is, that you need a special view of your data that will contain only few columns collected 
+			or even calculated from one or more tables. The result may be displayed to a user or used for other processing purposes.</p>
+		<p> For this Hibernate HQL offers the possibility to define the select 
+		clause, ideally giving it a special <span class="style1">&quot;</span>result<span class="style1">&quot;</span> 
+		bean that holds exactly the data that you need, even transformed with 
+		SQL functions such as string concatenation or numeric calculations. 
+		Strangely we found that in many projects this feature is rarely used. 
+		Instead people were working with the full entity beans, which meant that 
+		far more attributes than necessary were loaded from the database. For 
+		entity relation resolving Hibernate either uses joins (eager mode) 
+		loading all referenced entities as well or - with lazy loading enabled – 
+		additional queries are performed, one for each unique referenced object 
+		– sometimes even just to access one simple attribute. So in fact 
+		instead of one bean object per row holding say 5 attributes, 5 
+		objects a row holding together over 50 attributes are loaded. It is 
+		fairly obvious that this is not something you&#39;d call the perfect 
+		solution.</p>	
+		<p> Now the question here is: if people fail to take the right approach, is it the people&#39;s or the tool's fault? 
+		<br />
+		In order to find 
+			out, I asked myself: Would I – if I were using Hibernate – always use result beans for my read only queries or would I 
+			work with the full entity beans?</p>
+		<p> From a performance perspective I would definitely use the result beans. But from a code quality perspective maybe I would 
+		not. 
+			After all an expression like</p>
+		<pre><span style="color: #000000; ">filter.append(</span><span style="color: #000000; ">&quot;</span><font color="#0000FF">select</font><font color="#0000FF"> new EmployeeResult(employee.employeeId, 
+               employee.firstname || &#39;, &#39; || employee.lastname, 
+               employee.gender, employee.dateOfBirth, 
+               department.name) </font><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);</span></pre>	
+        <p> isn't exactly going to improve my code quality. Apart from avoiding spelling mistakes also the number and type of my result 
+        	bean's constructor parameters must match this code. Errors will be detected only at runtime making every mistake a tedious 
+        	experience. And after all - I must admit – I'd sometimes probably be just too lazy to type in all those 
+		property names 
+        	even with their entity prefix.<br />
+			So in the end I'd probably be using both approaches depending on the size of the entities and the nature of the query. 
+			However I can understand why people shy away from this efficient and sensible feature – rather paying the price with 
+			high memory consumption and poor performance.</p>    
+		<p> With Empire-db it's so much easier. Here you would definitely 
+		transform and select the columns as you need them in your 
+			result set, since the cost of doing so is so much lower. First you browse all columns for your selection, even including 
+			transformation functions, comfortably using your IDE's code completion. Then you can store them either manually or 
+			automatically in a JavaBean using either the constructor or setters. And most important: you can usually do all this 
+			completely string-free with 100% compile-time safety. Here's an example:</p>
+		<p><strong>To build the following SQL (Oracle syntax):</strong></p>
+		<pre><span style="color: #0000FF; ">SELECT</span><span style="color: #000000; "> t2.EMPLOYEE_ID, t2.LASTNAME </span><span style="color: #808080; ">||</span><span style="color: #000000; "> </span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">, </span><span style="color: #FF0000; ">'</span><span style="color: #000000; "> </span><span style="color: #808080; ">||</span><span style="color: #000000; "> t2.FIRSTNAME </span><span style="color: #0000FF; ">AS</span><span style="color: #000000; "> NAME,
+       t1.NAME </span><span style="color: #0000FF; ">AS</span><span style="color: #000000; "> DEPARTMENT
+</span><span style="color: #0000FF; ">FROM</span><span style="color: #000000; "> (DEPARTMENTS t1 </span><span style="color: #0000FF; ">INNER</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">JOIN</span><span style="color: #000000; "> EMPLOYEES t2 
+      </span><span style="color: #0000FF; ">ON</span><span style="color: #000000; "> t2.DEPARTMENT_ID </span><span style="color: #808080; ">=</span><span style="color: #000000; "> t1.DEPARTMENT_ID)
+</span><span style="color: #0000FF; ">WHERE</span><span style="color: #000000; "> </span><span style="color: #FF00FF; ">upper</span><span style="color: #000000; ">(t2.LASTNAME) </span><span style="color: #808080; ">LIKE</span><span style="color: #000000; "> </span><span style="color: #FF00FF; ">upper</span><span style="color: #000000; ">(</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">Foo%</span><span style="color: #FF0000; ">'</span><span style="color: #000000; ">) </span><span style="color: #808080; ">AND</span><span style="color: #000000; "> t2.RETIRED</span><span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">0</span><span style="color: #000000; ">
+</span><span style="color: #0000FF; ">ORDER</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">BY</span><span style="color: #000000; "> t2.LASTNAME, t2.FIRSTNAME</span></pre>
+		<p><strong>With Empire-db you write:</strong></p>	
+		<pre><span style="color: #000000; ">SampleDB db </span><span style="color: #000000; ">=</span><span style="color: #000000; "> getDatabase();
+</span><span style="color: #008000; ">//</span><span style="color: #008000; "> Declare shortcuts (not necessary but convenient)</span><span style="color: #008000; ">
+</span><span style="color: #000000; ">SampleDB.Employees EMP </span><span style="color: #000000; ">=</span><span style="color: #000000; "> db.EMPLOYEES;
+SampleDB.Departments DEP </span><span style="color: #000000; ">=</span><span style="color: #000000; "> db.DEPARTMENTS;
+</span><span style="color: #008000; ">//</span><span style="color: #008000; "> Create a command object</span><span style="color: #008000; ">
+</span><span style="color: #000000; ">DBCommand cmd </span><span style="color: #000000; ">=</span><span style="color: #000000; "> db.createCommand();
+</span><span style="color: #008000; ">//</span><span style="color: #008000; "> Select columns</span><span style="color: #008000; ">
+</span><span style="color: #000000; ">cmd.select(EMP.EMPLOYEE_ID);
+cmd.select(EMP.LASTNAME.append(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">, </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">).append(EMP.FIRSTNAME).as(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">NAME</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">));
+cmd.select(DEP.NAME.as(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">DEPARTMENT</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">));
+</span><span style="color: #008000; ">//</span><span style="color: #008000; "> Join tables</span><span style="color: #008000; ">
+</span><span style="color: #000000; ">cmd.join  (DEP.DEPARTMENT_ID, EMP.DEPARTMENT_ID);
+</span><span style="color: #008000; ">//</span><span style="color: #008000; "> Set constraints</span><span style="color: #008000; ">
+</span><span style="color: #000000; ">cmd.where(EMP.LASTNAME.likeUpper(</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">Foo%</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">));
+cmd.where(EMP.RETIRED.is(</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">));
+</span><span style="color: #008000; ">//</span><span style="color: #008000; "> Set order</span><span style="color: #008000; ">
+</span><span style="color: #000000; ">cmd.orderBy(EMP.LASTNAME);
+cmd.orderBy(EMP.FIRSTNAME);</span></pre>
+			
+			<h1>Our conclusion</h1>
+			<p> Hibernate is in fact one of the most advanced traditional ORM solutions 
+			available. The problem with ORM however is, 
+				that it’s designed primarily to work with full entities. Relational databases on the other hand offer powerful 
+				capabilities for combining, filtering and transforming entities and their attributes. In order to retain this 
+				flexibility Hibernate offers various features to bridge that gap. But in order to utilize these features properly 
+				you’ve got to make lots of decisions: XML or annotations, HQL or criteria API, lazy or eager fetching and so on. 
+				What Hibernate internally does and especially when it actually performs a database operation is not always 
+				transparent (if you set logging to debug level - you can grasp some of its complexity). Hibernate probably does a 
+				good job if used and configured properly, but it requires a lot of caution and it’s a long way getting there. 
+				Especially if you’re not yet familiar with&nbsp;Hibernate, the learning curve is steep.</p>
+			<p> The one thing that Hibernate lacks most is support for compile-time safety. With both HQL and criteria API you 
+				need to provide property names or even entire SQL fragments as string 
+			literals – making each data model change a risk – 
+				which can only be addressed through extensive and expensive testing.</p>
+			<p> Empire-db on contrary addresses compile-time safety by offering a type safe API based on a Java object model 
+				database definition. Whenever you change this model description your Java compiler will tell you exactly which 
+				lines of code are affected by that change. This dramatically improves code quality and thus reduces the amount 
+				and expense of testing. As a side effect your coding productivity increases as your IDE will allow you to 
+				browse all tables, columns and even SQL functions when building dynamic queries. </p>
+			<p> Empire-db is not an ORM solution as you know it. Its focus is clearly on modelling the way relational databases 
+				work in Java and not vice versa. Empire-db is passive and does not interfere with your connection and transaction 
+				handling – making it easy to integrate and requiring zero configuration. It does not automatically resolve object 
+				references but since you select the data exactly as you need it, there is rarely demand for this. Still if you 
+				need it, you may simply add a getter with a few simple lines of code. In this case – we believe – that less 
+				sometimes is more.</p>
+			<p> We recommend that if you are not very familiar with SQL and all you need is to store away and reload your POJO&#39;s, Hibernate or another JPA implementation is probably the 
+			better choice. But if you want to get the most out of 
+				SQL and you want to keep full control over when which statements are executed, with all the additional benefits 
+				of metadata access and compile-time safety then you really should give Empire-db a go.</p>
+			<p> Note: If you feel that any of the criticism we made about Hibernate is without reason please let us know.
+				E-mail: <a id="mail_comment"><img style="vertical-align: bottom;padding-top:2px" src="../images/mail/empire-comment.gif" alt="" /></a></p>
+				
+			<script type="text/javascript">
+				new MailLink( 'mail_comment', 'comment', 'empire-db.org' );
+			</script>
+			<!-- #EndEditable --></div>
+					
+			<div id="nav">
+				<hr />
+				<div id="nav_prev">
+					<a id="prev" href=""><img src="../images/prev.gif" alt="" /> Previous Page</a> 
+					&nbsp;
+				</div>
+				<div id="nav_next">
+					&nbsp;
+					<a id="next" href="">Next Page 
+					<img src="../images/next.gif" alt="" /></a>
+				</div>
+				<div style="clear: both;"></div>
+			</div>
+			
+			<script type="text/javascript">
+			/* <![CDATA[ */
+				if( ( typeof(prev_page) == "undefined" || prev_page == "" ) &&
+					( typeof(next_page) == "undefined" || next_page == "" ) ) 
+				{
+					$( 'nav' ).hide();
+				}
+				else 
+				{			
+					if( typeof(prev_page) != "undefined" && prev_page != "" ) {
+						$( 'prev' ).href = prev_page;
+						$( 'prev' ).show();
+					}
+					else {
+						$( 'prev' ).hide();
+					}
+					
+					if( typeof(next_page) != "undefined" && next_page !="" ) {
+						$( 'next' ).href = next_page;
+						$( 'next' ).show();
+					}
+					else {
+						$( 'next' ).hide();
+					}
+				}
+			/* ]]> */
+			</script>
+
+		</div>
+
+	</div>
+	
+	<!-- Footer -->		
+	<div id="footer">
+		<small>Copyright &copy; 2008, The Apache Software Foundation</small>&nbsp;<!--<p style="padding-right: 25px; text-align: right;">
+	    <a href="http://validator.w3.org/check?uri=referer">
+		<img
+	        src="images/valid-xhtml10.png"
+	        alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+	 	</p>--></div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

Propchange: incubator/empire-db/site/empiredb/hibernate.htm
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/empire-db/site/empiredb/metadata.htm
URL: http://svn.apache.org/viewvc/incubator/empire-db/site/empiredb/metadata.htm?rev=681719&view=auto
==============================================================================
--- incubator/empire-db/site/empiredb/metadata.htm (added)
+++ incubator/empire-db/site/empiredb/metadata.htm Fri Aug  1 08:15:26 2008
@@ -0,0 +1,246 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" >
+<!-- #BeginTemplate "../main.dwt" -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="language" content="en" />
+	<meta name="robots" content="index, follow" />
+	<meta name="keywords" content="java, jar, jdbc, sql, data, metadata, persistence, rdbms, orm, mapping" />
+	<meta name="description" content="Open Source relational data persistence component." />
+	
+	<!-- #BeginEditable "doctitle" -->
+<title>Empire-db - Handling Data and Metadata</title>
+	<!-- #EndEditable -->
+	
+	<script type="text/javascript" src="../js/prototype.js"></script>
+	<script type="text/javascript" src="../js/menu.js"></script>
+	<!-- #BeginEditable "javascripts" -->
+	<!-- #EndEditable -->
+	
+	<link rel="shortcut icon" href="../empire-db.ico" />
+	<link rel="stylesheet" href="../css/layout.css" type="text/css" />
+	<!-- #BeginEditable "stylesheets" -->
+	<!-- #EndEditable -->
+</head>
+
+<body>
+<div id="wrapper">
+
+	<!-- Header -->
+	<div id="header">
+		<div id="logo">
+			<img src="../images/logos/empire-db-logo.gif" alt="Empire-db: The relational data persistence component." />
+		</div>
+		<div id="asf">
+			<a target="_blank" href="http://incubator.apache.org/">
+			<img src="../images/logos/apache-incubator-logo.png" alt="Apache Incubator" /></a>
+		</div>
+		<div style="clear:both"></div>
+	</div>
+	
+	<!-- Top -->
+	<div id="top">
+		<div id="topbar">&nbsp;</div>
+	</div>
+	
+	<!-- Middle -->
+	<div id="middle">
+		<div id="left">    
+				<div id="menuBox">     
+					<ul id="mainMenu">
+						<li id="menu_home"><a href="../index.html">Home</a></li>
+						<li id="menu_news"><a href="../news.htm">News</a></li>
+						<li id="menu_empiredb"><a href="empiredb.htm">Empire-db</a>
+								<ul class="subMenu">
+									<li id="menu_empiredb_extending_pattern">
+									<a href="pattern.htm">The Empire DAO-<br />pattern</a></li>
+									<li id="menu_empiredb_handling_metadata">
+									<a href="metadata.htm">Handling data and metadata</a></li>
+									<li id="menu_empiredb_wrong">
+									<a href="hibernate.htm">What's wrong with Hibernate and JPA</a></li>
+									<li id="menu_empiredb_stringfree">
+									<a href="stringfree.htm">The principle of<br/>string-free coding</a></li>
+									<li id="menu_empiredb_faq">
+									<a href="faq.htm">FAQ</a></li>
+								</ul>
+						</li>
+						<li id="menu_struts2ext">
+						<a href="../struts2ext/struts2ext.htm">Empire-db and Struts2</a>
+							<ul class="subMenu">
+								<li id="menu_struts2ext_forms_controls">
+								<a href="../struts2ext/forms_controls.htm">Forms and controls</a></li>
+								<li id="menu_struts2ext_rendering_parsing">
+								<a href="../struts2ext/rendering_parsing.htm">Rendering and parsing</a></li>
+								<!--<li id="menu_struts2ext_tag_reference"><a href="struts2ext/tag_reference.htm">Tag reference</a></li>-->
+								<li id="menu_struts2ext_input_controls">
+								<a href="../struts2ext/input_controls.htm">Input controls</a></li>
+							</ul>
+						</li>
+						<li id="menu_downloads">
+						<a href="../downloads/downloads.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_license">
+									<a href="../downloads/license.htm">License</a></li>
+								</ul>
+						</li>
+						<li id="menu_documentation">
+						<a href="../documentation/documentation.htm">Documentation</a>					
+							<ul class="subMenu">
+								<li id="menu_documentation_class_overview">
+								<a href="../documentation/class_overview.htm">Empire-db class<br />overview</a></li>
+								<li id="menu_documentation_tutorials">
+								<a href="../documentation/tutorial.htm">Tutorial</a></li>
+								<li id="menu_documentation_getting_started">
+								<a href="../documentation/getting_started.htm">Getting started</a></li>
+								<li id="menu_documentation_api">
+								<a href="../documentation/api.htm">API</a></li>
+							</ul>
+						</li>
+						<li id="menu_community">
+						<a href="../community/community.htm">Community</a>					
+							<ul class="subMenu">
+								<li id="menu_community_mailing_lists">
+								<a href="../community/mailing_lists.htm">Mailing lists</a></li>
+								<!--<li id="menu_community_source_code"><a href="community/source_code.htm">Source code</a></li>-->
+								<li id="menu_community_jira">
+								<a href="../community/jira.htm">Ticketing system</a></li>
+								<!--<li id="menu_community_road_map"><a href="community/road_map.htm">Road map</a></li>-->
+								<li id="menu_community_contributors">
+								<a href="../community/contributors.htm">Contributors</a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="../disclaimer.htm">Disclaimer</a></li>
+					</ul>
+				</div>
+				
+		</div>
+	
+		<!-- #BeginEditable "menu" -->	
+	<script type="text/javascript">
+		var menu = new Menu( 'mainMenu', 'menu_empiredb', 'menu_empiredb_handling_metadata' );
+		var prev_page = "pattern.htm";
+		var next_page = "hibernate.htm";
+	</script>
+		<!-- #EndEditable -->
+		<script type="text/javascript">
+			/* <![CDATA[ */
+			if( menu ) {
+				// Menu fully opened (comment out if not wanted)
+				// menu.openAll();
+			/* ]]> */
+			}
+		</script>
+	
+		<div id="main">		
+			
+			<div id="pathway">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; Handling data and metadata
+	        <!-- #EndEditable -->
+	        </div>
+			
+			<div id="content">
+			<!-- #BeginEditable "content" -->
+		<h1>Handling data and metadata</h1>
+		<p> Many persistence solutions are primarily designed for working with 
+		JavaBeans representing full database entities. For foreign key 
+		relationships the referenced objects are automatically loaded when 
+		needed to build an object hierarchy that directly reflects the data 
+		model. However in many cases it is neither desirable nor necessary to 
+		work with full entities. Relational databases are extremely efficient 
+		when it comes to combining individual columns joined and gathered from 
+		various tables, sometimes even transformed or calculated. In most cases this result is used 
+			merely for display and selection purposes and thus does not require updating the individual rows.</p>
+		<p> With Empire-db both working with full database entities and working with 
+		complex and varying query results are equally well 
+			supported. Consequently Empire-db distinguishes between read only data and full entity records which are 
+			updateable. This however does not only affect access to data but also metadata access, since for updateable data more 
+			meta information is required. Hence the distinction is also made on the metadata side distinguishing a column 
+			expression for read only data and a full column for updateable data.</p>		
+		<p> For implementing this behavior Empire-db offers four interfaces: two each for data and metadata access and two 
+			each for read only and updatable data. Note that these interfaces are not limited to relational databases and 
+			might as well be used for other data sources. The following matrix shows the four interfaces and their 
+			relationships:</p>
+		<img style="display: block; margin: auto;" src="../images/diagrams/empire-data-interfaces.gif" alt="" />
+		<p> In Empire-db terms the Record is the thing that holds the data and the 
+		Column the thing that holds the metadata. 
+			For data access Empire-db distinguishes between record data which is read only and possibly the result of any SQL 
+			query and a full entity record which is returned by a Data Access Object (i.e. a table or a view). Accordingly 
+			it distinguishes between a column expression which provides display metadata for displaying a value and a full 
+			featured column which also provides information required for data input.</p>			
+		<p> When working with Empire-db you will notice the following classes implementing these interfaces:</p>
+		<table style="margin-bottom: 10px;">
+			<thead><tr><th>Interface</th><th>
+				<p align="left">Implementations provided by Empire-db</th></tr></thead>		
+			<tbody>
+				<tr><td>RecordData</td><td>DBRecordData(abstract), DBReader</td></tr>			
+				<tr><td>Record</td><td>DBRecord</td></tr>
+				<tr><td>ColumnExpr</td><td>DBColumnExpr (abstract), DBAliasExpr, DBConcatExpr, DBFuncExpr, 
+					etc...</td></tr>
+				<tr><td>Column</td><td>DBColumn (abstract), DBTableColumn, DBViewColumn</td></tr>
+			</tbody>
+		</table>
+			<p> Besides those implementations you are free to use these 
+			interfaces for your own objects and provide your own implementation.</p>
+			<!-- #EndEditable --></div>
+					
+			<div id="nav">
+				<hr />
+				<div id="nav_prev">
+					<a id="prev" href=""><img src="../images/prev.gif" alt="" /> Previous Page</a> 
+					&nbsp;
+				</div>
+				<div id="nav_next">
+					&nbsp;
+					<a id="next" href="">Next Page 
+					<img src="../images/next.gif" alt="" /></a>
+				</div>
+				<div style="clear: both;"></div>
+			</div>
+			
+			<script type="text/javascript">
+			/* <![CDATA[ */
+				if( ( typeof(prev_page) == "undefined" || prev_page == "" ) &&
+					( typeof(next_page) == "undefined" || next_page == "" ) ) 
+				{
+					$( 'nav' ).hide();
+				}
+				else 
+				{			
+					if( typeof(prev_page) != "undefined" && prev_page != "" ) {
+						$( 'prev' ).href = prev_page;
+						$( 'prev' ).show();
+					}
+					else {
+						$( 'prev' ).hide();
+					}
+					
+					if( typeof(next_page) != "undefined" && next_page !="" ) {
+						$( 'next' ).href = next_page;
+						$( 'next' ).show();
+					}
+					else {
+						$( 'next' ).hide();
+					}
+				}
+			/* ]]> */
+			</script>
+
+		</div>
+
+	</div>
+	
+	<!-- Footer -->		
+	<div id="footer">
+		<small>Copyright &copy; 2008, The Apache Software Foundation</small>&nbsp;<!--<p style="padding-right: 25px; text-align: right;">
+	    <a href="http://validator.w3.org/check?uri=referer">
+		<img
+	        src="images/valid-xhtml10.png"
+	        alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+	 	</p>--></div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

Propchange: incubator/empire-db/site/empiredb/metadata.htm
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: incubator/empire-db/site/empiredb/pattern.htm
URL: http://svn.apache.org/viewvc/incubator/empire-db/site/empiredb/pattern.htm?rev=681719&view=auto
==============================================================================
--- incubator/empire-db/site/empiredb/pattern.htm (added)
+++ incubator/empire-db/site/empiredb/pattern.htm Fri Aug  1 08:15:26 2008
@@ -0,0 +1,250 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" >
+<!-- #BeginTemplate "../main.dwt" -->
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta http-equiv="language" content="en" />
+	<meta name="robots" content="index, follow" />
+	<meta name="keywords" content="java, jar, jdbc, sql, data, metadata, persistence, rdbms, orm, mapping" />
+	<meta name="description" content="Open Source relational data persistence component." />
+	
+	<!-- #BeginEditable "doctitle" -->
+<title>Empire-db - The Empire DAO-Pattern</title>
+	<!-- #EndEditable -->
+	
+	<script type="text/javascript" src="../js/prototype.js"></script>
+	<script type="text/javascript" src="../js/menu.js"></script>
+	<!-- #BeginEditable "javascripts" -->
+	<!-- #EndEditable -->
+	
+	<link rel="shortcut icon" href="../empire-db.ico" />
+	<link rel="stylesheet" href="../css/layout.css" type="text/css" />
+	<!-- #BeginEditable "stylesheets" -->
+	<!-- #EndEditable -->
+</head>
+
+<body>
+<div id="wrapper">
+
+	<!-- Header -->
+	<div id="header">
+		<div id="logo">
+			<img src="../images/logos/empire-db-logo.gif" alt="Empire-db: The relational data persistence component." />
+		</div>
+		<div id="asf">
+			<a target="_blank" href="http://incubator.apache.org/">
+			<img src="../images/logos/apache-incubator-logo.png" alt="Apache Incubator" /></a>
+		</div>
+		<div style="clear:both"></div>
+	</div>
+	
+	<!-- Top -->
+	<div id="top">
+		<div id="topbar">&nbsp;</div>
+	</div>
+	
+	<!-- Middle -->
+	<div id="middle">
+		<div id="left">    
+				<div id="menuBox">     
+					<ul id="mainMenu">
+						<li id="menu_home"><a href="../index.html">Home</a></li>
+						<li id="menu_news"><a href="../news.htm">News</a></li>
+						<li id="menu_empiredb"><a href="empiredb.htm">Empire-db</a>
+								<ul class="subMenu">
+									<li id="menu_empiredb_extending_pattern">
+									<a href="pattern.htm">The Empire DAO-<br />pattern</a></li>
+									<li id="menu_empiredb_handling_metadata">
+									<a href="metadata.htm">Handling data and metadata</a></li>
+									<li id="menu_empiredb_wrong">
+									<a href="hibernate.htm">What's wrong with Hibernate and JPA</a></li>
+									<li id="menu_empiredb_stringfree">
+									<a href="stringfree.htm">The principle of<br/>string-free coding</a></li>
+									<li id="menu_empiredb_faq">
+									<a href="faq.htm">FAQ</a></li>
+								</ul>
+						</li>
+						<li id="menu_struts2ext">
+						<a href="../struts2ext/struts2ext.htm">Empire-db and Struts2</a>
+							<ul class="subMenu">
+								<li id="menu_struts2ext_forms_controls">
+								<a href="../struts2ext/forms_controls.htm">Forms and controls</a></li>
+								<li id="menu_struts2ext_rendering_parsing">
+								<a href="../struts2ext/rendering_parsing.htm">Rendering and parsing</a></li>
+								<!--<li id="menu_struts2ext_tag_reference"><a href="struts2ext/tag_reference.htm">Tag reference</a></li>-->
+								<li id="menu_struts2ext_input_controls">
+								<a href="../struts2ext/input_controls.htm">Input controls</a></li>
+							</ul>
+						</li>
+						<li id="menu_downloads">
+						<a href="../downloads/downloads.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_license">
+									<a href="../downloads/license.htm">License</a></li>
+								</ul>
+						</li>
+						<li id="menu_documentation">
+						<a href="../documentation/documentation.htm">Documentation</a>					
+							<ul class="subMenu">
+								<li id="menu_documentation_class_overview">
+								<a href="../documentation/class_overview.htm">Empire-db class<br />overview</a></li>
+								<li id="menu_documentation_tutorials">
+								<a href="../documentation/tutorial.htm">Tutorial</a></li>
+								<li id="menu_documentation_getting_started">
+								<a href="../documentation/getting_started.htm">Getting started</a></li>
+								<li id="menu_documentation_api">
+								<a href="../documentation/api.htm">API</a></li>
+							</ul>
+						</li>
+						<li id="menu_community">
+						<a href="../community/community.htm">Community</a>					
+							<ul class="subMenu">
+								<li id="menu_community_mailing_lists">
+								<a href="../community/mailing_lists.htm">Mailing lists</a></li>
+								<!--<li id="menu_community_source_code"><a href="community/source_code.htm">Source code</a></li>-->
+								<li id="menu_community_jira">
+								<a href="../community/jira.htm">Ticketing system</a></li>
+								<!--<li id="menu_community_road_map"><a href="community/road_map.htm">Road map</a></li>-->
+								<li id="menu_community_contributors">
+								<a href="../community/contributors.htm">Contributors</a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="../disclaimer.htm">Disclaimer</a></li>
+					</ul>
+				</div>
+				
+		</div>
+	
+		<!-- #BeginEditable "menu" -->	
+	<script type="text/javascript">
+		var menu = new Menu( 'mainMenu', 'menu_empiredb', 'menu_empiredb_extending_pattern' );
+		var prev_page = "empiredb.htm";
+		var next_page = "metadata.htm";
+	</script>
+		<!-- #EndEditable -->
+		<script type="text/javascript">
+			/* <![CDATA[ */
+			if( menu ) {
+				// Menu fully opened (comment out if not wanted)
+				// menu.openAll();
+			/* ]]> */
+			}
+		</script>
+	
+		<div id="main">		
+			
+			<div id="pathway">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; The Empire DAO-Pattern
+	        <!-- #EndEditable -->
+	        </div>
+			
+			<div id="content">
+			<!-- #BeginEditable "content" -->
+		<h1>Extending the pattern</h1>
+		<p> Most business applications require access to data that is available from persistent storage and still SQL based relational database management systems (RDBMS) are the most popular type of storage. Access to relational 
+			database systems has been made available in Java through the JDBC 
+		interface for which all major database vendors 
+			provide an implementation. Although JDBC is simple to use on a low level, a lot of 
+		hand work is required to 
+			efficiently manage data transfer from and to business objects. </p>			
+		<p>	Over the years several components have evolved, which extend JDBC in 
+		order to simplify data transfer and handling as well as making code independent from the underlying database system's SQL dialect. For the basic principle by which 
+			such persistence solutions may work, Sun has defined a pattern that describes how to use a Data Access Object 
+			(DAO) to abstract and encapsulate all access to the data source: 
+			<a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html">the Data Access Object (DAO) pattern</a>.</p>
+		<p> However, the DAO pattern, as well as most of the popular persistence components such as Hibernate, only focuses on data. But we 
+			think that in most cases only about 5 to 10% of all entity attributes are required for the implementation of application 
+			logic. The rest is merely transferred from the database to the client – e.g. a user 
+		interface - and vice versa.<br />
+			On the other hand, metadata like e.g. value precision, maximum field size or whether a 
+		field is mandatory or not, 
+			is often necessary for data display, input and validation. Without metadata management such information is usually 
+			split and repeated across all application layers. With the provision of metadata these redundancies are reduced which 
+			in turn simplifies development and reduces the amount of testing required.</p>	
+		<p> Empire-db has been designed from ground up to deal with data and metadata. For metadata support Empire-db extends the 
+			<a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html">traditional Data Access 
+			Object (DAO) pattern</a> introducing a new <strong>Data Info Object (DIO)</strong>. The DIO is a container for all 
+			metadata related to a particular entity attribute. Special support has been added for common data model and 
+		some view 
+			specific metadata attributes but you may also add your own.</p>
+		
+		<p> This is what Empire-db’s extended DAO pattern looks like:</p>
+		<img style="display: block; margin: auto;" src="../images/diagrams/dao_pattern.gif" alt="" />
+		
+		<p> Apart from the Data Info Object there are two more noticeable differences to
+			<a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html">classic DAO pattern</a>:</p>
+		<ol>
+			<li><b>Empire-db works with dynamic rather than static JavaBeans.</b><br />
+				Dynamic beans do not have a getter and setter for every single property like normal JavaBeans. 
+				Instead one generic getter and setter is used which takes the desired field as a parameter. In order 
+				to be type-safe Empire-db uses a column object reference instead of a string to address the requested attribute.<br />
+				As an advantage it is not necessary to change the entity bean when adding new attributes in the data model 
+				and you may easily override the getter and setter for generic processing.</li>
+			<li><b>The Empire-db Data Access Object only uses the data objects and does not create them.</b><br />
+			    The idea is that you may extend your data objects and implement entity specific logic. So instead of 
+			    transferring and copying all data fields to your business objects you may as well use them directly in or as 
+			    your business objects.</li>
+		</ol>
+			<!-- #EndEditable --></div>
+					
+			<div id="nav">
+				<hr />
+				<div id="nav_prev">
+					<a id="prev" href=""><img src="../images/prev.gif" alt="" /> Previous Page</a> 
+					&nbsp;
+				</div>
+				<div id="nav_next">
+					&nbsp;
+					<a id="next" href="">Next Page 
+					<img src="../images/next.gif" alt="" /></a>
+				</div>
+				<div style="clear: both;"></div>
+			</div>
+			
+			<script type="text/javascript">
+			/* <![CDATA[ */
+				if( ( typeof(prev_page) == "undefined" || prev_page == "" ) &&
+					( typeof(next_page) == "undefined" || next_page == "" ) ) 
+				{
+					$( 'nav' ).hide();
+				}
+				else 
+				{			
+					if( typeof(prev_page) != "undefined" && prev_page != "" ) {
+						$( 'prev' ).href = prev_page;
+						$( 'prev' ).show();
+					}
+					else {
+						$( 'prev' ).hide();
+					}
+					
+					if( typeof(next_page) != "undefined" && next_page !="" ) {
+						$( 'next' ).href = next_page;
+						$( 'next' ).show();
+					}
+					else {
+						$( 'next' ).hide();
+					}
+				}
+			/* ]]> */
+			</script>
+
+		</div>
+
+	</div>
+	
+	<!-- Footer -->		
+	<div id="footer">
+		<small>Copyright &copy; 2008, The Apache Software Foundation</small>&nbsp;<!--<p style="padding-right: 25px; text-align: right;">
+	    <a href="http://validator.w3.org/check?uri=referer">
+		<img
+	        src="images/valid-xhtml10.png"
+	        alt="Valid XHTML 1.0 Transitional" height="31" width="88" /></a>
+	 	</p>--></div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

Propchange: incubator/empire-db/site/empiredb/pattern.htm
------------------------------------------------------------------------------
    svn:mime-type = text/plain