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 2018/01/05 13:10:40 UTC

[13/13] cayenne git commit: CAY-2371 Switch documentation from Docbook to Asciidoctor format

CAY-2371 Switch documentation from Docbook to Asciidoctor format


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/cde78f0b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/cde78f0b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/cde78f0b

Branch: refs/heads/STABLE-4.0
Commit: cde78f0b4d1eba0a70ceddd6fafddc77fca67856
Parents: 2f472ce
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Jan 5 16:09:37 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Jan 5 16:09:37 2018 +0300

----------------------------------------------------------------------
 .../resources/assemblies/assembly-generic.xml   |   8 +-
 .../main/resources/assemblies/assembly-mac.xml  |   8 +-
 .../resources/assemblies/assembly-windows.xml   |   8 +-
 .../asciidoc/cayenne-asciidoc-extension/pom.xml |  44 +
 .../cayenne/asciidoc/CayennePostProcessor.java  | 197 ++++
 docs/asciidoc/cayenne-guide/pom.xml             | 151 ++++
 .../_cayenne-guide/configurationProperties.adoc | 123 +++
 .../asciidoc/_cayenne-guide/expressionsBNF.adoc | 140 +++
 .../docs/asciidoc/_cayenne-guide/header.html    |  28 +
 .../asciidoc/_cayenne-guide/listOfTables.adoc   |  30 +
 .../src/docs/asciidoc/_cayenne-guide/part1.adoc |  21 +
 .../asciidoc/_cayenne-guide/part1/mapping.adoc  |  71 ++
 .../asciidoc/_cayenne-guide/part1/modeler.adoc  |  61 ++
 .../asciidoc/_cayenne-guide/part1/setup.adoc    | 112 +++
 .../src/docs/asciidoc/_cayenne-guide/part2.adoc |  33 +
 .../_cayenne-guide/part2/customize.adoc         | 473 ++++++++++
 .../_cayenne-guide/part2/expressions.adoc       | 279 ++++++
 .../_cayenne-guide/part2/including.adoc         | 662 ++++++++++++++
 .../_cayenne-guide/part2/lifecycle.adoc         | 273 ++++++
 .../_cayenne-guide/part2/objectContext.adoc     | 294 ++++++
 .../_cayenne-guide/part2/orderings.adoc         |  36 +
 .../asciidoc/_cayenne-guide/part2/queries.adoc  | 803 +++++++++++++++++
 .../asciidoc/_cayenne-guide/part2/starting.adoc | 118 +++
 .../asciidoc/_cayenne-guide/part2/tuning.adoc   | 354 ++++++++
 .../src/docs/asciidoc/_cayenne-guide/part3.adoc |  28 +
 .../_cayenne-guide/part3/clientImpl.adoc        |  16 +
 .../_cayenne-guide/part3/limitations.adoc       |  18 +
 .../docs/asciidoc/_cayenne-guide/part3/rop.adoc |  54 ++
 .../_cayenne-guide/part3/ropDeployment.adoc     |  34 +
 .../asciidoc/_cayenne-guide/part3/ropSetup.adoc |  20 +
 .../_cayenne-guide/part3/serverImpl.adoc        |  16 +
 .../src/docs/asciidoc/_cayenne-guide/part4.adoc |  25 +
 .../_cayenne-guide/part4/filtering.adoc         | 369 ++++++++
 .../_cayenne-guide/part4/introduction.adoc      |  75 ++
 .../_cayenne-guide/part4/otherSettings.adoc     |  64 ++
 .../_cayenne-guide/part4/revEngineering.adoc    |  57 ++
 .../src/docs/asciidoc/_cayenne-guide/part5.adoc |  30 +
 .../_cayenne-guide/part5/cacheInvalidation.adoc |  95 ++
 .../_cayenne-guide/part5/commitLog.adoc         |  83 ++
 .../asciidoc/_cayenne-guide/part5/crypto.adoc   | 116 +++
 .../_cayenne-guide/part5/dbcpIntegration.adoc   |  47 +
 .../asciidoc/_cayenne-guide/part5/jCache.adoc   |  51 ++
 .../asciidoc/_cayenne-guide/part5/java8.adoc    |  45 +
 .../asciidoc/_cayenne-guide/part5/jodaTime.adoc |  46 +
 .../_cayenne-guide/serviceCollections.adoc      |  62 ++
 .../src/docs/asciidoc/_cayenne-guide/var.adoc   |   1 +
 .../src/docs/asciidoc/cayenne-guide.adoc        |  56 ++
 .../asciidoc/images/ext-crypto-obj-entity.png   | Bin 0 -> 18145 bytes
 .../src/docs/asciidoc/images/ext-dbcp-setup.png | Bin 0 -> 33026 bytes
 .../images/re-modeler-datasource-select.png     | Bin 0 -> 32658 bytes
 .../re-modeler-reverseengineering-dialog.png    | Bin 0 -> 37668 bytes
 .../images/remote-object-persistence.jpg        | Bin 0 -> 54407 bytes
 docs/asciidoc/getting-started-guide/pom.xml     | 170 ++++
 .../asciidoc/_getting-started-guide/delete.adoc |  72 ++
 .../asciidoc/_getting-started-guide/header.html |  29 +
 .../_getting-started-guide/java-classes.adoc    | 113 +++
 .../_getting-started-guide/object-context.adoc  |  89 ++
 .../object-relational-mapping.adoc              | 109 +++
 .../asciidoc/_getting-started-guide/part2.adoc  |  20 +
 .../asciidoc/_getting-started-guide/part3.adoc  |  22 +
 .../persistent-objects.adoc                     | 111 +++
 .../_getting-started-guide/select-query.adoc    |  56 ++
 .../asciidoc/_getting-started-guide/setup.adoc  |  26 +
 .../starting-project.adoc                       | 111 +++
 .../asciidoc/_getting-started-guide/webapp.adoc | 280 ++++++
 .../docs/asciidoc/getting-started-guide.adoc    |  48 +
 .../src/docs/asciidoc/images/base-datamap.png   | Bin 0 -> 90863 bytes
 .../src/docs/asciidoc/images/base-datanode.png  | Bin 0 -> 93515 bytes
 .../asciidoc/images/cayenne-tutorial-model.png  | Bin 0 -> 18875 bytes
 .../src/docs/asciidoc/images/chrome-webapp.png  | Bin 0 -> 42124 bytes
 .../docs/asciidoc/images/database-schema.jpg    | Bin 0 -> 28434 bytes
 .../src/docs/asciidoc/images/icon-attribute.png | Bin 0 -> 293 bytes
 .../src/docs/asciidoc/images/icon-datamap.png   | Bin 0 -> 411 bytes
 .../src/docs/asciidoc/images/icon-dbentity.png  | Bin 0 -> 142 bytes
 .../src/docs/asciidoc/images/icon-edit.png      | Bin 0 -> 340 bytes
 .../docs/asciidoc/images/icon-new_objentity.png | Bin 0 -> 563 bytes
 .../src/docs/asciidoc/images/icon-node.png      | Bin 0 -> 350 bytes
 .../docs/asciidoc/images/icon-relationship.png  | Bin 0 -> 347 bytes
 .../src/docs/asciidoc/images/icon-sync.png      | Bin 0 -> 280 bytes
 .../images/idea-edit-configurations.png         | Bin 0 -> 17245 bytes
 .../docs/asciidoc/images/idea-file-run-menu.png | Bin 0 -> 32911 bytes
 .../asciidoc/images/idea-generated-classes.png  | Bin 0 -> 207620 bytes
 .../asciidoc/images/idea-run-configuration.png  | Bin 0 -> 93059 bytes
 .../src/docs/asciidoc/images/idea-xmlfiles.png  | Bin 0 -> 27783 bytes
 .../docs/asciidoc/images/modeler-artistid.png   | Bin 0 -> 60176 bytes
 .../asciidoc/images/modeler-dbrelationship.png  | Bin 0 -> 41430 bytes
 .../docs/asciidoc/images/modeler-deleterule.png | Bin 0 -> 78049 bytes
 .../docs/asciidoc/images/modeler-started.png    | Bin 0 -> 95897 bytes
 .../asciidoc/images/tutorial-idea-project.png   | Bin 0 -> 48037 bytes
 .../src/docs/asciidoc/var.adoc                  |   1 +
 docs/asciidoc/getting-started-rop/pom.xml       | 151 ++++
 .../asciidoc/_getting-started-rop/header.html   |  24 +
 .../asciidoc/_getting-started-rop/part1.adoc    |  17 +
 .../part1/prerequisites.adoc                    |  25 +
 .../asciidoc/_getting-started-rop/part2.adoc    |  23 +
 .../_getting-started-rop/part2/adding.adoc      | 126 +++
 .../_getting-started-rop/part2/connect.adoc     | 174 ++++
 .../part2/hessianWebServ.adoc                   | 113 +++
 .../_getting-started-rop/part2/starting.adoc    |  93 ++
 .../docs/asciidoc/_getting-started-rop/var.adoc |   1 +
 .../src/docs/asciidoc/getting-started-rop.adoc  |  45 +
 .../asciidoc/images/datamap-enableclient.png    | Bin 0 -> 104778 bytes
 docs/asciidoc/pom.xml                           | 132 +++
 docs/asciidoc/upgrade-guide/pom.xml             | 151 ++++
 .../docs/asciidoc/_upgrade_guide/features.adoc  | 245 +++++
 .../docs/asciidoc/_upgrade_guide/header.html    |  24 +
 .../src/docs/asciidoc/upgrade-guide.adoc        |  44 +
 docs/docbook/cayenne-guide/pom.xml              |  31 -
 .../cayenne-guide/src/docbkx/appendix-a.xml     | 190 ----
 .../cayenne-guide/src/docbkx/appendix-b.xml     | 100 ---
 .../cayenne-guide/src/docbkx/appendix-c.xml     | 147 ---
 .../src/docbkx/cayenne-mapping-structure.xml    |  95 --
 .../src/docbkx/cayennemodeler-application.xml   | 116 ---
 .../src/docbkx/current-limitations.xml          |  20 -
 .../src/docbkx/customizing-cayenne-runtime.xml  | 473 ----------
 .../cayenne-guide/src/docbkx/expressions.xml    | 303 -------
 .../src/docbkx/ext-cache-invalidation.xml       |  91 --
 .../cayenne-guide/src/docbkx/ext-commit-log.xml |  89 --
 .../cayenne-guide/src/docbkx/ext-crypto.xml     | 135 ---
 .../cayenne-guide/src/docbkx/ext-dbcp2.xml      |  59 --
 .../cayenne-guide/src/docbkx/ext-java8.xml      |  53 --
 .../cayenne-guide/src/docbkx/ext-jcache.xml     |  61 --
 .../cayenne-guide/src/docbkx/ext-joda.xml       |  53 --
 .../src/docbkx/implementing-rop-client.xml      |  20 -
 .../src/docbkx/implementing-rop-server.xml      |  20 -
 .../src/docbkx/including-cayenne-in-project.xml | 893 -------------------
 docs/docbook/cayenne-guide/src/docbkx/index.xml |  49 -
 .../src/docbkx/lifecycle-events.xml             | 314 -------
 .../cayenne-guide/src/docbkx/orderings.xml      |  31 -
 docs/docbook/cayenne-guide/src/docbkx/part1.xml |  23 -
 docs/docbook/cayenne-guide/src/docbkx/part2.xml |  29 -
 docs/docbook/cayenne-guide/src/docbkx/part3.xml |  26 -
 docs/docbook/cayenne-guide/src/docbkx/part4.xml |  24 -
 docs/docbook/cayenne-guide/src/docbkx/part5.xml |  30 -
 .../src/docbkx/performance-tuning.xml           | 379 --------
 .../docbkx/persistent-objects-objectcontext.xml | 288 ------
 .../cayenne-guide/src/docbkx/queries-custom.xml |  57 --
 .../cayenne-guide/src/docbkx/queries-ejbql.xml  |  94 --
 .../cayenne-guide/src/docbkx/queries-mapped.xml |  44 -
 .../src/docbkx/queries-namedquery.xml           |  35 -
 .../src/docbkx/queries-procedure.xml            |  67 --
 .../src/docbkx/queries-procedurecall.xml        |  61 --
 .../cayenne-guide/src/docbkx/queries-select.xml | 111 ---
 .../src/docbkx/queries-selectbyid.xml           |  33 -
 .../src/docbkx/queries-sqlselect.xml            |  45 -
 .../src/docbkx/queries-sqltemplate.xml          | 420 ---------
 .../cayenne-guide/src/docbkx/queries.xml        |  55 --
 .../cayenne-guide/src/docbkx/re-filtering.xml   | 356 --------
 .../src/docbkx/re-introduction.xml              |  88 --
 .../cayenne-guide/src/docbkx/re-modeler.xml     | 122 ---
 .../src/docbkx/re-other-settings.xml            |  65 --
 .../cayenne-guide/src/docbkx/rop-deployment.xml |  47 -
 .../src/docbkx/rop-introduction.xml             |  98 --
 .../cayenne-guide/src/docbkx/rop-setup.xml      |  26 -
 docs/docbook/cayenne-guide/src/docbkx/setup.xml | 176 ----
 .../src/docbkx/starting-cayenne.xml             | 157 ----
 .../docbook/cayenne-guide/src/images/.gitignore |   0
 .../src/images/ext-crypto-obj-entity.png        | Bin 18145 -> 0 bytes
 .../cayenne-guide/src/images/ext-dbcp-setup.png | Bin 33026 -> 0 bytes
 .../src/images/re-modeler-datasource-select.png | Bin 32658 -> 0 bytes
 .../re-modeler-reverseengineering-dialog.png    | Bin 37668 -> 0 bytes
 .../src/images/remote-object-persistence.jpg    | Bin 54407 -> 0 bytes
 docs/docbook/docbook-stylesheets/pom.xml        |  45 -
 .../src/main/resources/css/cayenne-doc.css      | 148 ---
 .../src/main/resources/css/highlight.css        |  35 -
 .../stylesheets/common-customizations.xsl       |  32 -
 .../main/resources/stylesheets/highlight.xsl    | 104 ---
 .../src/main/resources/stylesheets/html.xsl     | 244 -----
 .../src/main/resources/stylesheets/pdf.xsl      | 505 -----------
 docs/docbook/getting-started-rop/pom.xml        |  39 -
 .../src/docbkx/authentication.xml               | 128 ---
 .../src/docbkx/client-code.xml                  | 159 ----
 .../src/docbkx/client-project.xml               | 131 ---
 .../getting-started-rop/src/docbkx/index.xml    |  43 -
 .../getting-started-rop/src/docbkx/part1.xml    |  22 -
 .../getting-started-rop/src/docbkx/part2.xml    |  24 -
 .../getting-started-rop/src/docbkx/setup.xml    |  53 --
 .../src/docbkx/web-service.xml                  | 131 ---
 .../src/images/datamap-enableclient.png         | Bin 104778 -> 0 bytes
 docs/docbook/getting-started/pom.xml            |  40 -
 .../getting-started/src/docbkx/delete.xml       |  79 --
 .../getting-started/src/docbkx/index.xml        |  44 -
 .../getting-started/src/docbkx/java-classes.xml | 129 ---
 .../src/docbkx/object-context.xml               | 103 ---
 .../src/docbkx/object-relational-mapping.xml    | 184 ----
 .../getting-started/src/docbkx/part1.xml        |  21 -
 .../getting-started/src/docbkx/part2.xml        |  25 -
 .../getting-started/src/docbkx/part3.xml        |  26 -
 .../getting-started/src/docbkx/part4.xml        |  22 -
 .../src/docbkx/persistent-objects.xml           | 145 ---
 .../getting-started/src/docbkx/select-query.xml |  60 --
 .../getting-started/src/docbkx/setup.xml        |  36 -
 .../src/docbkx/starting-project.xml             | 165 ----
 .../getting-started/src/docbkx/webapp.xml       | 308 -------
 .../getting-started/src/images/base-datamap.png | Bin 90863 -> 0 bytes
 .../src/images/base-datanode.png                | Bin 93515 -> 0 bytes
 .../src/images/chrome-webapp.png                | Bin 42124 -> 0 bytes
 .../src/images/database-schema.jpg              | Bin 28434 -> 0 bytes
 .../src/images/icon-attribute.png               | Bin 293 -> 0 bytes
 .../getting-started/src/images/icon-datamap.png | Bin 411 -> 0 bytes
 .../src/images/icon-dbentity.png                | Bin 142 -> 0 bytes
 .../getting-started/src/images/icon-edit.png    | Bin 340 -> 0 bytes
 .../src/images/icon-new_objentity.png           | Bin 563 -> 0 bytes
 .../getting-started/src/images/icon-node.png    | Bin 350 -> 0 bytes
 .../src/images/icon-relationship.png            | Bin 347 -> 0 bytes
 .../getting-started/src/images/icon-sync.png    | Bin 280 -> 0 bytes
 .../src/images/idea-edit-configurations.png     | Bin 17245 -> 0 bytes
 .../src/images/idea-file-run-menu.png           | Bin 32911 -> 0 bytes
 .../src/images/idea-generated-classes.png       | Bin 207620 -> 0 bytes
 .../src/images/idea-run-configuration.png       | Bin 93059 -> 0 bytes
 .../src/images/idea-xmlfiles.png                | Bin 27783 -> 0 bytes
 .../src/images/modeler-artistid.png             | Bin 60176 -> 0 bytes
 .../src/images/modeler-dbrelationship.png       | Bin 41430 -> 0 bytes
 .../src/images/modeler-deleterule.png           | Bin 78049 -> 0 bytes
 .../src/images/modeler-started.png              | Bin 95897 -> 0 bytes
 .../src/images/tutorial-idea-project.png        | Bin 48037 -> 0 bytes
 docs/docbook/pom.xml                            | 126 ---
 docs/docbook/upgrade-guide/pom.xml              |  38 -
 docs/docbook/upgrade-guide/src/docbkx/index.xml |  27 -
 .../upgrade-guide/src/docbkx/new-features.xml   | 238 -----
 .../docbook/upgrade-guide/src/images/.gitignore |   2 -
 docs/pom.xml                                    |   2 +-
 .../java/org/apache/cayenne/tutorial/Main.java  |   8 +
 .../cayenne/tutorial/persistent/Artist.java     |  10 +-
 tutorials/tutorial/src/main/webapp/detail.jsp   |   4 +-
 tutorials/tutorial/src/main/webapp/index.jsp    |   4 +-
 226 files changed, 8390 insertions(+), 9978 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/assembly/src/main/resources/assemblies/assembly-generic.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/assemblies/assembly-generic.xml b/assembly/src/main/resources/assemblies/assembly-generic.xml
