http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/dev/release-guide.md
----------------------------------------------------------------------
diff --git a/src/main/site/content/dev/release-guide.md 
b/src/main/site/content/dev/release-guide.md
index 5622456..13b2d36 100644
--- a/src/main/site/content/dev/release-guide.md
+++ b/src/main/site/content/dev/release-guide.md
@@ -110,14 +110,14 @@ be considered by the PMC (particularly -1 votes will be 
discussed) when
 making the final decision, but are not binding.
 * Each PMC member will do the following before voting on a release:
     * download the artifacts
-    * satisfy themselves that the source matches the appropriate GIT tag.
+    * satisfy themselves that the source matches the appropriate Git tag.
 This can be done by diffing the source against a recent git checkout.
     * satisfy themselves that the Apache licensing requirements are met (this
 will usually be achieved by ensuring that all notices are in place and
-verifying that the source matches GIT since all commits to GIT are possible
+verifying that the source matches Git since all commits to Git are possible
 only if the committer has a CLA on file).
     * satisfy themselves that the binary distribution is sane and passes
-basic usability tests. For example, that the Cayenne modeler runs and the
+basic usability tests. For example, that the Cayenne Modeler runs and the
 main jar passes some basic tests.
     * satisfy themselves that the source passes agreed unit tests (either by
 running them manually or verifying that CI service has run those tests against

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/cayenne-guide.html
----------------------------------------------------------------------
diff --git a/src/main/site/content/docs/4.0/cayenne-guide.html 
b/src/main/site/content/docs/4.0/cayenne-guide.html
index a963e2e..78f14a5 100644
--- a/src/main/site/content/docs/4.0/cayenne-guide.html
+++ b/src/main/site/content/docs/4.0/cayenne-guide.html
@@ -63,7 +63,7 @@ menu:
       <tr> 
        <td class="tableblock halign-left valign-top"><p 
class="tableblock">4.0</p></td> 
        <td class="tableblock halign-left valign-top"><p 
class="tableblock">Java 1.7 or newer</p></td> 
-       <td class="tableblock halign-left valign-top"><p 
class="tableblock">Beta</p></td> 
+       <td class="tableblock halign-left valign-top"><p 
class="tableblock">Stable</p></td> 
       </tr> 
       <tr> 
        <td class="tableblock halign-left valign-top"><p 
class="tableblock">3.1</p></td> 
@@ -121,7 +121,7 @@ menu:
         &lt;plugin&gt;
             &lt;groupId&gt;org.apache.cayenne.plugins&lt;/groupId&gt;
             &lt;artifactId&gt;cayenne-modeler-maven-plugin&lt;/artifactId&gt;
-            &lt;version&gt;4.0.RC1&lt;/version&gt;
+            &lt;version&gt;4.0&lt;/version&gt;
         &lt;/plugin&gt;
     &lt;/plugins&gt;
 &lt;/build&gt;</code></pre> 
@@ -345,9 +345,9 @@ total 24
     </div> 
     <div class="ulist"> 
      <ul> 
-      <li> <p><code>cayenne-di-4.0.RC1.jar</code> - Cayenne dependency 
injection (DI) container library. All applications will require this file.</p> 
</li> 
-      <li> <p><code>cayenne-server-4.0.RC1.jar</code> - contains main Cayenne 
runtime (adapters, DB access classes, etc.). Most applications will require 
this file.</p> </li> 
-      <li> <p><code>cayenne-client-4.0.RC1.jar</code> - a client-side runtime 
for <a href="#introduction-to-rop">ROP applications</a></p> </li> 
+      <li> <p><code>cayenne-di-4.0.jar</code> - Cayenne dependency injection 
(DI) container library. All applications will require this file.</p> </li> 
+      <li> <p><code>cayenne-server-4.0.jar</code> - contains main Cayenne 
runtime (adapters, DB access classes, etc.). Most applications will require 
this file.</p> </li> 
+      <li> <p><code>cayenne-client-4.0.jar</code> - a client-side runtime for 
<a href="#introduction-to-rop">ROP applications</a></p> </li> 
       <li> <p>Other cayenne-* jars - various Cayenne tools extensions.</p> 
</li> 
      </ul> 
     </div> 
@@ -371,7 +371,7 @@ total 24
       <pre class="highlight"><code class="language-xml xml" 
data-lang="xml">&lt;dependency&gt;
    &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
    &lt;artifactId&gt;cayenne-server&lt;/artifactId&gt;
-   &lt;version&gt;4.0.RC1&lt;/version&gt;
+   &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
      </div> 
     </div> 
@@ -527,7 +527,7 @@ total 24
        <pre class="highlight"><code class="language-xml xml" 
data-lang="xml">&lt;plugin&gt;
     &lt;groupId&gt;org.apache.cayenne.plugins&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-maven-plugin&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 
     &lt;configuration&gt;
         &lt;map&gt;${project.basedir}/src/main/resources/my.map.xml&lt;/map&gt;
@@ -690,7 +690,7 @@ total 24
        <pre class="highlight"><code class="language-xml xml" 
data-lang="xml">&lt;plugin&gt;
     &lt;groupId&gt;org.apache.cayenne.plugins&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-maven-plugin&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
     &lt;executions&gt;
         &lt;execution&gt;
             &lt;configuration&gt;
@@ -924,7 +924,7 @@ total 24
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;plugin&gt;
     &lt;groupId&gt;org.apache.cayenne.plugins&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-maven-plugin&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 
     &lt;executions&gt;
         &lt;execution&gt;
@@ -961,7 +961,7 @@ total 24
     </div> 
     <div class="listingblock"> 
      <div class="content"> 
-      <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-server:4.0.RC1'</code></pre> 
+      <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 'org.apache.cayenne:cayenne-server:4.0'</code></pre> 
      </div> 
     </div> 
     <div class="ulist"> 
@@ -983,7 +983,7 @@ total 24
     }
     // add Cayenne Gradle Plugin
     dependencies {
-        classpath group: 'org.apache.cayenne.plugins', name: 
'cayenne-gradle-plugin', version: '4.0.RC1'
+        classpath group: 'org.apache.cayenne.plugins', name: 
'cayenne-gradle-plugin', version: '4.0'
     }
 }
 
