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 do...@apache.org on 2022/03/14 20:41:27 UTC

svn commit: r1898936 [7/14] - in /empire-db/site: ./ build/ build/css/ build/js/ community/ css/ documentation/ downloads/ empiredb/ images/ javadocs/ js/ legacy/ legacy/community/ legacy/css/ legacy/documentation/ legacy/downloads/ legacy/empiredb/ le...

Added: empire-db/site/legacy/empiredb/hibernate.htm
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/empiredb/hibernate.htm?rev=1898936&view=auto
==============================================================================
--- empire-db/site/legacy/empiredb/hibernate.htm (added)
+++ empire-db/site/legacy/empiredb/hibernate.htm Mon Mar 14 20:41:26 2022
@@ -0,0 +1,409 @@
+<!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:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml" >
+<!-- #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 id="asfhome" target="_blank" href="https://www.apache.org"><img src="../images/logos/feather-small.gif" alt="The Apache Software Foundation" /></a>
+			<label for="asfhome" >The Apache Software Foundation</label>
+		</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/latest.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_previous"><a href="../downloads/previous.htm">Previous releases</a></li>
+									<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_reverse_engineering"><a href="../documentation/reverse_engineering.htm">Reverse Engineering</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 &amp; Wiki</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_apache"><a href="../apache.htm">About Apache</a>
+							<ul class="subMenu">
+								<li id="menu_apache_home"><a href="https://www.apache.org">Apache home<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_donate"><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_thanks"><a href="https://www.apache.org/foundation/thanks.html">Foundation thanks<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_security"><a href="https://www.apache.org/security/">Security<span class="asflink">&nbsp;</span></a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="https://www.apache.org/licenses/">License<span class="asflink">&nbsp;</span></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">
+				<span style="float:left">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; What's wrong with Hibernate and JPA
+	        <!-- #EndEditable -->
+	        	</span>
+		     	<a id="downloadLink" href="../downloads/latest.htm" style="float:right">Download</a>
+	        </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="https://www.hibernate.org/subprojects/validator.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">
+		<div class="cr"><small>Copyright &copy; 2008-2021, The Apache Software Foundation</small></div>
+		<div class="tm"><small>Apache Empire-db, Empire-db, Apache, the Apache feather logo, and the Apache Empire-db project logo are trademarks of The Apache Software Foundation</small></div>
+	</div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

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

Added: empire-db/site/legacy/empiredb/metadata.htm
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/empiredb/metadata.htm?rev=1898936&view=auto
==============================================================================
--- empire-db/site/legacy/empiredb/metadata.htm (added)
+++ empire-db/site/legacy/empiredb/metadata.htm Mon Mar 14 20:41:26 2022
@@ -0,0 +1,235 @@
+<!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 id="asfhome" target="_blank" href="https://www.apache.org"><img src="../images/logos/feather-small.gif" alt="The Apache Software Foundation" /></a>
+			<label for="asfhome" >The Apache Software Foundation</label>
+		</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/latest.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_previous"><a href="../downloads/previous.htm">Previous releases</a></li>
+									<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_reverse_engineering"><a href="../documentation/reverse_engineering.htm">Reverse Engineering</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 &amp; Wiki</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_apache"><a href="../apache.htm">About Apache</a>
+							<ul class="subMenu">
+								<li id="menu_apache_home"><a href="https://www.apache.org">Apache home<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_donate"><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_thanks"><a href="https://www.apache.org/foundation/thanks.html">Foundation thanks<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_security"><a href="https://www.apache.org/security/">Security<span class="asflink">&nbsp;</span></a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="https://www.apache.org/licenses/">License<span class="asflink">&nbsp;</span></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">
+				<span style="float:left">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; Handling data and metadata
+	        <!-- #EndEditable -->
+	        	</span>
+		     	<a id="downloadLink" href="../downloads/latest.htm" style="float:right">Download</a>
+	        </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">
+		<div class="cr"><small>Copyright &copy; 2008-2021, The Apache Software Foundation</small></div>
+		<div class="tm"><small>Apache Empire-db, Empire-db, Apache, the Apache feather logo, and the Apache Empire-db project logo are trademarks of The Apache Software Foundation</small></div>
+	</div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

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