index ad121d3..4b9028e 100644
--- a/assembly/src/main/resources/assemblies/assembly-generic.xml
+++ b/assembly/src/main/resources/assemblies/assembly-generic.xml
@@ -54,22 +54,22 @@
 
 	<files>
 		<file>
-			<source>../docs/docbook/getting-started/target/site/getting-started.pdf</source>
+			<source>../docs/asciidoc/getting-started-guide/target/generated-docs/getting-started-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>getting-started.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/getting-started-rop/target/site/getting-started-rop.pdf</source>
+			<source>../docs/asciidoc/getting-started-rop/target/generated-docs/getting-started-rop.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>getting-started-rop.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/cayenne-guide/target/site/cayenne-guide.pdf</source>
+			<source>../docs/asciidoc/cayenne-guide/target/generated-docs/cayenne-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>cayenne-guide.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/upgrade-guide/target/site/upgrade-guide.pdf</source>
+			<source>../docs/asciidoc/upgrade-guide/target/generated-docs/upgrade-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>upgrade-guide.pdf</destName>
 		</file>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/assembly/src/main/resources/assemblies/assembly-mac.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/assemblies/assembly-mac.xml b/assembly/src/main/resources/assemblies/assembly-mac.xml
index 0261484..b2d292d 100644
--- a/assembly/src/main/resources/assemblies/assembly-mac.xml
+++ b/assembly/src/main/resources/assemblies/assembly-mac.xml
@@ -52,22 +52,22 @@
 
 	<files>
 		<file>
