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

svn commit: r1811298 [42/46] - in /cayenne/site/cms/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/apache/...

Modified: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html?rev=1811298&r1=1811297&r2=1811298&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/customizing-cayenne-runtime.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html?rev=1811298&r1=1811297&r2=1811298&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions-bnf.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions.html?rev=1811298&r1=1811297&r2=1811298&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/expressions.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-cache-invalidation.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-commit-log.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-crypto.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-dbcp2.html Fri Oct  6 07:40:21 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: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-java8.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-java8.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-java8.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-java8.html Fri Oct  6 07:40:21 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

Added: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-jcache.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-jcache.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-jcache.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-jcache.html Fri Oct  6 07:40:21 2017
@@ -0,0 +1,26 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+   <title xmlns:d="http://docbook.org/ns/docbook">Chapter&nbsp;28.&nbsp;JCache 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-java8.html" title="Chapter&nbsp;27.&nbsp;Java 8 extension"><link rel="next" href="ext-joda.html" title="Chapter&nbsp;29.&nbsp;Joda time 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;28.&nbsp;JCache integration</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-java8.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-joda.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-jcache"></a>Chapter&nbsp;28.&nbsp;JCache 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-jcache.html#d0e4405">Description</a></span></dt><dt><span 
 class="section"><a href="ext-jcache.html#d0e4410">Including in a project</a></span></dt><dt><span class="section"><a href="ext-jcache.html#d0e4429">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4405"></a>Description</h2></div></div></div><p>This module allows to integrate any JCache (JSR 107) compatible caching provider with Cayenne.</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4410"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4413"></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-jcache<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="d0e4421"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-jcache:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4429"></a>Usage</h2></div></div></div><p>
+            To use JCache provider in your app you need to include this module and caching provider libs (e.g. Ehcache).
+            You can provide own implementation of <code class="code">org.apache.cayenne.jcache.JCacheConfigurationFactory</code>
+            to customize cache configuration if required.
+        </p><p>
+            For advanced configuration and management please use provider specific options and tools.
+        </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>You can read about using cache in Cayenne in <a class="link" href="performance-tuning.html#caching-and-fresh-data" title="Caching and Fresh Data">this</a> chapter.</p><p>You may else be interested in <a class="link" href="ext-cache-invalidation.html" title="Chapter&nbsp;23.&nbsp;Cache invalidation extension">cache invalidation</a> extension.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext-java8.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-joda.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;27.&nbsp;Java 8 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;29.&nbsp;Joda time extension</td></tr></table></div></body></html>
\ No newline at end of file

Added: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-joda.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-joda.html?rev=1811298&view=auto
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-joda.html (added)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/ext-joda.html Fri Oct  6 07:40:21 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;29.&nbsp;Joda time 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-jcache.html" title="Chapter&nbsp;28.&nbsp;JCache integration"><link rel="next" href="configuration-properties.html" title="Appendix&nbsp;A.&nbsp;Configuration Properties"><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;29.&nbsp;Joda time extension</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext-jcache.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="configuration-properties.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="ext-joda"></a>Chapter&nbsp;29.&nbsp;Joda time 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-joda.html#d0e4454">Description</a></span>
 </dt><dt><span class="section"><a href="ext-joda.html#d0e4471">Including in a project</a></span></dt><dt><span class="section"><a href="ext-joda.html#d0e4490">Usage</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4454"></a>Description</h2></div></div></div><p>Joda time module allows to use <code class="code">org.joda.time.LocalTime</code>, <code class="code">org.joda.time.LocalDate</code>,
+            <code class="code">org.joda.time.LocalDateTime</code> and <code class="code">org.joda.time.DateTime</code> types for entity attributes</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4471"></a>Including in a project</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4474"></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-joda<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="d0e4482"></a>Gradle</h3></div></div></div><p>
+                </p><pre class="programlisting">compile 'org.apache.cayenne:cayenne-joda:4.0.B2'</pre><p>
+            </p></div></div><div class="section"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4490"></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-jcache.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="configuration-properties.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;28.&nbsp;JCache 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;Appendix&nbsp;A.&nbsp;Configuration Properties</td></tr></table></div></body></html>
\ No newline at end of file

Added: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/images/ext-crypto-obj-entity.png
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/images/ext-crypto-obj-entity.png?rev=1811298&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/images/ext-crypto-obj-entity.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/images/ext-dbcp-setup.png
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/images/ext-dbcp-setup.png?rev=1811298&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/images/ext-dbcp-setup.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-client.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-client.html?rev=1811298&r1=1811297&r2=1811298&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-client.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-client.html Fri Oct  6 07:40:21 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;16.&nbsp;Implementing ROP Client</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="implementing-rop-server.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="rop-deployment.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="implementing-rop-client"></a>Chapter&nbsp;16.&nbsp;Implementing ROP Client</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="implementing-rop-server.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="rop-deployment.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;15.&nbsp;Implementing ROP Server&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;17.&nbsp;ROP Deployment</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;16.&nbsp;Implementing ROP Client</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="implementing-rop-server.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="rop-deployment.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="implementing-rop-client"></a>Chapter&nbsp;16.&nbsp;Implementing ROP Client</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="implementing-rop-server.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="rop-deployment.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;15.&nbsp;Implementing ROP Server&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;17.&nbsp;ROP Deployment</td></tr></table></div></body></html>
\ No newline at end of file

Modified: cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-server.html
URL: http://svn.apache.org/viewvc/cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-server.html?rev=1811298&r1=1811297&r2=1811298&view=diff
==============================================================================
--- cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-server.html (original)
+++ cayenne/site/cms/trunk/content/docs/4.0/cayenne-guide/implementing-rop-server.html Fri Oct  6 07:40:21 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;15.&nbsp;Implementing ROP Server</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rop-setup.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="implementing-rop-client.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="implementing-rop-server"></a>Chapter&nbsp;15.&nbsp;Implementing ROP Server</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-setup.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="implementing-rop-client.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;14.&nbsp;ROP Setup&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;16.&nbsp;Implementing ROP Client</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;15.&nbsp;Implementing ROP Server</th><th></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="rop-setup.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="implementing-rop-client.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="implementing-rop-server"></a>Chapter&nbsp;15.&nbsp;Implementing ROP Server</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-setup.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="implementing-rop-client.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter&nbsp;14.&nbsp;ROP Setup&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;16.&nbsp;Implementing ROP Client</td></tr></table></div></body></html>
\ No newline at end of file