You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by bu...@apache.org on 2017/10/06 07:50:17 UTC

svn commit: r1019170 [38/42] - in /websites/staging/cayenne/trunk/content: ./ 2017/10/ doap/ docs/ docs/4.0/api/ docs/4.0/api/org/apache/cayenne/ docs/4.0/api/org/apache/cayenne/access/ docs/4.0/api/org/apache/cayenne/access/class-use/ docs/4.0/api/org...

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/cayenne-mapping-structure.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/cayenne-mapping-structure.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/cayenne-mapping-structure.html Fri Oct  6 07:49:44 2017
@@ -9,7 +9,7 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Chapter&nbsp;2.&nbsp;Cayenne Mapping Structure</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part1.html">Part&nbsp;I.&nbsp;Object Relational Mapping with Cayenne</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayennemodeler-application.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="cayenne-mapping-structure"></a>Chapter&nbsp;2.&nbsp;Cayenne Mapping Structure</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="cayenne-m
 apping-structure.html#cayenne-project">Cayenne Project</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#datamap">DataMap</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#datanode">DataNode</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#dbentity">DbEntity</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#objentity">ObjEntity</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#embeddable">Embeddable</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#procedure">Procedure</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#query">Query</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="cayenne-project"></a>Cayenne Project</h2></div></div></div><p>A Cayenne project is an XML representation of a model connecting database
  schema with
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;2.&nbsp;Cayenne Mapping Structure</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part1.html">Part&nbsp;I.&nbsp;Object Relational Mapping with Cayenne</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayennemodeler-application.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="cayenne-mapping-structure"></a>Chapter&nbsp;2.&nbsp;Cayenne Mapping Structure</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="cayenne-m
 apping-structure.html#cayenne-project">Cayenne Project</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#datamap">DataMap</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#datanode">DataNode</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#dbentity">DbEntity</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#objentity">ObjEntity</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#embeddable">Embeddable</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#procedure">Procedure</a></span></dt><dt><span class="section"><a href="cayenne-mapping-structure.html#query">Query</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="cayenne-project"></a>Cayenne Project</h2></div></div></div><p>A Cayenne project is an XML representation of a model connecting database
  schema with
             Java classes. A project is normally created and manipulated via CayenneModeler GUI and
             then used to initialize Cayenne runtime. A project is made of one or more files. There's
             always a root project descriptor file in any valid project. It is normally called

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/cayennemodeler-application.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/cayennemodeler-application.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/cayennemodeler-application.html Fri Oct  6 07:49:44 2017
@@ -9,7 +9,7 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Chapter&nbsp;3.&nbsp;CayenneModeler Application</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cayenne-mapping-structure.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part1.html">Part&nbsp;I.&nbsp;Object Relational Mapping with Cayenne</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part2.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="cayennemodeler-application"></a>Chapter&nbsp;3.&nbsp;CayenneModeler Application</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a
  href="cayennemodeler-application.html#working-with-mapping-projects">Working with Mapping Projects</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#reverse-engineering-database">Reverse Engineering Database</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#generating-database-schema">Generating Database Schema</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#migrations">Migrations</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#generating-java-classes">Generating Java Classes</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#modeling-inheritance">Modeling Inheritance</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#modeling-generic-persistence-classes">Modeling Generic Persistent Classes</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#mapping-objattribute
 s-to-custom-classes">Mapping ObjAttributes to Custom Classes</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#modeling-pk-generation-strategy">Modeling Primary Key Generation Strategy</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="working-with-mapping-projects"></a>Working with Mapping Projects</h2></div></div></div><p></p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="reverse-engineering-database"></a>Reverse Engineering Database</h2></div></div></div><p>
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;3.&nbsp;CayenneModeler Application</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cayenne-mapping-structure.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part1.html">Part&nbsp;I.&nbsp;Object Relational Mapping with Cayenne</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part2.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="cayennemodeler-application"></a>Chapter&nbsp;3.&nbsp;CayenneModeler Application</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a
  href="cayennemodeler-application.html#working-with-mapping-projects">Working with Mapping Projects</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#reverse-engineering-database">Reverse Engineering Database</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#generating-database-schema">Generating Database Schema</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#migrations">Migrations</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#generating-java-classes">Generating Java Classes</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#modeling-inheritance">Modeling Inheritance</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#modeling-generic-persistence-classes">Modeling Generic Persistent Classes</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#mapping-objattribute
 s-to-custom-classes">Mapping ObjAttributes to Custom Classes</a></span></dt><dt><span class="section"><a href="cayennemodeler-application.html#modeling-pk-generation-strategy">Modeling Primary Key Generation Strategy</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="working-with-mapping-projects"></a>Working with Mapping Projects</h2></div></div></div><p></p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="reverse-engineering-database"></a>Reverse Engineering Database</h2></div></div></div><p>
             See chapter <a class="link" href="re-modeler.html" title="Chapter&nbsp;22.&nbsp;Reverse Engineering in Cayenne Modeler">Reverse Engineering in Cayenne Modeler</a>
         </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="generating-database-schema"></a>Generating Database Schema</h2></div></div></div><p>
             With Cayenne Modeler you can create simple database schemas without any additional database tools.

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/configuration-properties.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/configuration-properties.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/configuration-properties.html Fri Oct  6 07:49:44 2017
@@ -1,6 +1,6 @@
 <html><head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-   <title xmlns:d="http://docbook.org/ns/docbook">Appendix&nbsp;A.&nbsp;Configuration Properties</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="index.html" title="Cayenne Guide"><link rel="prev" href="re-modeler.html" title="Chapter&nbsp;22.&nbsp;Reverse Engineering in Cayenne Modeler"><link rel="next" href="service-collections.html" title="Appendix&nbsp;B.&nbsp;Service Collections"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