-			<source>../docs/docbook/getting-started/target/site/getting-started.pdf</source>
+			<source>../docs/asciidoc/getting-started-guide/target/generated-docs/getting-started-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>getting-started.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/getting-started-rop/target/site/getting-started-rop.pdf</source>
+			<source>../docs/asciidoc/getting-started-rop/target/generated-docs/getting-started-rop.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>getting-started-rop.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/cayenne-guide/target/site/cayenne-guide.pdf</source>
+			<source>../docs/asciidoc/cayenne-guide/target/generated-docs/cayenne-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>cayenne-guide.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/upgrade-guide/target/site/upgrade-guide.pdf</source>
+			<source>../docs/asciidoc/upgrade-guide/target/generated-docs/upgrade-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>upgrade-guide.pdf</destName>
 		</file>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/assembly/src/main/resources/assemblies/assembly-windows.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/assemblies/assembly-windows.xml b/assembly/src/main/resources/assemblies/assembly-windows.xml
index 185ab68..2263287 100644
--- a/assembly/src/main/resources/assemblies/assembly-windows.xml
+++ b/assembly/src/main/resources/assemblies/assembly-windows.xml
@@ -52,22 +52,22 @@
 
 	<files>
 		<file>
-			<source>../docs/docbook/getting-started/target/site/getting-started.pdf</source>
+			<source>../docs/asciidoc/getting-started-guide/target/generated-docs/getting-started-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>getting-started.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/getting-started-rop/target/site/getting-started-rop.pdf</source>
+			<source>../docs/asciidoc/getting-started-rop/target/generated-docs/getting-started-rop.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>getting-started-rop.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/cayenne-guide/target/site/cayenne-guide.pdf</source>
+			<source>../docs/asciidoc/cayenne-guide/target/generated-docs/cayenne-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>cayenne-guide.pdf</destName>
 		</file>
 		<file>