Added: empire-db/site/legacy/empiredb/pattern.htm
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/empiredb/pattern.htm?rev=1898936&view=auto
==============================================================================
--- empire-db/site/legacy/empiredb/pattern.htm (added)
+++ empire-db/site/legacy/empiredb/pattern.htm Mon Mar 14 20:41:26 2022
@@ -0,0 +1,239 @@
+<!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 id="asfhome" target="_blank" href="https://www.apache.org"><img src="../images/logos/feather-small.gif" alt="The Apache Software Foundation" /></a>
+			<label for="asfhome" >The Apache Software Foundation</label>
+		</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/latest.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_previous"><a href="../downloads/previous.htm">Previous releases</a></li>
+									<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_reverse_engineering"><a href="../documentation/reverse_engineering.htm">Reverse Engineering</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 &amp; Wiki</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_apache"><a href="../apache.htm">About Apache</a>
+							<ul class="subMenu">
+								<li id="menu_apache_home"><a href="https://www.apache.org">Apache home<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_donate"><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_thanks"><a href="https://www.apache.org/foundation/thanks.html">Foundation thanks<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_security"><a href="https://www.apache.org/security/">Security<span class="asflink">&nbsp;</span></a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="https://www.apache.org/licenses/">License<span class="asflink">&nbsp;</span></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">
+				<span style="float:left">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; The Empire DAO-Pattern
+	        <!-- #EndEditable -->
+	        	</span>
+		     	<a id="downloadLink" href="../downloads/latest.htm" style="float:right">Download</a>
+	        </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="https://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="https://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="https://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">
+		<div class="cr"><small>Copyright &copy; 2008-2021, The Apache Software Foundation</small></div>
+		<div class="tm"><small>Apache Empire-db, Empire-db, Apache, the Apache feather logo, and the Apache Empire-db project logo are trademarks of The Apache Software Foundation</small></div>
+	</div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

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