+   <title xmlns:d="http://docbook.org/ns/docbook">Appendix&nbsp;A.&nbsp;Configuration Properties</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="index.html" title="Cayenne Guide"><link rel="prev" href="ext-joda.html" title="Chapter&nbsp;29.&nbsp;Joda time extension"><link rel="next" href="service-collections.html" title="Appendix&nbsp;B.&nbsp;Service Collections"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-7036673-1']);
   _gaq.push(['_trackPageview']);
@@ -9,9 +9,9 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Appendix&nbsp;A.&nbsp;Configuration Properties</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="re-modeler.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="service-collections.html">Next</a></td></tr></table><hr></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="configuration-properties"></a>Appendix&nbsp;A.&nbsp;Configuration Properties</h1></div></div></div><p>Note that the property names below are defined as constants in
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Appendix&nbsp;A.&nbsp;Configuration Properties</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-joda.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="service-collections.html">Next</a></td></tr></table><hr></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="configuration-properties"></a>Appendix&nbsp;A.&nbsp;Configuration Properties</h1></div></div></div><p>Note that the property names below are defined as constants in
             <code class="code">org.apache.cayenne.configuration.Constants</code> interface. </p><p>
-        </p><div class="table"><a name="d0e3820"></a><p class="title"><b>Table&nbsp;A.1.&nbsp;Configuration Properties Recognized by ServerRuntime and/or ClientRuntime</b></p><div class="table-contents"><table frame="void"><col width="67%"><col width="15%"><col width="18%"><thead><tr>
+        </p><div class="table"><a name="d0e4506"></a><p class="title"><b>Table&nbsp;A.1.&nbsp;Configuration Properties Recognized by ServerRuntime and/or ClientRuntime</b></p><div class="table-contents"><table frame="void"><col width="67%"><col width="15%"><col width="18%"><thead><tr>
                     <th>Property</th>
                     <th>Possible Values</th>
                     <th>Default Value</th>
@@ -147,4 +147,4 @@
                     <td></td>
                     <td></td>
                 </tr></tbody></table></div></div><p><br class="table-break">
-    </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="re-modeler.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="service-collections.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;22.&nbsp;Reverse Engineering in Cayenne Modeler&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;B.&nbsp;Service Collections</td></tr></table></div></body></html>
\ No newline at end of file
+    </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext-joda.html">Prev</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="service-collections.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;29.&nbsp;Joda time extension&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Appendix&nbsp;B.&nbsp;Service Collections</td></tr></table></div></body></html>
\ No newline at end of file

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/current-limitations.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/current-limitations.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/current-limitations.html Fri Oct  6 07:49:44 2017
@@ -9,4 +9,4 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Chapter&nbsp;18.&nbsp;Current Limitations</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rop-deployment.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence </a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part4.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="current-limitations"></a>Chapter&nbsp;18.&nbsp;Current Limitations</h2></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left
 "><a accesskey="p" href="rop-deployment.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part4.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;17.&nbsp;ROP Deployment&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;IV.&nbsp;DB-First Flow</td></tr></table></div></body></html>
\ No newline at end of file
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;18.&nbsp;Current Limitations</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rop-deployment.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence </a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part4.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="current-limitations"></a>Chapter&nbsp;18.&nbsp;Current Limitations</h2></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left
 "><a accesskey="p" href="rop-deployment.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part3.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part4.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;17.&nbsp;ROP Deployment&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;IV.&nbsp;DB-First Flow</td></tr></table></div></body></html>
\ No newline at end of file

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html Fri Oct  6 07:49:44 2017
@@ -9,7 +9,7 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Chapter&nbsp;12.&nbsp;Customizing Cayenne Runtime</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="performance-tuning.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part2.html">Part&nbsp;II.&nbsp;Cayenne Framework</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part3.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="customizing-cayenne-runtime"></a>Chapter&nbsp;12.&nbsp;Customizing Cayenne Runtime</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="customizing-cay
 enne-runtime.html#depdendency-injection-container">Dependency Injection Container</a></span></dt><dt><span class="section"><a href="customizing-cayenne-runtime.html#ways-to-customize-runtime"> Customization Strategies</a></span></dt><dt><span class="section"><a href="customizing-cayenne-runtime.html#extendedtypes">Extended Types</a></span></dt><dt><span class="section"><a href="customizing-cayenne-runtime.html#noteworthy-runtime-components">Noteworthy Built-in Services</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="depdendency-injection-container"></a>Dependency Injection Container</h2></div></div></div><p>Cayenne runtime is built around a small powerful dependency injection (DI) container. Just
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;12.&nbsp;Customizing Cayenne Runtime</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="performance-tuning.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part2.html">Part&nbsp;II.&nbsp;Cayenne Framework</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part3.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="customizing-cayenne-runtime"></a>Chapter&nbsp;12.&nbsp;Customizing Cayenne Runtime</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="customizing-cay
 enne-runtime.html#depdendency-injection-container">Dependency Injection Container</a></span></dt><dt><span class="section"><a href="customizing-cayenne-runtime.html#ways-to-customize-runtime"> Customization Strategies</a></span></dt><dt><span class="section"><a href="customizing-cayenne-runtime.html#d0e3408">Using custom data types</a></span></dt><dt><span class="section"><a href="customizing-cayenne-runtime.html#noteworthy-runtime-components">Noteworthy Built-in Services</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="depdendency-injection-container"></a>Dependency Injection Container</h2></div></div></div><p>Cayenne runtime is built around a small powerful dependency injection (DI) container. Just
             like other popular DI technologies, such as Spring or Guice, Cayenne DI container
             manages sets of interdependent objects  and allows users to configure them. These
             objects are regular Java objects. We are calling them "services" in this document to