@@ -2298,12 +2298,19 @@ List&lt;String&gt; names = 
context.performQuery(query);</code></pre>
      </div> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-java java" 
data-lang="java">SQLSelect&lt;Painting&gt; q1 = SQLSelect
+       <pre class="highlight"><code class="language-java java" 
data-lang="java">// Selecting objects
+List&lt;Painting&gt; paintings = SQLSelect
     .query(Painting.class, "SELECT * FROM PAINTING WHERE PAINTING_TITLE LIKE 
#bind($title)")
     .params("title", "painting%")
     .upperColumnNames()
     .localCache()
     .limit(100)
+    .select(context);
+
+// Selecting scalar values
+List&lt;String&gt; paintingNames = SQLSelect
+    .scalarQuery(String.class, "SELECT PAINTING_TITLE FROM PAINTING WHERE 
ESTIMATED_PRICE &gt; #bind($price)")
+    .params("price", 100000)
     .select(context);</code></pre> 
       </div> 
      </div> 
@@ -3510,7 +3517,7 @@ List&lt;Artist&gt; artists =
       <p>This tells Cayenne that the query created here would like to use 
local cache of the context it is executed against. A vararg parameter to 
<code>localCache()</code> (or <code>sharedCache()</code>) method contains so 
called "cache groups". Those are arbitrary names that allow to categorize 
queries for the purpose of setting cache policies or explicit invalidation of 
the cache. More on that below.</p> 
      </div> 
      <div class="paragraph"> 
-      <p>The above API is enough for the caching to work, but by default your 
cache is an unmanaged LRU map. You can’t control its size, expiration 
policies, etc. For the managed cache, you will need to explicitly use one of 
the more advanced cache providers. Use can use <a 
href="#ext-cayenne-jcache">JCache integration module</a> to enable any of 
JCache API compatible caching providers.</p> 
+      <p>The above API is enough for the caching to work, but by default your 
cache is an unmanaged LRU map. You can’t control its size, expiration 
policies, etc. For the managed cache, you will need to explicitly use one of 
the more advanced cache providers. Use can use <a href="#ext-jcache">JCache 
integration module</a> to enable any of JCache API compatible caching 
providers.</p> 
      </div> 
      <div class="paragraph"> 
       <p>Often "passive" cache expiration policies used by caching providers 
are not sufficient, and the users want real-time cache invalidation when the 
data changes. So in addition to those policies, the app can invalidate 
individual cache groups explicitly with <code>RefreshQuery</code>:</p> 
@@ -4168,7 +4175,7 @@ ServerRuntime runtime = ServerRuntime.builder()
       <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;plugin&gt;
                &lt;groupId&gt;org.apache.cayenne.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;cayenne-maven-plugin&lt;/artifactId&gt;
-               &lt;version&gt;4.0.RC1&lt;/version&gt;
+               &lt;version&gt;4.0&lt;/version&gt;
 
                &lt;configuration&gt;
                        
&lt;map&gt;${project.basedir}/src/main/resources/datamap.map.xml&lt;/map&gt;
@@ -4737,7 +4744,7 @@ ServerRuntime runtime = ServerRuntime.builder()
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-cache-invalidation&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -4746,7 +4753,7 @@ ServerRuntime runtime = ServerRuntime.builder()
      <h5 id="gradle"><a class="anchor" href="#gradle"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-cache-invalidation:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-cache-invalidation:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -4831,7 +4838,7 @@ public class MyEntity extends _MyEntity {
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-commitlog&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -4840,7 +4847,7 @@ public class MyEntity extends _MyEntity {
      <h5 id="gradle-2"><a class="anchor" href="#gradle-2"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-commitlog:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-commitlog:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -4917,7 +4924,7 @@ public class MyEntity extends _MyEntity {
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-crypto&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -4926,7 +4933,7 @@ public class MyEntity extends _MyEntity {
      <h5 id="gradle-3"><a class="anchor" href="#gradle-3"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-crypto:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 'org.apache.cayenne:cayenne-crypto:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -5042,7 +5049,7 @@ public class MyEntity extends _MyEntity {
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-dbcp2&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -5051,7 +5058,7 @@ public class MyEntity extends _MyEntity {
      <h5 id="gradle-4"><a class="anchor" href="#gradle-4"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-dbcp2:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 'org.apache.cayenne:cayenne-dbcp2:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -5085,7 +5092,7 @@ public class MyEntity extends _MyEntity {
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-java8&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -5094,7 +5101,7 @@ public class MyEntity extends _MyEntity {
      <h5 id="gradle-5"><a class="anchor" href="#gradle-5"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-java8:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 'org.apache.cayenne:cayenne-java8:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -5123,7 +5130,7 @@ public class MyEntity extends _MyEntity {
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-jcache&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -5132,7 +5139,7 @@ public class MyEntity extends _MyEntity {
      <h5 id="gradle-6"><a class="anchor" href="#gradle-6"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-jcache:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 'org.apache.cayenne:cayenne-jcache:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -5177,7 +5184,7 @@ public class MyEntity extends _MyEntity {
        <pre class="highlight"><code class="language-XML XML" 
data-lang="XML">&lt;dependency&gt;
     &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
     &lt;artifactId&gt;cayenne-joda&lt;/artifactId&gt;
-    &lt;version&gt;4.0.RC1&lt;/version&gt;
+    &lt;version&gt;4.0&lt;/version&gt;
 &lt;/dependency&gt;</code></pre> 
       </div> 
      </div> 
@@ -5186,7 +5193,7 @@ public class MyEntity extends _MyEntity {
      <h5 id="gradle-7"><a class="anchor" href="#gradle-7"></a>Gradle</h5> 
      <div class="listingblock"> 
       <div class="content"> 
-       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 
'org.apache.cayenne:cayenne-joda:4.0.RC1'</code></pre> 
+       <pre class="highlight"><code class="language-Groovy Groovy" 
data-lang="Groovy">compile 'org.apache.cayenne:cayenne-joda:4.0'</code></pre> 
       </div> 
      </div> 
     </div> 
@@ -5245,6 +5252,18 @@ public class MyEntity extends _MyEntity {
        <li> <p>Default value: none, project DataNode configuration is used</p> 
</li> 
       </ul> 
      </div> </li> 
+    <li> <p><code>cayenne.jdbc.max_wait</code> defines a maximum time in 
milliseconds that a connection request could wait in the connection queue. 
After this period expires, an exception will be thrown in the calling method. A 
value of zero will make the thread wait until a connection is available with no 
time out.</p> 
+     <div class="ulist"> 
+      <ul> 
+       <li> <p>Default value: 20 seconds</p> </li> 
+      </ul> 
+     </div> </li> 
+    <li> <p><code>cayenne.jdbc.validation_query</code> defines a SQL string 
that returns some result. It will be used to validate connections in the 
pool.</p> 
+     <div class="ulist"> 
+      <ul> 
+       <li> <p>Default value: none</p> </li> 
+      </ul> 
+     </div> </li> 
     <li> <p><code>cayenne.querycache.size</code> An integer defining the 
maximum number of entries in the query cache. Note that not all QueryCache 
providers may respect this property. MapQueryCache uses it, but the rest would 
use alternative configuration methods.</p> 
      <div class="ulist"> 
       <ul> 
@@ -5252,6 +5271,13 @@ public class MyEntity extends _MyEntity {
        <li> <p>Default value: 2000</p> </li> 
       </ul> 
      </div> </li> 
+    <li> <p><code>cayenne.DataRowStore.snapshot.size</code> defines snapshot 
cache max size</p> 
+     <div class="ulist"> 
+      <ul> 
+       <li> <p>Possible values: any positive int</p> </li> 
+       <li> <p>Default value: 10000</p> </li> 
+      </ul> 
+     </div> </li> 
     <li> <p><code>cayenne.server.contexts_sync_strategy</code> defines whether 
peer ObjectContexts should receive snapshot events after commits from other 
contexts. If true (<em>default</em>), the contexts would automatically 
synchronize their state with peers.</p> 
      <div class="ulist"> 
       <ul> 
@@ -5280,6 +5306,18 @@ public class MyEntity extends _MyEntity {
        <li> <p>Default value: false</p> </li> 
       </ul> 
      </div> </li> 
+    <li> <p><code>cayenne.server.query_execution_time_logging_threshold</code> 
defines the minimum number of milliseconds a query must run before it is 
logged. A value less than or equal to zero disables logging.</p> 
+     <div class="ulist"> 
+      <ul> 
+       <li> <p>Default value: 0</p> </li> 
+      </ul> 
+     </div> </li> 
+    <li> <p><code>cayenne.server.domain.name</code> defines an optional name 
of the runtime DataDomain. If not specified, the name is inferred from the 
configuration name.</p> 
+     <div class="ulist"> 
+      <ul> 
+       <li> <p>Default value: none</p> </li> 
+      </ul> 
+     </div> </li> 
     <li> <p><code>cayenne.rop.service_url</code> defines the URL of the ROP 
server</p> 
      <div class="ulist"> 
       <ul> 
@@ -5381,6 +5419,11 @@ public class MyEntity extends _MyEntity {
      <td class="tableblock halign-left valign-middle"><p 
class="tableblock">Stores DataDomain filters.</p></td> 
     </tr> 
     <tr> 
+     <td class="tableblock halign-left valign-middle"><p 
class="tableblock"><code>cayenne.server.domain_listeners</code></p></td> 
+     <td class="tableblock halign-left valign-middle"><p 
class="tableblock"><code>List&lt;Object&gt;</code></p></td> 
+     <td class="tableblock halign-left valign-middle"><p 
class="tableblock">Stores DataDomain listeners.</p></td> 
+    </tr> 
+    <tr> 
      <td class="tableblock halign-left valign-middle"><p 
class="tableblock"><code>cayenne.server.project_locations</code></p></td> 
      <td class="tableblock halign-left valign-middle"><p 
class="tableblock"><code>List&lt;String&gt;</code></p></td> 
      <td class="tableblock halign-left valign-middle"><p 
class="tableblock">Stores locations of the one of more project configuration 
files.</p></td> 

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-guide.html
----------------------------------------------------------------------
diff --git a/src/main/site/content/docs/4.0/getting-started-guide.html 
b/src/main/site/content/docs/4.0/getting-started-guide.html
index 2b3be4f..61e217c 100644
--- a/src/main/site/content/docs/4.0/getting-started-guide.html
+++ b/src/main/site/content/docs/4.0/getting-started-guide.html
@@ -284,7 +284,7 @@ menu:
     &lt;artifactId&gt;tutorial&lt;/artifactId&gt;
     &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
     &lt;properties&gt;
-        &lt;cayenne.version&gt;4.0.RC1&lt;/cayenne.version&gt; <i 
class="conum" data-value="1"></i><b>(1)</b>
+        &lt;cayenne.version&gt;4.0&lt;/cayenne.version&gt; <i class="conum" 
data-value="1"></i><b>(1)</b>
         &lt;maven.compiler.source&gt;1.8&lt;/maven.compiler.source&gt; <i 
class="conum" data-value="2"></i><b>(2)</b>
         &lt;maven.compiler.target&gt;1.8&lt;/maven.compiler.target&gt;
     &lt;/properties&gt;

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-guide/images/base-datamap.png
----------------------------------------------------------------------
diff --git 
a/src/main/site/content/docs/4.0/getting-started-guide/images/base-datamap.png 
b/src/main/site/content/docs/4.0/getting-started-guide/images/base-datamap.png
index a12bc01..a4dee53 100644
Binary files 
a/src/main/site/content/docs/4.0/getting-started-guide/images/base-datamap.png 
and 
b/src/main/site/content/docs/4.0/getting-started-guide/images/base-datamap.png 
differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-guide/images/base-datanode.png
----------------------------------------------------------------------
diff --git 
a/src/main/site/content/docs/4.0/getting-started-guide/images/base-datanode.png 
b/src/main/site/content/docs/4.0/getting-started-guide/images/base-datanode.png
index 69939bb..7cae6bf 100644
Binary files 
a/src/main/site/content/docs/4.0/getting-started-guide/images/base-datanode.png 
and 
b/src/main/site/content/docs/4.0/getting-started-guide/images/base-datanode.png 
differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-artistid.png
----------------------------------------------------------------------
diff --git 
a/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-artistid.png
 
b/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-artistid.png
index fb8c1dd..548b472 100644
Binary files 
a/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-artistid.png
 and 
b/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-artistid.png
 differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-deleterule.png
----------------------------------------------------------------------
diff --git 
a/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-deleterule.png
 
b/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-deleterule.png
index 86ada13..87d5d1c 100644
Binary files 
a/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-deleterule.png
 and 
b/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-deleterule.png
 differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-started.png
----------------------------------------------------------------------
diff --git 
a/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-started.png
 
b/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-started.png
index 5d83e7c..407f1eb 100644
Binary files 
a/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-started.png
 and 
b/src/main/site/content/docs/4.0/getting-started-guide/images/modeler-started.png
 differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-rop.html
----------------------------------------------------------------------
diff --git a/src/main/site/content/docs/4.0/getting-started-rop.html 
b/src/main/site/content/docs/4.0/getting-started-rop.html
index d0d4090..6988b5c 100644
--- a/src/main/site/content/docs/4.0/getting-started-rop.html
+++ b/src/main/site/content/docs/4.0/getting-started-rop.html
@@ -105,7 +105,7 @@ weight: 40
             &lt;groupId&gt;org.apache.cayenne&lt;/groupId&gt;
             &lt;artifactId&gt;cayenne-client&lt;/artifactId&gt;
             &lt;!-- Here specify the version of Cayenne you are actually using 
--&gt;
-            &lt;version&gt;4.0.RC1&lt;/version&gt;
+            &lt;version&gt;4.0&lt;/version&gt;
         &lt;/dependency&gt;
         &lt;dependency&gt;
         &lt;groupId&gt;com.caucho&lt;/groupId&gt;

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/getting-started-rop/images/datamap-enableclient.png
----------------------------------------------------------------------
diff --git 
a/src/main/site/content/docs/4.0/getting-started-rop/images/datamap-enableclient.png
 
b/src/main/site/content/docs/4.0/getting-started-rop/images/datamap-enableclient.png
index 62a2af2..549759f 100644
Binary files 
a/src/main/site/content/docs/4.0/getting-started-rop/images/datamap-enableclient.png
 and 
b/src/main/site/content/docs/4.0/getting-started-rop/images/datamap-enableclient.png
 differ

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/docs/4.0/upgrade-guide.html
----------------------------------------------------------------------
diff --git a/src/main/site/content/docs/4.0/upgrade-guide.html 
b/src/main/site/content/docs/4.0/upgrade-guide.html
index d266837..92457ae 100644
--- a/src/main/site/content/docs/4.0/upgrade-guide.html
+++ b/src/main/site/content/docs/4.0/upgrade-guide.html
@@ -92,7 +92,7 @@ Module module = binder -&gt;
    <div class="sect3"> 
     <h4 id="fluent-query-api"><a class="anchor" 
href="#fluent-query-api"></a>Fluent Query API</h4> 
     <div class="paragraph"> 
-     <p>Fluent Query API is one of the most exciting new features in Cayenne 
4.0. This syntax is "chainable" so you can write query assembly and execution 
code on one line. The most useful fluent queries are ObjectSelect, SQLSelect 
and SelectById:</p> 
+     <p>Fluent Query API is one of the most exciting new features in Cayenne 
4.0. This syntax is "chainable" so you can write query assembly and execution 
code on one line. The most useful fluent queries are <code>ObjectSelect</code>, 
<code>SQLSelect</code> and <code>SelectById</code>:</p> 
     </div> 
     <div class="sect4"> 
      <h5 id="objectselect"><a class="anchor" 
href="#objectselect"></a>ObjectSelect</h5> 
@@ -125,7 +125,7 @@ Module module = binder -&gt;
     <div class="sect4"> 
      <h5 id="sqlselect"><a class="anchor" href="#sqlselect"></a>SQLSelect</h5> 
      <div class="paragraph"> 
-      <p>A "chainable" analog of SQLTemplate used specifically to run 
selecting raw SQL:</p> 
+      <p>A "chainable" analog of <code>SQLTemplate</code> used specifically to 
run selecting raw SQL:</p> 
      </div> 
      <div class="listingblock"> 
       <div class="content"> 
@@ -138,7 +138,7 @@ Module module = binder -&gt;
     <div class="sect4"> 
      <h5 id="selectbyid"><a class="anchor" 
href="#selectbyid"></a>SelectById</h5> 
      <div class="paragraph"> 
-      <p>There’s really no good analog of SelectById in Cayenne prior to 
4.0. Previously available ObjectIdQuery didn’t support half of the features 
of SelectById (e.g. caching consistent with other queries, prefetches, etc.) 
:</p> 
+      <p>There’s really no good analog of <code>SelectById</code> in Cayenne 
prior to 4.0. Previously available <code>ObjectIdQuery</code> didn’t support 
half of the features of <code>SelectById</code> (e.g. caching consistent with 
other queries, prefetches, etc.) :</p> 
      </div> 
      <div class="listingblock"> 
       <div class="content"> 
@@ -178,13 +178,13 @@ context.iterate(q, (Artist a) -&gt; {
    <div class="sect3"> 
     <h4 id="property-api"><a class="anchor" href="#property-api"></a>Property 
API</h4> 
     <div class="paragraph"> 
-     <p>Persistent superclasses (_MyEntity) now contain a set of static 
Property&lt;T&gt; variables generated from the model. These metadata objects 
make possible to create type-safe Expressions and other query parts.</p> 
+     <p>Persistent superclasses (_MyEntity) now contain a set of static 
<code>Property&lt;T&gt;</code> variables generated from the model. These 
metadata objects make possible to create type-safe Expressions and other query 
parts.</p> 
     </div> 
    </div> 
    <div class="sect3"> 
     <h4 id="positional-parameter-bindings"><a class="anchor" 
href="#positional-parameter-bindings"></a>Positional Parameter Bindings</h4> 
     <div class="paragraph"> 
-     <p>Expressions and SQLTemplate traditionally supported binding of 
parameters by name as a map. Cayenne 4.0 introduces a very easy form of 
positional bindings. It works with the same named template format, only 
parameters are bound by position, left-to-right. Here we showing a more complex 
example with the same parameter name being used more than once in the 
query:</p> 
+     <p>Expressions and <code>SQLTemplate</code> traditionally supported 
binding of parameters by name as a map. Cayenne 4.0 introduces a very easy form 
of positional bindings. It works with the same named template format, only 
parameters are bound by position, left-to-right. Here we showing a more complex 
example with the same parameter name being used more than once in the 
query:</p> 
     </div> 
     <div class="listingblock"> 
      <div class="content"> 
@@ -195,7 +195,7 @@ Expression e = ExpressionFactory.exp(
      </div> 
     </div> 
     <div class="paragraph"> 
-     <p>This API is supported in Expressions, SQLTemplate as well as new 
SQLSelect and can be used interchnageably with named parameters with a single 
template flavor.</p> 
+     <p>This API is supported in Expressions, SQLTemplate as well as new 
SQLSelect and can be used interchangeably with named parameters with a single 
template flavor.</p> 
     </div> 
    </div> 
    <div class="sect3"> 
@@ -268,19 +268,19 @@ Expression e = ExpressionFactory.exp(
    <div class="sect3"> 
     <h4 id="cdbimport"><a class="anchor" href="#cdbimport"></a>cdbimport</h4> 
     <div class="paragraph"> 
-     <p>"cdbimport" has evolved from an experiment to a full-featured 
production tool that significantly reduces (and sometimes eliminates) the need 
for manual maintenance of the DataMaps in CayenneModeler. Two improvements made 
this possible. First, smart merge algorithm will ensure that custom changes to 
the model are not overridden on subsequent runs of "cdbimport". Second, the 
mechanism for specifing DB reverse-engineering parameters, such as name 
filtering, is made much more powerful with many new options. E.g. we started 
supporting filters by catalogs and schemas, table name filters can be added per 
catalog/schema or at the top level, etc.</p> 
+     <p><code>cdbimport</code> has evolved from an experiment to a 
full-featured production tool that significantly reduces (and sometimes 
eliminates) the need for manual maintenance of the DataMaps in CayenneModeler. 
Two improvements made this possible. First, smart merge algorithm will ensure 
that custom changes to the model are not overridden on subsequent runs of 
"cdbimport". Second, the mechanism for specifing DB reverse-engineering 
parameters, such as name filtering, is made much more powerful with many new 
options. E.g. we started supporting filters by catalogs and schemas, table name 
filters can be added per catalog/schema or at the top level, etc.</p> 
     </div> 
    </div> 
    <div class="sect3"> 
     <h4 id="cgen"><a class="anchor" href="#cgen"></a>cgen</h4> 
     <div class="paragraph"> 
-     <p>As was mentioned above, cgen now includes Property&lt;T&gt; static 
variables for expression building. It is also made smarter about its defaults 
for "destDir" and "superPkg".</p> 
+     <p>As was mentioned above, <code>cgen</code> now includes 
<code>Property&lt;T&gt;</code> static variables for expression building. It is 
also made smarter about its defaults for "destDir" and "superPkg".</p> 
     </div> 
    </div> 
    <div class="sect3"> 
     <h4 id="gradle-plugin"><a class="anchor" href="#gradle-plugin"></a>Gradle 
Plugin</h4> 
     <div class="paragraph"> 
-     <p>Cayenne now provides it’s own Gradle Plugin that allows you easily 
integrate cdbimport and cgen tools into your build process. Here is example of 
it’s usage:</p> 
+     <p>Cayenne now provides it’s own Gradle Plugin that allows you easily 
integrate <code>cdbimport</code> and <code>cgen</code> tools into your build 
process. Here is example of it’s usage:</p> 
     </div> 
     <div class="listingblock"> 
      <div class="content"> 
@@ -289,7 +289,7 @@ Expression e = ExpressionFactory.exp(
         mavenCentral()
     }
     dependencies {
-        classpath group: 'org.apache.cayenne.plugins', name: 
'cayenne-gradle-plugin', version: '4.0.B2'
+        classpath group: 'org.apache.cayenne.plugins', name: 
'cayenne-gradle-plugin', version: '4.0'
     }
 }
 

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/content/news/cayenne-40-final-released.md
----------------------------------------------------------------------
diff --git a/src/main/site/content/news/cayenne-40-final-released.md 
b/src/main/site/content/news/cayenne-40-final-released.md
new file mode 100644
index 0000000..fc54492
--- /dev/null
+++ b/src/main/site/content/news/cayenne-40-final-released.md
@@ -0,0 +1,34 @@
+---
+title: Cayenne 4.0 Final Released
+date: 2018-08-16T12:00:00+03:00
+---
+
+Apache Cayenne team is really glad to announce a long awaited release of 
_Cayenne 4.0_.
+
+It's really important milestone for all Cayenne community.
+Here is some facts how long this journey was:
+
+* Development started: _May 29, 2012_ (back then it was Cayenne 3.2)
+* Development releases: _8_
+* Changes and new features: _218_
+* Issues fixed: _179_
+* Commits made: _2421_
+* Authors: _29_
+
+Thanks to everyone who made it possible! 
+
+Cayenne can be downloaded from [here](/download.html).
+
+{{% gap %}}
+
+Here is bug fixes since release candidate:
+
+* {{% jira 2418 %}} Modeler: unable to edit entity selected via Search
+* {{% jira 2427 %}} Modeler: Undo throws exception
+* {{% jira 2430 %}} Modeler: Redo throws NPE
+* {{% jira 2431 %}} Cayenne JDK 11 compatibility
+* {{% jira 2435 %}} cdbimport: procedure parameters are not imported
+* {{% jira 2436 %}} NPE in CayenneRuntimeException constructor
+* {{% jira 2442 %}} Broken EventBridge providers implementations
+* {{% jira 2444 %}} Change URI from http:// to https:// in xsi:schemaLocation
+* {{% jira 2445 %}} Oracle: Problem with ExpressionFactory.notInExp()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/data/cayenne.yaml
----------------------------------------------------------------------
diff --git a/src/main/site/data/cayenne.yaml b/src/main/site/data/cayenne.yaml
index bdaeaa4..29f96c8 100644
--- a/src/main/site/data/cayenne.yaml
+++ b/src/main/site/data/cayenne.yaml
@@ -26,10 +26,10 @@
 releases:
 
   - version: "4.0"
-    latestRevision: "4.0.RC1"
+    latestRevision: "4.0"
     type: "Stable"
-    description: "Release Candidate"
-    date: "2018-04-25"
+    description: "Latest stable release"
+    date: "2018-08-15"
     docs: true
     downloadable: true
     jdk: 1.7
@@ -47,8 +47,8 @@ releases:
 
   - version: "3.1"
     latestRevision: "3.1.3"
-    description: "Latest stable release"
-    type: "Stable"
+    description: "Previous stable release"
+    type: "Aging"
     date: "2018-07-23"
     docs: true
     downloadable: true
@@ -56,7 +56,7 @@ releases:
 
   - version: "3.0"
     latestRevision: "3.0.2"
-    description: "Previous stable release"
+    description: "Legacy release"
     type: "Legacy"
     date: "2011-06-21"
     docs: true

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/static/docs/4.0/api/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/src/main/site/static/docs/4.0/api/allclasses-frame.html 
b/src/main/site/static/docs/4.0/api/allclasses-frame.html
index 7d82430..f2eee69 100644
--- a/src/main/site/static/docs/4.0/api/allclasses-frame.html
+++ b/src/main/site/static/docs/4.0/api/allclasses-frame.html
@@ -2,10 +2,10 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (1.8.0_111) on Mon Apr 23 10:59:11 MSK 2018 -->
+<!-- Generated by javadoc (1.8.0_111) on Thu Aug 16 11:39:03 MSK 2018 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>All Classes (cayenne-doc: Cayenne Documentation 4.0.RC1 API)</title>
-<meta name="date" content="2018-04-23">
+<title>All Classes (cayenne-doc: Cayenne Documentation 4.0 API)</title>
+<meta name="date" content="2018-08-16">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>

http://git-wip-us.apache.org/repos/asf/cayenne-website/blob/868c6ecf/src/main/site/static/docs/4.0/api/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/src/main/site/static/docs/4.0/api/allclasses-noframe.html 
b/src/main/site/static/docs/4.0/api/allclasses-noframe.html
index 7326624..e0dbca2 100644
--- a/src/main/site/static/docs/4.0/api/allclasses-noframe.html
+++ b/src/main/site/static/docs/4.0/api/allclasses-noframe.html
@@ -2,10 +2,10 @@
 <!-- NewPage -->
 <html lang="en">
 <head>
-<!-- Generated by javadoc (1.8.0_111) on Mon Apr 23 10:59:11 MSK 2018 -->
+<!-- Generated by javadoc (1.8.0_111) on Thu Aug 16 11:39:03 MSK 2018 -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>All Classes (cayenne-doc: Cayenne Documentation 4.0.RC1 API)</title>
-<meta name="date" content="2018-04-23">
+<title>All Classes (cayenne-doc: Cayenne Documentation 4.0 API)</title>
+<meta name="date" content="2018-08-16">
 <link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
 <script type="text/javascript" src="script.js"></script>
 </head>

Reply via email to