Added: empire-db/site/legacy/empiredb/stringfree.htm
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/empiredb/stringfree.htm?rev=1898936&view=auto
==============================================================================
--- empire-db/site/legacy/empiredb/stringfree.htm (added)
+++ empire-db/site/legacy/empiredb/stringfree.htm Mon Mar 14 20:41:26 2022
@@ -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 principle of string-free coding</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 id="asfhome" target="_blank" href="https://www.apache.org"><img src="../images/logos/feather-small.gif" alt="The Apache Software Foundation" /></a>
+			<label for="asfhome" >The Apache Software Foundation</label>
+		</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/latest.htm">Downloads</a>
+								<ul class="subMenu">
+									<li id="menu_downloads_previous"><a href="../downloads/previous.htm">Previous releases</a></li>
+									<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_reverse_engineering"><a href="../documentation/reverse_engineering.htm">Reverse Engineering</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 &amp; Wiki</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_apache"><a href="../apache.htm">About Apache</a>
+							<ul class="subMenu">
+								<li id="menu_apache_home"><a href="https://www.apache.org">Apache home<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_donate"><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_thanks"><a href="https://www.apache.org/foundation/thanks.html">Foundation thanks<span class="asflink">&nbsp;</span></a></li>
+								<li id="menu_apache_security"><a href="https://www.apache.org/security/">Security<span class="asflink">&nbsp;</span></a></li>
+							</ul>
+						</li>
+						<li id="menu_disclaimer"><a href="https://www.apache.org/licenses/">License<span class="asflink">&nbsp;</span></a></li>
+					</ul>
+				</div>
+				
+		</div>
+	
+		<!-- #BeginEditable "menu" -->	
+		<script type="text/javascript">
+			var menu = new Menu( 'mainMenu', 'menu_empiredb', 'menu_empiredb_stringfree' );
+			var prev_page = "hibernate.htm";
+			var next_page = "faq.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">
+				<span style="float:left">
+			<!-- #BeginEditable "pathway" -->
+	        	<a href="empiredb.htm">Empire-db</a> &raquo; The principle of string-free coding
+	        <!-- #EndEditable -->
+	        	</span>
+		     	<a id="downloadLink" href="../downloads/latest.htm" style="float:right">Download</a>
+	        </div>
+			
+			<div id="content">
+			<!-- #BeginEditable "content" -->
+			<h1>The principle of string-free coding</h1>
+			<p> We believe that for the issue of code quality, string literals are the root of all evil. 
+				In data persistence string literals are often used to specify property names or even whole 
+				SQL fragments. This makes code harder to develop and even harder to maintain and can only 
+				be balanced through extensive and expensive testing.</p>
+			<p> We further believe that the most powerful tool for detecting and revealing errors is your 
+				compiler. Thus we think that no XML files should be used and code should be written in a 
+				way that gives the compiler the opportunity of performing this task as good as possible. 
+				In practice this requires working with object references rather than string literals 
+				wherever possible.</p>
+			<p> For example instead of writing:</p>
+			<pre><span style="color: #000000; ">StringBuilder cmd </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #800080; ">new</span><span style="color: #000000; "> StringBuilder();
+...
+cmd.append(</span><span style="color: #000000; ">&quot;</span><font color="#0000FF">employee.lastname</font><font color="#0000FF"> like '</font><span style="color: #000000; ">&quot;</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> name </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">&quot;</span><span style="color: #0000FF; ">%' </span><span style="color: #000000; ">&quot;</span><span style="color: #000000; ">);</span></pre>
+
+			<p> it should rather be somewhat like:</p>
+			<pre><span style="color: #000000; ">DBCommand cmd </span><span style="color: #000000; ">=</span><span style="color: #000000; "> db.createCommand();
+...
+cmd.where(</span><font color="#0000FF">EMPLOYEES.LASTNAME</font><span style="color: #000000; ">.like( name</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&quot;</span><span style="color: #0000FF; ">%</span><span style="color: #000000; ">&quot;</span><span style="color: #000000; "> ));</span></pre>
+			
+			<h1>Going beyond the persistence layer</h1>			
+			<p> But our objective is not only to stop using string literals in the persistence layer but 
+				all the way up to the presentation layer. This is especially hard for Web application development 
+				as it means avoiding string literals in JavaServer Pages as well, which in turn requires 
+				avoiding expression languages (EL). However it is possible. As an example consider a typical 
+				data driven Web application based on JavaServer Pages. With traditional Struts2 tags a particular 
+				property must be specified in the JSP as follows:</p>
+			<ol>
+				<li>For the list view when displaying a list of query results:<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:property </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;employee.lastname&quot;</span><span style="color: #0000FF; ">/&gt;</span></pre>
+				</li>
+				<li>In the form view when displaying an input control for the field:<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:textfield </span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">=&quot;employee.lastname&quot;</span><span style="color: #FF0000; "> size</span><span style="color: #0000FF; ">=&quot;40&quot;</span><span style="color: #FF0000; "> required</span><span style="color: #0000FF; ">=&quot;true&quot;</span><span style="color: #0000FF; ">/&gt;</span></pre>
+				</li>
+			</ol>
+			<p> Using object references this code can easily be written string-free as follows:</p>
+			<ol>
+				<li>For the list view when displaying a list of query results:<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">td</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">s:property </span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&quot;&lt;%= EMPLOYEES.LASTNAME.getName() %&gt;&quot;</span><span style="color: #0000FF; ">/&gt;&lt;/</span><span style="color: #800000; ">td</span><span style="color: #0000FF; ">&gt;</span></pre>
+					or even simpler using Empire-Struts2-Extensions:<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">td</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">e:value </span><span style="color: #FF0000; ">column</span><span style="color: #0000FF; ">=&quot;&lt;%= EMPLOYEES.LASTNAME %&gt;&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;&lt;/</span><span style="color: #800000; ">td</span><span style="color: #0000FF; ">&gt;</span></pre>
+				</li>
+				<li>In the form view when displaying an input control for the field:<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">s:textfield </span><span style="color: #FF0000; ">key</span><span style="color: #0000FF; ">=&quot;&lt;%= EMPLOYEES.LASTNAME.getName() %&gt;&quot;</span><span style="color: #FF0000; "> size</span><span style="color: #0000FF; ">=&quot;40&quot;</span><span style="color: #FF0000; "> 
+             required</span><span style="color: #0000FF; ">=&quot;true&quot;</span><span style="color: #0000FF; ">/&gt;</span></pre>
+					or again simpler using Empire-Struts2-Extensions:<pre><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">e:control </span><span style="color: #FF0000; ">column</span><span style="color: #0000FF; ">=&quot;&lt;%= EMPLOYEES.LASTNAME %&gt;&quot;</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/&gt;</span></pre>
+				</li>
+			</ol>
+			<p> With our unique Empire-Struts2-Extensions we also address the issue of form data validation in 
+				order to abolish the need for redundant and unsafe XML validation files. The same can be done 
+				for other applications frameworks – we’re waiting for your contribution.</p>
+			
+			<h1>Summary</h1>
+			<p> With Empire-db we proclaim the principle of string-free coding by using object references rather 
+				than string literals for both query definition and metadata access and from the persistence layer 
+			up to the presentation 
+				layer. In order to make this possible a consistent way to address properties and their meta information 
+				is required that goes beyond the requirements of data persistence. Empire-db’s 
+			object model schema definition in conjunction with its data and metadata 
+				interfaces provides such a mechanism. The result is unprecedented compile-time safety leading to reduced 
+				cost of testing and maintenance. </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">
+		<div class="cr"><small>Copyright &copy; 2008-2021, The Apache Software Foundation</small></div>
+		<div class="tm"><small>Apache Empire-db, Empire-db, Apache, the Apache feather logo, and the Apache Empire-db project logo are trademarks of The Apache Software Foundation</small></div>
+	</div>
+
+</div>
+
+</body>
+<!-- #EndTemplate -->
+</html>
\ No newline at end of file

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