@@ -191,17 +191,76 @@ binder.bindList(DefaultDbAdapterFactory.
                 implementation of this service is provided by <code class="code">MapQueryCacheProvider</code>.
                 But if we want to use <code class="code">EhCacheQueryCache</code> (a Cayenne wrapper for the
                 EhCache framework), we can define it like
-                this:</p><pre class="programlisting">binder.bind(QueryCache.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>).to(EhCacheQueryCache.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>);</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="extendedtypes"></a>Extended Types</h2></div></div></div><p>JDBC specification defines a set of "standard" database column types (defined in java.sql.Types class)
-            and a very specific mapping of these types to Java Object Types, such as java.lang.String,
-            java.math.BigDecimal, etc. Sometimes there is a need to use a custom Java type not known to JDBC driver and
-            Cayenne allows to configure it. For this Cayenne needs to know how to instantiate this type from
-            a database "primitive" value, and conversely, how to transform an object of the custom type to
-            a JDBC-compatible object.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="supporting-non-standard-types"></a>Supporting Non-Standard Types</h3></div></div></div><p>For supporting non-standard type you should define it via an interface <code class="code">org.apache.cayenne.access.types.ExtendedType</code>.
-                An implementation must provide <code class="code">ExtendedType.getClassName()</code> method that returns
-                a fully qualified Java class name for the supported custom type, and a number of methods
-                that convert data between JDBC and custom type.
-                The following example demonstrates how to add a custom DoubleArrayType
-                to store java.lang.Double[] as a custom string in a database:</p><pre class="programlisting">
+                this:</p><pre class="programlisting">binder.bind(QueryCache.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>).to(EhCacheQueryCache.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>);</pre></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e3408"></a>Using custom data types</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e3411"></a>Value object type</h3></div></div></div><p>
+                <code class="code">ValueObjectType</code> is a new and lightweight alternative to the Extended Types API described in the following section.
+                In most cases is should be preferred as is it easier to understand and use. Currently only one case is known when <code class="code">ExtendedType</code> should be used:
+                when your value object can be mapped on different JDBC types.
+            </p><p>
+                In order to use your custom data type you should implement <code class="code">ValueObjectType</code> describing it in terms of some type already known to Cayenne
+                (e.g. backed by system or user ExtendedType).
+            </p><p>
+                Let's assume we want to support some data type called <code class="code">Money</code>:
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> Money {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">private</span> BigDecimal value;
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> Money(BigDecimal value) {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">this</span>.value = value;
+    }
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> BigDecimal getValue() {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> value;
+    }
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// .. some other business logic ..</span>
+}</pre><p>
+                Here is how <code class="code">ValueObjectType</code> that will allow to store our <code class="code">Money</code> class as <code class="code">BigDecimal</code>
+                can be implemented:
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> MoneyValueObjectType <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">implements</span> ValueObjectType&lt;Money, BigDecimal&gt; {
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> Class&lt;BigDecimal&gt; getTargetType() {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> BigDecimal.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>;
+    }
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> Class&lt;Money&gt; getValueType() {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> Money.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>;
+    }
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> Money toJavaObject(BigDecimal value) {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> Money(value);
+    }
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> BigDecimal fromJavaObject(Money object) {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> object.getValue();
+    }
+
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> String toCacheKey(Money object) {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> object.getValue().toString();
+    }
+}</pre><p>
+            </p><p>
+                Last step is to register this new type in <code class="code">ServerRuntime</code>:
+                </p><pre class="programlisting">ServerRuntime runtime = ServerRuntime.builder()
+    .addConfig(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-project.xml"</span>)
+    .addModule(binder -&gt; ServerModule.contributeValueObjectTypes(binder).add(MoneyValueObjectType.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>))
+    .build();</pre><p>
+            </p><p>More examples of implementation you can find in
+                <a class="link" href="https://github.com/apache/cayenne/tree/STABLE-4.0/cayenne-java8/src/main/java/org/apache/cayenne/java8/access/types" target="_top">cayenne-java8 module</a>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="extendedtypes"></a>Extended Types</h3></div></div></div><p>JDBC specification defines a set of "standard" database column types (defined in java.sql.Types class)
+                and a very specific mapping of these types to Java Object Types, such as java.lang.String,
+                java.math.BigDecimal, etc. Sometimes there is a need to use a custom Java type not known to JDBC driver and
+                Cayenne allows to configure it. For this Cayenne needs to know how to instantiate this type from
+                a database "primitive" value, and conversely, how to transform an object of the custom type to
+                a JDBC-compatible object.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="supporting-non-standard-types"></a>Supporting Non-Standard Types</h4></div></div></div><p>For supporting non-standard type you should define it via an interface <code class="code">org.apache.cayenne.access.types.ExtendedType</code>.
+                    An implementation must provide <code class="code">ExtendedType.getClassName()</code> method that returns
+                    a fully qualified Java class name for the supported custom type, and a number of methods
+                    that convert data between JDBC and custom type.
+                    The following example demonstrates how to add a custom DoubleArrayType
+                    to store <code class="code">java.lang.Double[]</code> as a custom string in a database:</p><pre class="programlisting">
 <strong xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">/**
 * Defines methods to read Java objects from JDBC ResultSets and write as parameters of
 * PreparedStatements.
@@ -268,36 +327,38 @@ binder.bindList(DefaultDbAdapterFactory.
         <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> res;
     }
 }
-            </pre><p>For Java7</p><pre class="programlisting">
+                </pre><p>For Java7</p><pre class="programlisting">
 <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// add DoubleArrayType to list of user types</span>
 ServerRuntime runtime = ServerRuntime.builder()
                 .addConfig(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-project.xml"</span>)
                 .addModule(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> Module() {
                     <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
                     <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">void</span> configure(Binder binder) {
-                        binder
-                                .bindList(Constants.SERVER_USER_TYPES_LIST)
-                                .add(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> DoubleArrayType());
+                        ServerModule.contributeUserTypes(binder).add(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> DoubleArrayType());
                     }
                 })
                 .build();
-            </pre><p>For Java8</p><pre class="programlisting">
+                </pre><p>For Java8</p><pre class="programlisting">
 <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// add DoubleArrayType to list of user types</span>
 ServerRuntime runtime = ServerRuntime.builder()
                 .addConfig(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"cayenne-project.xml"</span>)
-                .addModule(binder -&gt; binder.bindList(Constants.SERVER_USER_TYPES_LIST).add(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> DoubleArrayType()))
+                .addModule(binder -&gt; ServerModule.contributeUserTypes(binder).add(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> DoubleArrayType()))
                 .build();
-            </pre><p>More examples of implementation you can find in
-                <a class="link" href="https://github.com/apache/cayenne/tree/master/cayenne-java8" target="_top">cayenne-java8 module</a> or
-                <a class="link" href="https://github.com/apache/cayenne/tree/master/cayenne-joda" target="_top">cayenne-joda module</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="dbadapters-and-extended-types"></a>DbAdapters and Extended Types</h3></div></div></div><p>As shown in the example above, ExtendedTypes are stored by DbAdapter. In fact DbAdapters often install
-                their own extended types to address incompatibilities, incompleteness and differences between
-                JDBC drivers in handling "standard" JDBC types. For instance some drivers support reading large
-                character columns (CLOB) as java.sql.Clob, but some other - as "character stream", etc.
-                Adapters provided with Cayenne override <code class="code">configureExtendedTypes()</code> method to install their own types,
-                possibly substituting Cayenne defaults. Custom DbAdapters can use the same technique.</p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="noteworthy-runtime-components"></a>Noteworthy Built-in Services</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="jdbceventlogger"></a>JdbcEventLogger</h3></div></div></div><p><code class="code">org.apache.cayenne.log.JdbcEventLogger</code> is the service that defines
+                </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a name="dbadapters-and-extended-types"></a>DbAdapters and Extended Types</h4></div></div></div><p>As shown in the example above, ExtendedTypes are stored by DbAdapter. In fact DbAdapters often install
+                    their own extended types to address incompatibilities, incompleteness and differences between
+                    JDBC drivers in handling "standard" JDBC types. For instance some drivers support reading large
+                    character columns (CLOB) as java.sql.Clob, but some other - as "character stream", etc.
+                    Adapters provided with Cayenne override <code class="code">configureExtendedTypes()</code> method to install their own types,
+                    possibly substituting Cayenne defaults. Custom DbAdapters can use the same technique.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="noteworthy-runtime-components"></a>Noteworthy Built-in Services</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="jdbceventlogger"></a>JdbcEventLogger</h3></div></div></div><p><code class="code">org.apache.cayenne.log.JdbcEventLogger</code> is the service that defines
                 logging API for Cayenne internals. It provides facilities for logging queries,
                 commits, transactions, etc. The default implementation is
                     <code class="code">org.apache.cayenne.log.Slf4jJdbcEventLogger</code> that performs logging
                 via slf4j-api library. Cayenne library includes another potentially useful
                 logger - <code class="code">org.apache.cayenne.log.FormattedSlf4jJdbcEventLogger</code> that
-                produces formatted multiline SQL output that can be easier to read.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="datasourcefactory"></a>DataSourceFactory</h3></div></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="datachannelfilter"></a>DataChannelFilter</h3></div></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="querycache"></a>QueryCache</h3></div></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="performance-tuning.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part2.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part3.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;11.&nbsp;Performance Tuning&
 nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence </td></tr></table></div></body></html>
\ No newline at end of file
+                produces formatted multiline SQL output that can be easier to read.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="datasourcefactory"></a>DataSourceFactory</h3></div></div></div><p>Factory that returns <code class="code">javax.sql.DataSource</code> object based on the configuration provided in the
+                "nodeDescriptor".
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="datachannelfilter"></a>DataChannelFilter</h3></div></div></div><p> An interface of a filter that allows to intercept DataChannel operations. Filters allow
+                to implement chains of custom processors around a DataChannel, that can be used for
+                security, monitoring, business logic, providing context to lifecycle event listeners,
+                etc.
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="querycache"></a>QueryCache</h3></div></div></div><p>Defines API of a cache that stores query results.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="performance-tuning.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part2.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="cayenne-guide-part3.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;11.&nbsp;Performance Tuning&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Part&nbsp;III.&nbsp;Cayenne Framework - Remote Object Persistence </td></tr></table></div></body></html>
\ No newline at end of file

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html Fri Oct  6 07:49:44 2017
@@ -9,7 +9,7 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Appendix&nbsp;C.&nbsp;Expressions BNF</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="service-collections.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="expressions-bnf"></a>Appendix&nbsp;C.&nbsp;Expressions BNF</h1></div></div></div><p>
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Appendix&nbsp;C.&nbsp;Expressions BNF</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="service-collections.html">Prev</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a name="expressions-bnf"></a>Appendix&nbsp;C.&nbsp;Expressions BNF</h1></div></div></div><p>
         </p><pre class="programlisting">
 TOKENS
 &lt;DEFAULT&gt; SKIP : {

Modified: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/expressions.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/expressions.html (original)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/expressions.html Fri Oct  6 07:49:44 2017
@@ -9,7 +9,7 @@
     ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
     var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
   })();
-        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B1)</th><th align="center">Chapter&nbsp;7.&nbsp;Expressions</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="persistent-objects-objectcontext.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part2.html">Part&nbsp;II.&nbsp;Cayenne Framework</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="orderings.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="expressions"></a>Chapter&nbsp;7.&nbsp;Expressions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="expressions.html#expressions-overview">Expressions Overview</
 a></span></dt><dt><span class="section"><a href="expressions.html#path-expressions">Path Expressions</a></span></dt><dt><span class="section"><a href="expressions.html#expressions-from-strings">Creating Expressions from Strings </a></span></dt><dt><span class="section"><a href="expressions.html#expressions-with-expressionfactory">Creating Expressions via API</a></span></dt><dt><span class="section"><a href="expressions.html#expressions-in-memory">Evaluating Expressions in Memory</a></span></dt><dt><span class="section"><a href="expressions.html#expressions-to-ejbql">Translating Expressions to EJBQL</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="expressions-overview"></a>Expressions Overview</h2></div></div></div><p>Cayenne provides a simple yet powerful object-based expression language. The most common
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;7.&nbsp;Expressions</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="persistent-objects-objectcontext.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part2.html">Part&nbsp;II.&nbsp;Cayenne Framework</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="orderings.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="expressions"></a>Chapter&nbsp;7.&nbsp;Expressions</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="expressions.html#expressions-overview">Expressions Overview</
 a></span></dt><dt><span class="section"><a href="expressions.html#path-expressions">Path Expressions</a></span></dt><dt><span class="section"><a href="expressions.html#expressions-from-strings">Creating Expressions from Strings </a></span></dt><dt><span class="section"><a href="expressions.html#expressions-with-expressionfactory">Creating Expressions via API</a></span></dt><dt><span class="section"><a href="expressions.html#expressions-in-memory">Evaluating Expressions in Memory</a></span></dt><dt><span class="section"><a href="expressions.html#expressions-to-ejbql">Translating Expressions to EJBQL</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="expressions-overview"></a>Expressions Overview</h2></div></div></div><p>Cayenne provides a simple yet powerful object-based expression language. The most common
             usese of expressions are to build qualifiers and orderings of queries that are later
             converted to SQL by Cayenne and to evaluate in-memory against specific objects (to
             access certain values in the object graph or to perform in-memory object filtering and

Added: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html (added)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html Fri Oct  6 07:49:44 2017
@@ -0,0 +1,55 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;23.&nbsp;Cache invalidation extension</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="cayenne-guide-part5.html" title="Part&nbsp;V.&nbsp;Cayenne Additional Modules"><link rel="prev" href="cayenne-guide-part5.html" title="Part&nbsp;V.&nbsp;Cayenne Additional Modules"><link rel="next" href="ext-commit-log.html" title="Chapter&nbsp;24.&nbsp;Commit log extension"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-7036673-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;23.&nbsp;Cache invalidation extension</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="cayenne-guide-part5.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Part&nbsp;V.&nbsp;Cayenne Additional Modules</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ext-commit-log.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-cache-invalidation"></a>Chapter&nbsp;23.&nbsp;Cache invalidation extension</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="ext-cache-inva
 lidation.html#d0e4040">Description</a></span></dt><dt><span class="section"><a href="ext-cache-invalidation.html#d0e4045">Including in a project</a></span></dt><dt><span class="section"><a href="ext-cache-invalidation.html#d0e4064">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4040"></a>Description</h2></div></div></div><p>Cache invalidation module is an extension that allows to define cache invalidation policy programmatically.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4045"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4048"></a>Maven</h3></div></div></div><p>
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;dependency&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;groupId&gt;</span>org.apache.cayenne<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/groupId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;artifactId&gt;</span>cayenne-cache-invalidation<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/artifactId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;version&gt;</span>4.0.B2<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/version&gt;</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/dependency&gt;</span></pre><p>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4056"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-cache-invalidation:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4064"></a>Usage</h2></div></div></div><p>
+            Module supports autoloading mechanism, so no other actions required to enable it.
+            Just mark your entities with <code class="code">@CacheGroups</code> annotation and you are ready to use it:
+            </p><pre class="programlisting">
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@CacheGroups("some-group")</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> MyEntity <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">extends</span> _MyEntity {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// ...</span>
+}</pre><p>
+            After any modification of <code class="code">MyEntity</code> objects cache group <code class="code">"some-group"</code>
+            will be dropped from cache automatically.
+            </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>You can read more about cache and cache groups in corresponding <a class="link" href="performance-tuning.html#caching-and-fresh-data" title="Caching and Fresh Data">chapter</a> of this documentation.</p></div><p>
+        </p><p>
+            In case you need some complex logic of cache invalidation you can disable default behaviour and provide your own.
+        </p><p>
+            To do so you need to implement <code class="code">org.apache.cayenne.cache.invalidation.InvalidationHandler</code> interface and setup Cache Invalidation module to
+            use it.
+            Let's use implementation class called <code class="code">CustomInvalidationHandler</code> that will simply match
+            all entities' types with <code class="code">"custom-group"</code> cache group regardless of any annotations:
+            </p><pre class="programlisting">
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> CustomInvalidationHandler <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">implements</span> InvalidationHandler {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> InvalidationFunction canHandle(Class&lt;? <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">extends</span> Persistent&gt; type) {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">return</span> p -&gt; Collections.singleton(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> CacheGroupDescriptor(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"custom-group"</span>));
+    }
+}</pre><p>
+            Now we'll set up it's usage by <code class="code">ServerRuntime</code>:
+            </p><pre class="programlisting">
+ServerRuntime.builder()
+        .addModule(CacheInvalidationModule.extend()
+                <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// this will disable default handler based on @CacheGroups, and this is optional</span>
+                .noCacheGroupsHandler()
+                .addHandler(CustomInvalidationHandler.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>)
+                .module())
+</pre><p>
+            </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>You can combine as many invalidation handlers as you need.</p></div><p>
+        </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="cayenne-guide-part5.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ext-commit-log.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part&nbsp;V.&nbsp;Cayenne Additional Modules&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;24.&nbsp;Commit log extension</td></tr></table></div></body></html>
\ No newline at end of file

Added: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html (added)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html Fri Oct  6 07:49:44 2017
@@ -0,0 +1,48 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;24.&nbsp;Commit log extension</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="cayenne-guide-part5.html" title="Part&nbsp;V.&nbsp;Cayenne Additional Modules"><link rel="prev" href="ext-cache-invalidation.html" title="Chapter&nbsp;23.&nbsp;Cache invalidation extension"><link rel="next" href="ext-crypto.html" title="Chapter&nbsp;25.&nbsp;Crypto extension"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-7036673-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;24.&nbsp;Commit log extension</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-cache-invalidation.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Part&nbsp;V.&nbsp;Cayenne Additional Modules</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ext-crypto.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-commit-log"></a>Chapter&nbsp;24.&nbsp;Commit log extension</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="ext-commit-log.html#d0e4118">Descriptio
 n</a></span></dt><dt><span class="section"><a href="ext-commit-log.html#d0e4123">Including in a project</a></span></dt><dt><span class="section"><a href="ext-commit-log.html#d0e4142">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4118"></a>Description</h2></div></div></div><p>The goal of this module is to capture commit changes and present them to interested parties in an easy-to-process format.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4123"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4126"></a>Maven</h3></div></div></div><p>
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;dependency&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;groupId&gt;</span>org.apache.cayenne<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/groupId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;artifactId&gt;</span>cayenne-commitlog<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/artifactId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;version&gt;</span>4.0.B2<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/version&gt;</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/dependency&gt;</span></pre><p>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4134"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-commitlog:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4142"></a>Usage</h2></div></div></div><p>
+            In order to use <code class="code">commitlog</code> module you need to perform three steps:
+            </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Mark all entities which changes you are interested in with <code class="code">@org.apache.cayenne.commitlog.CommitLog</code> annotation</p><pre class="programlisting">
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@CommitLog(ignoredProperties = {"somePrivatePropertyToSkip"})</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> MyEntity <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">extends</span> _MyEntity {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// ...</span>
+}</pre></li><li class="listitem"><p>
+                        Implement <code class="code">CommitLogListener</code> interface.
+                        </p><pre class="programlisting">
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span> MyCommitLogListener <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">implements</span> CommitLogListener {
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-annotation">@Override</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">public</span> <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">void</span> onPostCommit(ObjectContext originatingContext, ChangeMap changes) {
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// ChangeMap will contain all information about changes happened in performed commit</span>
+        <span xmlns="http://www.w3.org/1999/xhtml" class="hl-comment">// this particular example will print IDs of all inserted objects</span>
+        changes.getUniqueChanges().stream()
+            .filter(change -&gt; change.getType() == ObjectChangeType.INSERT)
+            .map(ObjectChange::getPostCommitId)
+            .forEach(id -&gt; System.out.println(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"Inserted new entity with id: "</span> + id));
+    }
+}</pre><p>
+                    </p></li><li class="listitem"><p>
+                        Inject your listener into <code class="code">ServerRuntime</code>
+                        </p><pre class="programlisting">
+ServerRuntime.builder()
+        .addModule(CommitLogModule.extend()
+                .addListener(MyCommitLogListener.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>)
+                .module())</pre><p>
+                    </p></li></ol></div><p>
+        </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext-cache-invalidation.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ext-crypto.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;23.&nbsp;Cache invalidation extension&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;25.&nbsp;Crypto extension</td></tr></table></div></body></html>
\ No newline at end of file