-			<source>../docs/docbook/upgrade-guide/target/site/upgrade-guide.pdf</source>
+			<source>../docs/asciidoc/upgrade-guide/target/generated-docs/upgrade-guide.pdf</source>
 			<outputDirectory>doc</outputDirectory>
 			<destName>upgrade-guide.pdf</destName>
 		</file>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-asciidoc-extension/pom.xml
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-asciidoc-extension/pom.xml b/docs/asciidoc/cayenne-asciidoc-extension/pom.xml
new file mode 100644
index 0000000..662594e
--- /dev/null
+++ b/docs/asciidoc/cayenne-asciidoc-extension/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~   Licensed to the Apache Software Foundation (ASF) under one
+  ~  or more contributor license agreements.  See the NOTICE file
+  ~  distributed with this work for additional information
+  ~  regarding copyright ownership.  The ASF licenses this file
+  ~  to you under the Apache License, Version 2.0 (the
+  ~  "License"); you may not use this file except in compliance
+  ~  with the License.  You may obtain a copy of the License at
+  ~
+  ~    http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~  Unless required by applicable law or agreed to in writing,
+  ~  software distributed under the License is distributed on an
+  ~  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~  KIND, either express or implied.  See the License for the
+  ~  specific language governing permissions and limitations
+  ~  under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>cayenne-asciidoc-parent</artifactId>
+        <groupId>org.apache.cayenne.docs</groupId>
+        <version>4.0.B3-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>cayenne-asciidoc-extension</artifactId>
+    <description>AsciidoctorJ extension for website version of Cayenne documentation</description>
+    <packaging>jar</packaging>
+    <modelVersion>4.0.0</modelVersion>
+
+    <dependencies>
+        <dependency>
+            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.11.2</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-asciidoc-extension/src/main/java/org/apache/cayenne/asciidoc/CayennePostProcessor.java
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-asciidoc-extension/src/main/java/org/apache/cayenne/asciidoc/CayennePostProcessor.java b/docs/asciidoc/cayenne-asciidoc-extension/src/main/java/org/apache/cayenne/asciidoc/CayennePostProcessor.java
new file mode 100644
index 0000000..1502429
--- /dev/null
+++ b/docs/asciidoc/cayenne-asciidoc-extension/src/main/java/org/apache/cayenne/asciidoc/CayennePostProcessor.java
@@ -0,0 +1,197 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+
+package org.apache.cayenne.asciidoc;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+import java.util.Collections;
+import java.util.Map;
+
+import org.asciidoctor.Options;
+import org.asciidoctor.ast.Document;
+import org.asciidoctor.ast.DocumentRuby;
+import org.asciidoctor.extension.Postprocessor;
+import org.jsoup.Jsoup;
+
+/**
+ * <p>
+ * AsciidoctorJ post processor, that extracts ToC into separate file and optionally can inject content into rendered document.
+ * Can be used only for HTML backend, will <b>fail</b> if used with PDF.
+ * <p>
+ * It is targeted to inject "front-matter" section suitable for cayenne website tools.
+ * <p>
+ * Extension controlled by attributes in *.adoc file:
+ * <ul>
+ *     <li>cayenne-header: header file name or constant "front-matter" that will inject empty front matter markup
+ *     <li>cayenne-header-position [optional]: "top" to inject just above all content or "body" to inject right after &gt;body&lt; tag
+ *     <li>cayenne-footer: footer file name or constant "front-matter" that will inject empty front matter markup
+ *     <li>cayenne-footer-position [optional]: "bottom" to inject just after all content or "body" to inject right before &gt;/body&lt; tag
+ * </ul>
+ *
+ * @since 4.1
+ */
+public class CayennePostProcessor extends Postprocessor {
+
+    private static final String FRONT_MATTER = "front-matter";
+    private static final String EMPTY_FRONT_MATTER = "---\n---\n\n";
+    private static final String POSITION_TOP = "top";
+    private static final String POSITION_BODY = "body";
+    private static final String POSITION_BOTTOM = "bottom";
+
+    public CayennePostProcessor(DocumentRuby documentRuby) {
+        super();
+    }
+
+    public String process(Document document, String output) {
+        output = extractTableOfContents(document, output);
+        output = fixupDom(document, output);
+        output = processHeader(document, output);
+        output = processFooter(document, output);
+        return output;
+    }
+
+    private String fixupDom(Document document, String output) {
+        org.jsoup.nodes.Document jsoupDoc = Jsoup.parseBodyFragment(output);
+
+        jsoupDoc.select(".icon-note")
+                .removeClass("icon-note")
+                .addClass("fa-info-circle")
+                .addClass("fa-2x");
+
+        jsoupDoc.select(".icon-tip")
+                .removeClass("icon-tip")
+                .addClass("fa-lightbulb-o")
+                .addClass("fa-2x");
+
+        jsoupDoc.select("code").forEach(el -> {
+            String codeClass = el.attr("data-lang");
+            if(!codeClass.isEmpty()) {
+                el.addClass(codeClass);
+            }
+        });
+
+        jsoupDoc.select("div#preamble").remove();
+
+        return jsoupDoc.body().html();
+    }
+
+    protected String extractTableOfContents(Document document, String output) {
+        int start = output.indexOf("<div id=\"toc\" class=\"toc\">");
+        if(start == -1) {
+            // no toc found, exit
+            return output;
+        }
+
+        String tocEndString = "</ul>\n</div>";
+        int end = output.indexOf(tocEndString, start);
+        if(end == -1) {
+            // bad, no end..
+            return output;
+        }
+
+        end += tocEndString.length() + 1;
+
+        org.jsoup.nodes.Document tocDoc = Jsoup.parseBodyFragment(output.substring(start, end));
+        tocDoc.select("ul").addClass("nav");
+        tocDoc.select("a").addClass("nav-link");
+        tocDoc.select("div#toc").addClass("toc-side");
+        String toc = tocDoc.body().html();
+
+        Object destDir = document.getOptions().get(Options.DESTINATION_DIR);
+        Object docname = ((Map)document.getOptions().get(Options.ATTRIBUTES)).get("docname");
+
+        Path path = FileSystems.getDefault().getPath((String) destDir, docname + ".toc.html");
+        try(BufferedWriter br = Files.newBufferedWriter(path, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE)) {
+            br.write(toc, 0, toc.length());
+            br.flush();
+        } catch (IOException ex) {
+            ex.printStackTrace(System.err);
+        }
+
+        if(start == 0) {
+            return output.substring(end);
+        }
+
+        return output.substring(0, start) + output.substring(end);
+    }
+
+    protected String processHeader(Document document, String output) {
+        String headerFile = (String) document.getAttr("cayenne-header", "");
+        String headerPosition = (String)document.getAttr("cayenne-header-position", POSITION_TOP);
+
+        if(headerFile.isEmpty()) {
+            return output;
+        }
+
+        String header = "";
+        // inject empty front matter
+        if(FRONT_MATTER.equals(headerFile.trim())) {
+            header = EMPTY_FRONT_MATTER ;
+        } else {
+            // treat as a file
+            header = document.readAsset(headerFile, Collections.emptyMap());
+        }
+
+        switch (headerPosition.trim()) {
+            case POSITION_BODY: {
+                int bodyStart = output.indexOf("<div id=\"header\">");
+                if(bodyStart == -1) {
+                    // no header
+                    return header + output;
+                }
+                return output.substring(0, bodyStart) + header + output.substring(bodyStart);
+            }
+
+            case POSITION_TOP:
+            default:
+                return header + output;
+        }
+    }
+
+    protected String processFooter(Document document, String output) {
+        String footerFile = (String) document.getAttr("cayenne-footer", "");
+        String footerPosition = (String)document.getAttr("cayenne-footer-position", POSITION_BOTTOM);
+
+        if(footerFile.isEmpty()) {
+            return output;
+        }
+
+        String footer = document.readAsset(footerFile, Collections.emptyMap());
+
+        switch (footerPosition.trim()) {
+            case POSITION_BODY: {
+                int bodyStart = output.indexOf("</body>");
+                if(bodyStart == -1) {
+                    // no footer
+                    return output + footer;
+                }
+                return output.substring(0, bodyStart) + footer + output.substring(bodyStart);
+            }
+
+            case POSITION_BOTTOM:
+            default:
+                return output + footer;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/pom.xml
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/pom.xml b/docs/asciidoc/cayenne-guide/pom.xml
new file mode 100644
index 0000000..89027c0
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/pom.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>cayenne-asciidoc-parent</artifactId>
+        <groupId>org.apache.cayenne.docs</groupId>
+        <version>4.0.B3-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>cayenne-guide</artifactId>
+
+    <packaging>jar</packaging>
+    <name>cayenne-guide: AsciiDoc - Cayenne Framework Guide</name>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.asciidoctor</groupId>
+                <artifactId>asciidoctor-maven-plugin</artifactId>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.cayenne.docs</groupId>
+                        <artifactId>cayenne-asciidoc-extension</artifactId>
+                        <version>${project.version}</version>
+                    </dependency>
+                </dependencies>
+
+                <executions>
+                    <!-- generate "embeddable" html content with front matter and without header/footer/styles -->
+                    <execution>
+                        <id>asciidoctor-html-web</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>process-asciidoc</goal>
+                        </goals>
+                        <configuration>
+                            <backend>html5</backend>
+                            <headerFooter>false</headerFooter> <!-- do not generate header and footer -->
+                            <outputDirectory>${project.build.directory}/tmp/</outputDirectory>
+                            <extensions>
+                                <extension>
+                                    <className>org.apache.cayenne.asciidoc.CayennePostProcessor</className>
+                                </extension>
+                            </extensions>
+                            <attributes>
+                                <toc>auto</toc>
+                            </attributes>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- Move images to proper path for site -->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy docs for site</id>
+                        <phase>install</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/site/</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${project.build.directory}/tmp/</directory>
+                                    <includes>
+                                        <include>${project.artifactId}.html</include>
+                                        <include>${project.artifactId}.toc.html</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+
+                    <execution>
+                        <id>copy images for site</id>
+                        <phase>install</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/site/${project.artifactId}/images/</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${project.build.directory}/tmp/images/</directory>
+                                    <filtering>true</filtering>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>assembly</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.asciidoctor</groupId>
+                        <artifactId>asciidoctor-maven-plugin</artifactId>
+                        <executions>
+                            <!-- generate standalone html help -->
+                            <execution>
+                                <id>asciidoctor-html-standalone</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>process-asciidoc</goal>
+                                </goals>
+                                <configuration>
+                                    <backend>html5</backend>
+                                    <sourceHighlighter>coderay</sourceHighlighter>
+                                    <embedAssets>true</embedAssets>
+                                    <attributes>
+                                        <toc>left</toc>
+                                    </attributes>
+                                </configuration>
+                            </execution>
+
+                            <!-- generate PDF -->
+                            <execution>
+                                <id>generate-pdf-doc</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>process-asciidoc</goal>
+                                </goals>
+                                <configuration>
+                                    <backend>pdf</backend>
+                                    <sourceHighlighter>coderay</sourceHighlighter>
+                                    <attributes>
+                                        <pagenums/>
+                                        <toc/>
+                                    </attributes>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/configurationProperties.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/configurationProperties.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/configurationProperties.adoc
new file mode 100644
index 0000000..2bedc73
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/configurationProperties.adoc
@@ -0,0 +1,123 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+== Appendix A. Configuration Properties
+
+Note that the property names below are defined as constants in `org.apache.cayenne.configuration.Constants` interface.
+
+[#configProperties]
+* `cayenne.jdbc.driver[.domain_name.node_name]`
+   defines a JDBC driver class to use when creating a DataSource. If domain name and optionally - node name are specified,
+   the setting overrides DataSource info just for this domain/node. Otherwise the override is applied to all domains/nodes in the system.
+    ** Default value: none, project DataNode configuration is used
+
+* `cayenne.jdbc.url[.domain_name.node_name]`
+    defines a DB URL to use when creating a DataSource. If domain name and optionally - node name are specified,
+    the setting overrides DataSource info just for this domain/node. Otherwise the override is applied to all domains/nodes in the system.
+    ** Default value: none, project DataNode configuration is used
+
+* `cayenne.jdbc.username[.domain_name.node_name]`
+   defines a DB user name to use when creating a DataSource. If domain name and optionally - node name are specified,
+   the setting overrides DataSource info just for this domain/node. Otherwise the override is applied to all domains/nodes in the system.
+    ** Possible values: any
+    ** Default value: none, project DataNode configuration is used
+
+* `cayenne.jdbc.password[.domain_name.node_name]`
+   defines a DB password to use when creating a DataSource. If domain name and optionally - node name are specified,
+   the setting overrides DataSource info just for this domain/node. Otherwise the override is applied to all domains/nodes in the system
+    ** Default value: none, project DataNode configuration is used
+
+* `cayenne.jdbc.min_connections[.domain_name.node_name]`
+   defines the DB connection pool minimal size. If domain name and optionally - node name are specified, the setting
+   overrides DataSource info just for this domain/node. Otherwise the override is applied to all domains/nodes in the system
+    ** Default value: none, project DataNode configuration is used
+
+* `cayenne.jdbc.max_connections[.domain_name.node_name]`
+   defines the DB connection pool maximum size. If domain name and optionally - node name are specified, the setting
+   overrides DataSource info just for this domain/node. Otherwise the override is applied to all domains/nodes in the system
+    ** Default value: none, project DataNode configuration is used
+
+* `cayenne.querycache.size`
+   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.
+    ** Possible values: any positive int value
+    ** Default value: 2000
+
+* `cayenne.server.contexts_sync_strategy`
+   defines whether peer ObjectContexts should receive snapshot events after commits from other contexts. If true (_default_),
+   the contexts would automatically synchronize their state with peers.
+    ** Possible values: true, false
+    ** Default value: true
+
+* `cayenne.server.object_retain_strategy`
+   defines fetched objects retain strategy for ObjectContexts. When weak or soft strategy is used, objects retained by ObjectContext
+   that have no local changes can potentially get garbage collected when JVM feels like doing it.
+    ** Possible values: weak, soft, hard
+    ** Default value: weak
+
+* `cayenne.server.max_id_qualifier_size`
+   defines a maximum number of ID qualifiers in the WHERE clause of queries that are generated for paginated queries and for DISJOINT_BY_ID prefetch processing.
+   This is needed to avoid hitting WHERE clause size limitations and memory usage efficiency.
+    ** Possible values: any positive int
+    ** Default value: 10000
+
+* `cayenne.server.external_tx`
+   defines whether runtime should use external transactions.
+    ** Possible values: true, false
+    ** Default value: false
+
+* `cayenne.rop.service_url`
+   defines the URL of the ROP server
+    ** Default value: none
+
+* `cayenne.rop.service_username`
+   defines the user name for an ROP client to login to an ROP server.
+    ** Default value: none
+
+* `cayenne.rop.service_password`
+   defines the password for an ROP client to login to an ROP server.
+    ** Default value: none
+
+* `cayenne.rop.shared_session_name`
+   defines the name of the shared session that an ROP client wants to join on an ROP server. If omitted, a dedicated session is created.
+    ** Default value: none
+
+* `cayenne.rop.service.timeout`
+   a value in milliseconds for the ROP client-server connection read operation timeout
+    ** Possible values: any positive long value
+    ** Default value: none
+
+* `cayenne.rop.channel_events`
+   defines whether client-side DataChannel should dispatch events to child ObjectContexts.
+   If set to true, ObjectContexts will receive commit events and merge changes committed by peer contexts that passed through the common client DataChannel.
+    ** Possible values: true, false
+    ** Default value: false
+
+* `cayenne.rop.context_change_events`
+   defines whether object property changes in the client context result in firing events. Client UI components can listen to these events and update the UI. Disabled by default.
+    ** Possible values: true, false
+    ** Default value: false
+
+* `cayenne.rop.context_lifecycle_events`
+   defines whether object commit and rollback operations in the client context result in firing events.
+   Client UI components can listen to these events and update the UI. Disabled by default.
+    ** Possible values: true,false
+    ** Default value: false
+
+* `cayenne.server.rop_event_bridge_factory`
+   defines the name of the `org.apache.cayenne.event.EventBridgeFactory` that is passed from the ROP server to the client.
+   I.e. server DI would provide a name of the factory, passing this name to the client via the wire.
+   The client would instantiate it to receive events from the server. Note that this property is stored
+   in `cayenne.server.rop_event_bridge_properties` map, not in the main `cayenne.properties`.
+   ** Default value: false
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/expressionsBNF.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/expressionsBNF.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/expressionsBNF.adoc
new file mode 100644
index 0000000..ee3726a
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/expressionsBNF.adoc
@@ -0,0 +1,140 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+== Appendix C. Expressions BNF
+
+[source]
+----
+TOKENS
+<DEFAULT> SKIP : {
+" "
+| "\t"
+| "\n"
+| "\r"
+}
+
+<DEFAULT> TOKEN : {
+<NULL: "null" | "NULL">
+| <TRUE: "true" | "TRUE">
+| <FALSE: "false" | "FALSE">
+}
+
+<DEFAULT> TOKEN : {
+<PROPERTY_PATH: <IDENTIFIER> ("." <IDENTIFIER>)*>
+}
+
+<DEFAULT> TOKEN : {
+<IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)* (["+"])?>
+| <#LETTER: ["_","a"-"z","A"-"Z"]>
+| <#DIGIT: ["0"-"9"]>
+}
+
+/**
+ * Quoted Strings, whose object value is stored in the token manager's
+ * "literalValue" field. Both single and double qoutes are allowed
+ */<DEFAULT> MORE : {
+"\'" : WithinSingleQuoteLiteral
+| "\"" : WithinDoubleQuoteLiteral
+}
+
+<WithinSingleQuoteLiteral> MORE : {
+<ESC: "\\" (["n","r","t","b","f","\\","\'","`","\""] | (["0"-"3"])? ["0"-"7"] (["0"-"7"])?)> : {
+| <~["\'","\\"]> : {
+}
+
+<WithinSingleQuoteLiteral> TOKEN : {
+<SINGLE_QUOTED_STRING: "\'"> : DEFAULT
+}
+
+<WithinDoubleQuoteLiteral> MORE : {
+<STRING_ESC: <ESC>> : {
+| <~["\"","\\"]> : {
+}
+
+<WithinDoubleQuoteLiteral> TOKEN : {
+<DOUBLE_QUOTED_STRING: "\""> : DEFAULT
+}
+
+/**
+ * Integer or real Numeric literal, whose object value is stored in the token manager's
+ * "literalValue" field.
+ */<DEFAULT> TOKEN : {
+<INT_LITERAL: ("0" (["0"-"7"])* | ["1"-"9"] (["0"-"9"])* | "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+)
+        (["l","L","h","H"])?> : {
+| <FLOAT_LITERAL: <DEC_FLT> (<EXPONENT>)? (<FLT_SUFF>)? | <DEC_DIGITS> <EXPONENT> (<FLT_SUFF>)?
+| <DEC_DIGITS> <FLT_SUFF>> : {
+| <#DEC_FLT: (["0"-"9"])+ "." (["0"-"9"])* | "." (["0"-"9"])+>
+| <#DEC_DIGITS: (["0"-"9"])+>
+| <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
+| <#FLT_SUFF: ["d","D","f","F","b","B"]>
+}
+
+NON-TERMINALS
+    expression    :=    orCondition <EOF>
+    orCondition    :=    andCondition ( "or" andCondition )*
+    andCondition    :=    notCondition ( "and" notCondition )*
+    notCondition    :=    ( "not" | "!" ) simpleCondition
+        |    simpleCondition
+    simpleCondition    :=    <TRUE>
+        |    <FALSE>
+        |    scalarConditionExpression
+             ( simpleNotCondition
+               | ( "=" | "==" ) scalarExpression
+               | ( "!=" | "<>" ) scalarExpression
+               | "<=" scalarExpression
+               | "<" scalarExpression | ">" scalarExpression
+               | ">=" scalarExpression
+               | "like" scalarExpression
+               | "likeIgnoreCase" scalarExpression
+               | "in" ( namedParameter | "(" scalarCommaList ")" )
+               | "between" scalarExpression "and" scalarExpression
+             )?
+    simpleNotCondition    :=    ( "not" | "!" )
+             ( "like" scalarExpression
+               | "likeIgnoreCase" scalarExpression
+               | "in" ( namedParameter | "(" scalarCommaList ")" )
+               | "between" scalarExpression "and" scalarExpression
+             )
+    scalarCommaList    :=    ( scalarConstExpression ( "," scalarConstExpression )* )
+    scalarConditionExpression    :=    scalarNumericExpression
+        |    <SINGLE_QUOTED_STRING>
+        |    <DOUBLE_QUOTED_STRING>
+        |    <NULL>
+    scalarExpression    :=    scalarConditionExpression
+        |    <TRUE>
+        |    <FALSE>
+    scalarConstExpression    :=    <SINGLE_QUOTED_STRING>
+        |    <DOUBLE_QUOTED_STRING>
+        |    namedParameter
+        |    <INT_LITERAL>
+        |    <FLOAT_LITERAL>
+        |    <TRUE>
+        |    <FALSE>
+    scalarNumericExpression    :=    multiplySubtractExp
+             ( "+" multiplySubtractExp | "-" multiplySubtractExp )*
+    multiplySubtractExp    :=    numericTerm ( "*" numericTerm | "/" numericTerm )*
+    numericTerm    :=    ( "+" )? numericPrimary
+        |    "-" numericPrimary
+    numericPrimary    :=    "(" orCondition ")"
+        |    pathExpression
+        |    namedParameter
+        |    <INT_LITERAL>
+        |    <FLOAT_LITERAL>
+    namedParameter    :=    "$" <PROPERTY_PATH>
+    pathExpression    :=    ( <PROPERTY_PATH>
+                            | "obj:" <PROPERTY_PATH>
+                            | "db:" <PROPERTY_PATH>
+                            | "enum:" <PROPERTY_PATH>  )
+----
+

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/header.html
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/header.html b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/header.html
new file mode 100644
index 0000000..a011d2a
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/header.html
@@ -0,0 +1,28 @@
+---
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+
+title: "Cayenne Guide"
+description: "Cayenne Guide"
+cayenneVersion: "4.0"
+weight: 10
+menu:
+    footer:
+        weight: 20
+        parent: docs
+        name: "Cayenne Guide (4.0)"
+---

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/listOfTables.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/listOfTables.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/listOfTables.adoc
new file mode 100644
index 0000000..8cd25ae
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/listOfTables.adoc
@@ -0,0 +1,30 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+== List of tables
+
+* xref:versionHistory[Cayenne Version History]
+* xref:pluginParameteres[modeler plugin parameters]
+* xref:tablecgen[cgen required parameters]
+* xref:cgenOptional[cgen optional parameters]
+* xref:cdbgenTable[cdbgen required parameters]
+* xref:dataSourceParameteres[<dataSource> parameters]
+* xref:cdbgenOptionl[cdbgen optional parameters]
+* xref:cdbimportTable[cdbimport parameters]
+* xref:cdbimportDataSource[<dataSource> parameters]
+* xref:dbimportParameters[<dbimport> parameters]
+* xref:persistenceStates[Persistence States]
+* xref:lifecycleEvent[Lifecycle Event Types]
+* xref:congigProperties[Configuration Properties Recognized by ServerRuntime and/or ClientRuntime]
+* xref:serviceCollections[Service Collection Keys Present in ServerRuntime and/or ClientRuntime]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1.adoc
new file mode 100644
index 0000000..a99d627
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1.adoc
@@ -0,0 +1,21 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+== Object Relational Mapping with Cayenne
+
+include::part1/setup.adoc[]
+
+include::part1/mapping.adoc[]
+
+include::part1/modeler.adoc[]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/mapping.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/mapping.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/mapping.adoc
new file mode 100644
index 0000000..ab26eea
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/mapping.adoc
@@ -0,0 +1,71 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+
+=== Cayenne Mapping Structure
+
+==== Cayenne Project
+
+A Cayenne project is an XML representation of a model connecting database schema with Java classes. A project is normally created and manipulated via CayenneModeler GUI and then used to initialize Cayenne runtime. A project is made of one or more files. There's always a root project descriptor file in any valid project. It is normally called cayenne-xyz.xml, where "xyz" is the name of the project.
+
+Project descriptor can reference DataMap files, one per DataMap. DataMap files are normally called xyz.map.xml, where "xyz" is the name of the DataMap. For legacy reasons this naming convention is different from the convention for the root project descriptor above, and we may align it in the future versions. Here is how a typical project might look on the file system:
+
+----
+$ ls -l
+total 24
+-rw-r--r--  1 cayenne  staff  491 Jan 28 18:25 cayenne-project.xml
+-rw-r--r--  1 cayenne  staff  313 Jan 28 18:25 datamap.map.xml
+----
+
+DataMap are referenced by name in the root descriptor:
+
+[source,xml]
+----
+<map name="datamap"/>
+----
+
+Map files are resolved by Cayenne by appending ".map.xml" extension to the map name, and resolving the resulting string relative to the root descriptor URI. The following sections discuss varios ORM model objects, without regards to their XML representation. XML format details are really unimportant to the Cayenne users.
+
+==== DataMap
+
+DataMap is a container of persistent entities and other object-relational metadata. DataMap provides developers with a scope to organize their entities, but it does not provide a namespace for entities. In fact all DataMaps present in runtime are combined in a single namespace. Each DataMap must be associated with a DataNode. This is how Cayenne knows which database to use when running a query.
+
+==== DataNode
+
+DataNode is model of a database. It is actually pretty simple. It has an arbitrary user-provided name and information needed to create or locate a JDBC DataSource. Most projects only have one DataNode, though there may be any number of nodes if needed.
+
+==== DbEntity
+
+DbEntity is a model of a single DB table or view. DbEntity is made of DbAttributes that correspond to columns, and DbRelationships that map PK/FK pairs. DbRelationships are not strictly tied to FK constraints in DB, and should be mapped for all logical "relationships" between the tables.
+
+==== ObjEntity
+
+ObjEntity is a model of a single persistent Java class. ObjEntity is made of ObjAttributes and ObjRelationships. Both correspond to entity class properties. However ObjAttributes represent "simple" properties (normally things like String, numbers, dates, etc.), while ObjRelationships correspond to properties that have a type of another entity.
+
+ObjEntity maps to one or more DbEntities. There's always one "root" DbEntity for each ObjEntity. ObjAttribiute maps to a DbAttribute or an Embeddable. Most often mapped DbAttribute is from the root DbEntity. Sometimes mapping is done to a DbAttribute from another DbEntity somehow related to the root DbEntity. Such ObjAttribute is called "flattened". Similarly ObjRelationship maps either to a single DbRelationship, or to a chain of DbRelationships ("flattened" ObjRelationship).
+
+ObjEntities may also contain mapping of their lifecycle callback methods.
+
+==== Embeddable
+
+Embeddable is a model of a Java class that acts as a single attribute of an ObjEntity, but maps to multiple columns in the database.
+
+==== Procedure
+
+A model of a stored procedure in the database.
+
+==== Query
+
+A model of a query. Cayenne allows queries to be mapped in Cayenne project, or created in the code. Depending on the circumstances the users may take one or the other approach.
+

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/modeler.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/modeler.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/modeler.adoc
new file mode 100644
index 0000000..56cf7f1
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/modeler.adoc
@@ -0,0 +1,61 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+=== CayenneModeler Application
+
+==== Working with Mapping Projects
+
+==== Reverse Engineering Database
+
+See chapter  xref:reverse[Reverse Engineering in Cayenne Modeler]
+
+==== Generating Database Schema
+
+With Cayenne Modeler you can create simple database schemas without any additional database tools. This is a good option for initial database setup if you completely created you model with the Modeler. You can start SQL schema generation by selecting menu *Tools > Generate Database Schema*
+
+You can select what database parts should be generated and what tables you want
+
+==== Migrations
+
+==== Generating Java Classes
+
+Before using Cayenne in you code you need to generate java source code for persistent objects. This can be done with Modeler GUI or via xref:cgen[cgen] maven/ant plugin.
+
+To generate classes in the modeler use *Tools > Generate Classes*
+
+There is three default types of code generation
+
+- *Standard Persistent Objects*
+
+Default type of generation suitable for almost all cases. Use this type unless you now what exactly you need to customize.
+
+- *Client Persistent Objects*
+
+- *Advanced*
+
+In advanced mode you can control almost all aspects of code generation including custom templates for java code. See default Cayenne templates on GitHub as an example.
+
+==== Modeling Inheritance
+
+==== Modeling Generic Persistent Classes
+
+Normally each ObjEntity is mapped to a specific Java class (such as Artist or Painting) that explicitly declare all entity properties as pairs of getters and setters. However Cayenne allows to map a completly generic class to any number of entities. The only expectation is that a generic class implements org.apache.cayenne.DataObject. So an ideal candidate for a generic class is CayenneDataObject, or some custom subclass of CayenneDataObject.
+
+If you don't enter anything for Java Class of an ObjEntity, Cayenne assumes generic mapping and uses the following implicit rules to determine a class of a generic object. If DataMap "Custom Superclass" is set, runtime uses this class to instantiate new objects. If not, `org.apache.cayenne.CayenneDataObject` is used.
+
+Class generation procedures (either done in the Modeler or with Ant or Maven) would skip entities that are mapped to CayenneDataObject explicitly or have no class mapping.
+
+==== Mapping ObjAttributes to Custom Classes
+
+==== Modeling Primary Key Generation Strategy
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/setup.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/setup.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/setup.adoc
new file mode 100644
index 0000000..61431af
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part1/setup.adoc
@@ -0,0 +1,112 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+include::../var.adoc[]
+
+=== Setup
+
+==== System Requirements
+
+- Java: Cayenne runtime framework and CayenneModeler GUI tool are written in 100% Java, and run on any Java-compatible platform. Minimal required JDK version depends on the version of Cayenne you are using, as shown in the following table:
+
+[#versionHistory.table.table-bordered]
+.Cayenne Version History
+|===
+|Cayenne Version |Java Version |Status
+
+|4.1
+|Java 1.8 or newer
+|Development
+
+|4.0
+|Java 1.7 or newer
+|Beta
+
+|3.1
+|Java 1.5 or newer
+|Stable
+
+|3.0
+|Java 1.5
+|Aging
+
+|1.2 / 2.0
+|Java 1.4
+|Legacy
+
+|1.1
+|Java 1.3
+|Legacy
+|===
+
+
+- JDBC Driver: An appropriate DB-specific JDBC driver is needed to access the database. It can be included in the application or used in web container DataSource configuration.
+
+- Third-party Libraries: Cayenne runtime framework has a minimal set of required and a few more optional dependencies on third-party open source packages. See xref:include["Including Cayenne in a Project"]. chapter for details.
+
+[[runModeler]]
+==== Running CayenneModeler
+
+CayenneModeler GUI tool is intended to work with object relational mapping projects. While you can edit your XML by hand, it is rarely needed, as the Modeler is a pretty advanced tool included in Cayenne distribution. To obtain CayenneModeler, download Cayenne distribution archive from http://cayenne.apache.org/download.html matching the OS you are using. Of course Java needs to be installed on the machine where you are going to run the Modeler.
+
+- OS X distribution contains CayenneModeler.app at the root of the distribution disk image.
+- Windows distribution contains CayenneModeler.exe file in the bin directory.
+- Cross-platform distribution (targeting Linux, but as the name implies, compatible with any OS) contains a runnable CayenneModeler.jar in the bin directory. It can be executed either by double-clicking, or if the environment is not configured to execute jars, by running from command-line:
+
+[source]
+----
+$ java -jar CayenneModeler.jar
+----
+
+The Modeler can also be started from Maven. While it may look like an exotic way to start a GUI application, it has its benefits - no need to download Cayenne distribution, the version of the Modeler always matches the version of the framework, the plugin can find mapping files in the project automatically. So it is an attractive option to some developers. Maven option requires a declaration in the POM:
+[source,xml,subs="verbatim,attributes"]
+----
+<build>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.cayenne.plugins</groupId>
+            <artifactId>cayenne-modeler-maven-plugin</artifactId>
+            <version>{version}</version>
+        </plugin>
+    </plugins>
+</build>
+----
+
+And then can be run as
+
+----
+$ mvn cayenne-modeler:run
+----
+
+[#pluginParameteres.table.table-bordered]
+.Modeler plugin parameters
+[cols="2,1,6"]
+|===
+|Name |Type|Description
+
+.^|modelFile
+.^|File
+a|Name of the model file to open. Here is some simple example:
+[source,xml]
+----
+<plugin>
+    <groupId>org.apache.cayenne.plugins</groupId>
+    <artifactId>cayenne-modeler-maven-plugin</artifactId>
+    <version>${cayenne.version}</version>
+    <configuration>
+        <modelFile>src/main/resources/cayenne.xml</modelFile>
+    </configuration>
+</plugin>
+----
+|===
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/cde78f0b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part2.adoc
----------------------------------------------------------------------
diff --git a/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part2.adoc b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part2.adoc
new file mode 100644
index 0000000..505a029
--- /dev/null
+++ b/docs/asciidoc/cayenne-guide/src/docs/asciidoc/_cayenne-guide/part2.adoc
@@ -0,0 +1,33 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to you under the Apache License, Version
+// 2.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+// applicable law or agreed to in writing, software distributed under the
+// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+// CONDITIONS OF ANY KIND, either express or implied. See the License for
+// the specific language governing permissions and limitations under the
+// License.
+
+== Cayenne Framework
+
+include::part2/including.adoc[]
+
+include::part2/starting.adoc[]
+
+include::part2/objectContext.adoc[]
+
+include::part2/expressions.adoc[]
+
+include::part2/orderings.adoc[]
+
+include::part2/queries.adoc[]
+
+include::part2/lifecycle.adoc[]
+
+include::part2/tuning.adoc[]
+
+include::part2/customize.adoc[]
\ No newline at end of file