Added: empire-db/site/legacy/images/Kopie von background.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/Kopie%20von%20background.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/Kopie von background.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/answer.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/answer.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/answer.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/asflink.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/asflink.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/asflink.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/background.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/background.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/background.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/background_red.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/background_red.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/background_red.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/bg.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/bg.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/bg.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/diagrams/dao_pattern.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/diagrams/dao_pattern.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/diagrams/dao_pattern.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/diagrams/empire-data-interfaces.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/diagrams/empire-data-interfaces.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/diagrams/empire-data-interfaces.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/diagrams/empire-db-class-chart.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/diagrams/empire-db-class-chart.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/diagrams/empire-db-class-chart.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/diagrams/function_of_input_control.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/diagrams/function_of_input_control.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/diagrams/function_of_input_control.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/diagrams/struts2-empire.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/diagrams/struts2-empire.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/diagrams/struts2-empire.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/diagrams/struts2-traditional.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/diagrams/struts2-traditional.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/diagrams/struts2-traditional.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/email.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/email.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/email.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/expand.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/expand.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/expand.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/key.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/key.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/key.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/logos/empire-db-logo.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/logos/empire-db-logo.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/logos/empire-db-logo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/logos/feather-small.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/logos/feather-small.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/logos/feather-small.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/mail/empire-bugs.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/mail/empire-bugs.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/mail/empire-bugs.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/mail/empire-comment.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/mail/empire-comment.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/mail/empire-comment.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/mail/empire-contribute.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/mail/empire-contribute.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/mail/empire-contribute.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/mail/empire-support.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/mail/empire-support.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/mail/empire-support.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/menu/menu_main.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/menu/menu_main.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/menu/menu_main.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/menu/menu_main_current.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/menu/menu_main_current.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/menu/menu_main_current.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/menu/menu_sub.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/menu/menu_sub.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/menu/menu_sub.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/menu/menu_sub_current.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/menu/menu_sub_current.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/menu/menu_sub_current.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/next.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/next.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/next.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/prev.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/prev.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/prev.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: empire-db/site/legacy/images/question.gif
URL: http://svn.apache.org/viewvc/empire-db/site/legacy/images/question.gif?rev=1898936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: empire-db/site/legacy/images/question.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream