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


Reply via email to