Added: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html (added)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html Fri Oct  6 07:49:44 2017
@@ -0,0 +1,73 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;25.&nbsp;Crypto extension</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="cayenne-guide-part5.html" title="Part&nbsp;V.&nbsp;Cayenne Additional Modules"><link rel="prev" href="ext-commit-log.html" title="Chapter&nbsp;24.&nbsp;Commit log extension"><link rel="next" href="ext-dbcp2.html" title="Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-7036673-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;25.&nbsp;Crypto extension</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-commit-log.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Part&nbsp;V.&nbsp;Cayenne Additional Modules</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ext-dbcp2.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-crypto"></a>Chapter&nbsp;25.&nbsp;Crypto extension</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="ext-crypto.html#d0e4182">Description</a></span></dt><dt><spa
 n class="section"><a href="ext-crypto.html#d0e4187">Including in a project</a></span></dt><dt><span class="section"><a href="ext-crypto.html#d0e4206">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4182"></a>Description</h2></div></div></div><p>Crypto module allows encrypt and decrypt values stored in DB transparently to your Java app.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4187"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4190"></a>Maven</h3></div></div></div><p>
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;dependency&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;groupId&gt;</span>org.apache.cayenne<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/groupId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;artifactId&gt;</span>cayenne-crypto<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/artifactId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;version&gt;</span>4.0.B2<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/version&gt;</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/dependency&gt;</span></pre><p>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4198"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-crypto:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4206"></a>Usage</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4209"></a>Setup your model and DB</h3></div></div></div><p>
+                To use crypto module you must prepare your database to allow <code class="code">byte[]</code> storage and properly name
+                columns that will contain encrypted values.
+            </p><p>
+                Currently supported SQL types that can be used to store encrypted data are:
+                </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+                            Binary types: <code class="code">BINARY, BLOB, VARBINARY, LONGVARBINARY</code>.
+                            These types are preferred.
+                        </p></li><li class="listitem"><p>Character types, that will store <code class="code">base64</code> encoded value:
+                            <code class="code">CHAR, NCHAR, CLOB, NCLOB, LONGVARCHAR, LONGNVARCHAR, VARCHAR, NVARCHAR</code></p></li></ol></div><p>
+                </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>Not all data types may be supported by your database.</p></div><p>
+            </p><p>
+                Default naming strategy that doesn't require additional setup suggests using <code class="code">"CRYPTO_"</code> prefix.
+                You can change this default strategy by injecting you own implementation of
+                <code class="code">org.apache.cayenne.crypto.map.ColumnMapper</code> interface.
+                </p><pre class="programlisting">
+ServerRuntime.builder()
+        .addModule(CryptoModule.extend()
+                .columnMapper(MyColumnMapper.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>)
+                .module())</pre><p>
+            </p><p>
+                Here is an example of how <code class="code">ObjEntity</code> with two encrypted and two unencrypted properties
+                can look like:
+            </p><p><span class="inlinemediaobject"><img src="images/ext-crypto-obj-entity.png"></span></p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4259"></a>Setup keystore</h3></div></div></div><p>
+                To perform encryption you must provide <code class="code">KEYSTORE_URL</code> and <code class="code">KEY_PASSWORD</code>.
+                Currently crypto module supports only Java "jceks" KeyStore.
+                </p><pre class="programlisting">
+ServerRuntime.builder()
+        .addModule(CryptoModule.extend()
+                .keyStore(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">this</span>.getClass().getResource(<span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"keystore.jcek"</span>), <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"my-password"</span>.toCharArray(), <span xmlns="http://www.w3.org/1999/xhtml" class="hl-string">"my-key-alias"</span>)
+                .module())</pre><p>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4273"></a>Additional settings</h3></div></div></div><p>
+                Additionally to <code class="code">ColumnMapper</code> mentioned above you can customize other parts of
+                <code class="code">crypto module</code>.
+                You can enable <code class="code">gzip</code> compression and <code class="code">HMAC</code> usage (later will ensure integrity of data).
+                </p><pre class="programlisting">
+ServerRuntime.builder()
+        .addModule(CryptoModule.extend()
+                .compress()
+                .useHMAC()
+                .module())</pre><p>
+            </p><p>
+                Another useful extension point is support for custom Java value types. To add support for your
+                data type you need to implement <code class="code">org.apache.cayenne.crypto.transformer.value.BytesConverter</code>
+                interface that will convert required type to and from <code class="code">byte[]</code>.
+                </p><pre class="programlisting">
+ServerRuntime.builder()
+        .addModule(CryptoModule.extend()
+                .objectToBytesConverter(MyClass.<span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">class</span>, <span xmlns="http://www.w3.org/1999/xhtml" class="hl-keyword">new</span> MyClassBytesConverter())
+                .module())</pre><p>
+            </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>In addition to Java primitive types (and their object counterparts), <code class="code">crypto module</code>
+                    supports encryption only of <code class="code">java.util.Date</code>, <code class="code">java.math.BigInteger</code>
+                    and <code class="code">java.math.BigDecimal</code> types.
+                </p></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext-commit-log.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ext-dbcp2.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;24.&nbsp;Commit log extension&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration</td></tr></table></div></body></html>
\ No newline at end of file

Added: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html (added)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html Fri Oct  6 07:49:44 2017
@@ -0,0 +1,24 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="cayenne-guide-part5.html" title="Part&nbsp;V.&nbsp;Cayenne Additional Modules"><link rel="prev" href="ext-crypto.html" title="Chapter&nbsp;25.&nbsp;Crypto extension"><link rel="next" href="ext-java8.html" title="Chapter&nbsp;27.&nbsp;Java 8 extension"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-7036673-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-crypto.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Part&nbsp;V.&nbsp;Cayenne Additional Modules</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ext-java8.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-dbcp2"></a>Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="ext-dbcp2.html#d0e4323">Description
 </a></span></dt><dt><span class="section"><a href="ext-dbcp2.html#d0e4328">Including in a project</a></span></dt><dt><span class="section"><a href="ext-dbcp2.html#d0e4347">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4323"></a>Description</h2></div></div></div><p>
+            This module enables usage of Apache Commons DBCP2 connection pool.
+        </p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4328"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4331"></a>Maven</h3></div></div></div><p>
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;dependency&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;groupId&gt;</span>org.apache.cayenne<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/groupId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;artifactId&gt;</span>cayenne-dbcp2<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/artifactId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;version&gt;</span>4.0.B2<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/version&gt;</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/dependency&gt;</span></pre><p>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4339"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-dbcp2:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4347"></a>Usage</h2></div></div></div><p>
+            To use DBCP2 pool you need to setup it in <code class="code">DataNode</code> settings in Cayenne Modeler:
+        </p><p><span class="inlinemediaobject"><img src="images/ext-dbcp-setup.png"></span></p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext-crypto.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ext-java8.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;25.&nbsp;Crypto extension&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;27.&nbsp;Java 8 extension</td></tr></table></div></body></html>
\ No newline at end of file

Added: websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-java8.html
==============================================================================
--- websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-java8.html (added)
+++ websites/staging/cayenne/trunk/content/docs/4.0/cayenne-guide/ext-java8.html Fri Oct  6 07:49:44 2017
@@ -0,0 +1,23 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;27.&nbsp;Java 8 extension</title><link rel="stylesheet" type="text/css" href="css/cayenne-doc.css"><meta xmlns:d="http://docbook.org/ns/docbook" name="keywords" content="Cayenne 4.0 documentation"><meta xmlns:d="http://docbook.org/ns/docbook" name="description" content="User documentation for Apache Cayenne version 4.0"><link rel="home" href="index.html" title="Cayenne Guide"><link rel="up" href="cayenne-guide-part5.html" title="Part&nbsp;V.&nbsp;Cayenne Additional Modules"><link rel="prev" href="ext-dbcp2.html" title="Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration"><link rel="next" href="ext-jcache.html" title="Chapter&nbsp;28.&nbsp;JCache integration"><script xmlns:d="http://docbook.org/ns/docbook" type="text/javascript">
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-7036673-1']);
+  _gaq.push(['_trackPageview']);
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+        </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div xmlns:d="http://docbook.org/ns/docbook" class="navheader"><table width="100%" summary="Navigation header"><tr><th class="versioninfo">v.4.0 (4.0.B2)</th><th align="center">Chapter&nbsp;27.&nbsp;Java 8 extension</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-dbcp2.html">Prev</a>&nbsp;</td><th width="60%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Part&nbsp;V.&nbsp;Cayenne Additional Modules</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ext-jcache.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-java8"></a>Chapter&nbsp;27.&nbsp;Java 8 extension</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="ext-java8.html#d0e4363">Description</a></span></dt><dt><span clas
 s="section"><a href="ext-java8.html#d0e4377">Including in a project</a></span></dt><dt><span class="section"><a href="ext-java8.html#d0e4396">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4363"></a>Description</h2></div></div></div><p>Java 8 module allows to use <code class="code">java.time.LocalTime</code>, <code class="code">java.time.LocalDate</code>
+        and <code class="code">java.time.LocalDateTime</code> types for entity attributes</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4377"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4380"></a>Maven</h3></div></div></div><p>
+                </p><pre class="programlisting"><span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;dependency&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;groupId&gt;</span>org.apache.cayenne<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/groupId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;artifactId&gt;</span>cayenne-java8<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/artifactId&gt;</span>
+    <span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;version&gt;</span>4.0.B2<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/version&gt;</span>
+<span xmlns="http://www.w3.org/1999/xhtml" class="hl-tag">&lt;/dependency&gt;</span></pre><p>
+            </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4388"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-java8:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4396"></a>Usage</h2></div></div></div><p>
+            This module doesn't require any additional setup, you can just use new data types in your model.
+        </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext-dbcp2.html">Prev</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="cayenne-guide-part5.html">Up</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ext-jcache.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;26.&nbsp;Apache Commons DBCP integration&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&nbsp;Chapter&nbsp;28.&nbsp;JCache integration</td></tr></table></div></body></html>
\ No newline at end of file