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/04 16:01:20 UTC
[06/14] cayenne git commit: Switch documentation from Docbook to
Asciidoctor format
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml b/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
deleted file mode 100644
index 6cc7050..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/including-cayenne-in-project.xml
+++ /dev/null
@@ -1,893 +0,0 @@
-<?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.
--->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
- version="5.0" xml:id="including-cayenne-in-project">
- <title>Including Cayenne in a Project</title>
- <section xml:id="jar-files-and-depdendencies">
- <title>Jar Files</title>
- <para>This is an overview of Cayenne jars that is agnostic of the build tool used. The
- following are the important libraries:</para>
- <para>
- <itemizedlist>
- <listitem>
- <para><emphasis role="italic"
- >cayenne-di-<?eval ${project.version}?>.jar</emphasis> - Cayenne
- dependency injection (DI) container library. All applications will require
- this file.</para>
- </listitem>
- <listitem>
- <para><emphasis role="italic"
- >cayenne-server-<?eval ${project.version}?>.jar</emphasis> - contains
- main Cayenne runtime (adapters, DB access classes, etc.). Most applications
- will require this file.</para>
- </listitem>
- <listitem>
- <para><emphasis>cayenne-client-<?eval ${project.version}?>.jar</emphasis> - a
- client-side runtime for <link linkend="introduction-to-rop">ROP
- applications</link>.</para>
- </listitem>
- <listitem>
- <para>Other cayenne-* jars - various Cayenne tools extensions.</para>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- <section>
- <title>Dependencies</title>
- <para>With modern build tools like Maven and Gradle, you should not worry about tracking
- dependencies. If you have one of those, you can skip this section and go straight to the
- Maven section below. However if your environment requires manual dependency resolution
- (like Ant), the distribution provides all of Cayenne jars plus a minimal set of
- third-party dependencies to get you started in a default configuration. Check
- <code>lib</code> and <code>lib/third-party</code> folders for those.</para>
- <para>Dependencies for non-standard configurations will need to be figured out by the users
- on their own. Check <code>pom.xml</code> files of the corresponding Cayenne modules in
- one of the searchable Maven archives out there to get an idea of those dependencies
- (e.g. <link xlink:href="http://search.maven.org">http://search.maven.org</link>).</para>
- </section>
- <section xml:id="maven-projects">
- <title>Maven Projects</title>
- <para>If you are using Maven, you won't have to deal with figuring out the dependencies. You
- can simply include cayenne-server artifact in your
- POM:<programlisting language="xml"><dependency>
- <groupId>org.apache.cayenne</groupId>
- <artifactId>cayenne-server</artifactId>
- <version><?eval ${project.version}?></version>
-</dependency></programlisting></para>
- <para>Additionally Cayenne provides a Maven plugin with a set of goals to perform various project
- tasks, such as synching generated Java classes with the mapping, described in the
- following subsection. The full plugin name is
- <code>org.apache.cayenne.plugins:cayenne-maven-plugin</code>.</para>
- <section xml:id="mvn-cgen">
- <title>cgen</title>
- <para><code>cgen</code> is a <code>cayenne-maven-plugin</code> goal that generates and maintains
- source (.java) files of persistent objects based on a DataMap. By default, it is
- bound to the generate-sources phase. If "makePairs" is set to "true" (which is the
- recommended default), this task will generate a pair of classes
- (superclass/subclass) for each ObjEntity in the DataMap. Superclasses should not be
- changed manually, since they are always overwritten. Subclasses are never
- overwritten and may be later customized by the user. If "makePairs" is set to
- "false", a single class will be generated for each ObjEntity. </para>
- <para>By creating custom templates, you can use cgen to generate other output (such as
- web pages, reports, specialized code templates) based on DataMap information.</para>
- <para>
- <table frame="void" xml:id="cgen_params_table">
- <caption>cgen required parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="79%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>map</code>
- </td>
- <td>File</td>
- <td>DataMap XML file which serves as a source of metadata for class
- generation. E.g.
- <code>${project.basedir}/src/main/resources/my.map.xml</code></td>
- </tr>
- </tbody>
- </table>
- <table frame="void">
- <caption>cgen optional parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="79%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>additionalMaps</code>
- </td>
- <td>File</td>
- <td>A directory that contains additional DataMap XML files that may be
- needed to resolve cross-DataMap relationships for the the main
- DataMap, for which class generation occurs.</td>
- </tr>
- <tr>
- <td><code>client</code></td>
- <td>boolean</td>
- <td>Whether we are generating classes for the client tier in a Remote
- Object Persistence application. "False" by default.</td>
- </tr>
- <tr>
- <td><code>destDir</code></td>
- <td>File</td>
- <td>Root destination directory for Java classes (ignoring their package
- names). The default is "src/main/java".</td>
- </tr>
- <tr>
- <td><code>embeddableTemplate</code></td>
- <td>String</td>
- <td>Location of a custom Velocity template file for Embeddable class
- generation. If omitted, default template is used.</td>
- </tr>
- <tr>
- <td><code>embeddableSuperTemplate</code></td>
- <td>String</td>
- <td>Location of a custom Velocity template file for Embeddable
- superclass generation. Ignored unless "makepairs" set to "true". If
- omitted, default template is used.</td>
- </tr>
- <tr>
- <td><code>encoding</code></td>
- <td>String</td>
- <td>Generated files encoding if different from the default on current
- platform. Target encoding must be supported by the JVM running the
- build. Standard encodings supported by Java on all platforms are
- US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16. See
- javadocs for java.nio.charset.Charset for more information.</td>
- </tr>
- <tr>
- <td><code>excludeEntities</code></td>
- <td>String</td>
- <td>A comma-separated list of ObjEntity patterns (expressed as a perl5
- regex) to exclude from template generation. By default none of the
- DataMap entities are excluded.</td>
- </tr>
- <tr>
- <td><code>includeEntities</code></td>
- <td>String</td>
- <td>A comma-separated list of ObjEntity patterns (expressed as a perl5
- regex) to include from template generation. By default all DataMap
- entities are included.</td>
- </tr>
- <tr>
- <td><code>makePairs</code></td>
- <td>boolean</td>
- <td>If "true" (a recommended default), will generate subclass/superclass
- pairs, with all generated code placed in superclass.</td>
- </tr>
- <tr>
- <td><code>mode</code></td>
- <td>String</td>
- <td>Specifies class generator iteration target. There are three possible
- values: "entity" (default), "datamap", "all". "entity" performs one
- generator iteration for each included ObjEntity, applying either
- standard to custom entity templates. "datamap" performs a single
- iteration, applying DataMap templates. "All" is a combination of
- entity and datamap.</td>
- </tr>
- <tr>
- <td><code>overwrite</code></td>
- <td>boolean</td>
- <td>Only has effect when "makePairs" is set to "false". If "overwrite"
- is "true", will overwrite older versions of generated classes.</td>
- </tr>
- <tr>
- <td><code>superPkg</code></td>
- <td>String</td>
- <td>Java package name of all generated superclasses. If omitted, each
- superclass will be placed in the subpackage of its subclass called
- "auto". Doesn't have any effect if either "makepairs" or
- "usePkgPath" are false (both are true by default). </td>
- </tr>
- <tr>
- <td><code>superTemplate</code></td>
- <td>String</td>
- <td>Location of a custom Velocity template file for ObjEntity superclass
- generation. Only has effect if "makepairs" set to "true". If
- omitted, default template is used.</td>
- </tr>
- <tr>
- <td><code>template</code></td>
- <td>String</td>
- <td>Location of a custom Velocity template file for ObjEntity class
- generation. If omitted, default template is used.</td>
- </tr>
- <tr>
- <td><code>usePkgPath</code></td>
- <td>boolean</td>
- <td>If set to "true" (default), a directory tree will be generated in
- "destDir" corresponding to the class package structure, if set to
- "false", classes will be generated in "destDir" ignoring their
- package.</td>
- </tr>
- <tr>
- <td><code>createPropertyNames</code></td>
- <td>boolean</td>
- <td>If set to "true", will generate String Property names.
- Default is "false"</td>
- </tr>
- </tbody>
- </table> Example - a typical class generation scenario, where pairs of classes are
- generated with default Maven source destination and superclass
- package:<programlisting language="xml"><plugin>
- <groupId>org.apache.cayenne.plugins</groupId>
- <artifactId>cayenne-maven-plugin</artifactId>
- <version><?eval ${project.version}?></version>
-
- <configuration>
- <map>${project.basedir}/src/main/resources/my.map.xml</map>
- </configuration>
-
- <executions>
- <execution>
- <goals>
- <goal>cgen</goal>
- </goals>
- </execution>
- </executions>
-</plugin></programlisting></para>
- </section>
- <section xml:id="mvn-cdbgen">
- <title>cdbgen</title>
- <para><code>cdbgen</code> is a <code>cayenne-maven-plugin</code> goal that drops and/or generates
- tables in a database on Cayenne DataMap. By default, it is bound to the
- pre-integration-test phase.
- <table frame="void" xml:id="cdbgen_parameters">
- <caption>cdbgen required parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="79%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>map</code>
- </td>
- <td>File</td>
- <td>DataMap XML file which serves as a source of metadata for DB schema
- generation. E.g.
- <code>${project.basedir}/src/main/resources/my.map.xml</code></td>
- </tr>
- <tr>
- <td><code>dataSource</code>
- </td>
- <td>XML</td>
- <td>An object that contains Data Source parameters</td>
- </tr>
- </tbody>
- </table>
- </para>
- <para>
- <table frame="void">
- <caption><dataSource> parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="7%"/>
- <col width="72%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Required</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>driver</code></td>
- <td>String</td>
- <td>Yes</td>
- <td>A class of JDBC driver to use for the target database.</td>
- </tr>
- <tr>
- <td><code>url</code></td>
- <td>String</td>
- <td>Yes</td>
- <td>JDBC URL of a target database.</td>
- </tr>
- <tr>
- <td><code>username</code></td>
- <td>String</td>
- <td>No</td>
- <td>Database user name.</td>
- </tr>
- <tr>
- <td><code>password</code></td>
- <td>String</td>
- <td>No</td>
- <td>Database user password.</td>
- </tr>
- </tbody>
- </table>
- </para>
- <para>
- <table frame="void">
- <caption>cdbgen optional parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="79%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>adapter</code>
- </td>
- <td>String</td>
- <td>Java class name implementing org.apache.cayenne.dba.DbAdapter. While
- this attribute is optional (a generic JdbcAdapter is used if not
- set), it is highly recommended to specify correct target
- adapter.</td>
- </tr>
- <tr>
- <td><code>createFK</code></td>
- <td>boolean</td>
- <td>Indicates whether cdbgen should create foreign key constraints. Default is "true".</td>
- </tr>
- <tr>
- <td><code>createPK</code></td>
- <td>boolean</td>
- <td>Indicates whether cdbgen should create Cayenne-specific auto PK objects. Default is
- "true".</td>
- </tr>
- <tr>
- <td><code>createTables</code></td>
- <td>boolean</td>
- <td>Indicates whether cdbgen should create new tables. Default is "true".</td>
- </tr>
- <tr>
- <td><code>dropPK</code></td>
- <td>boolean</td>
- <td>Indicates whether cdbgen should drop Cayenne primary key support objects. Default is
- "false".</td>
- </tr>
- <tr>
- <td><code>dropTables</code></td>
- <td>boolean</td>
- <td>Indicates whether cdbgen should drop the tables before attempting to create new ones.
- Default is "false".</td>
- </tr>
- </tbody>
- </table>
- </para>
- <para>Example - creating a DB schema on a local HSQLDB
- database:<programlisting language="xml"><plugin>
- <groupId>org.apache.cayenne.plugins</groupId>
- <artifactId>cayenne-maven-plugin</artifactId>
- <version><?eval ${project.version}?></version>
- <executions>
- <execution>
- <configuration>
- <map>${project.basedir}/src/main/resources/my.map.xml</map>
- <adapter>org.apache.cayenne.dba.hsqldb.HSQLDBAdapter</adapter>
- <dataSource>
- <url>jdbc:hsqldb:hsql://localhost/testdb</url>
- <driver>org.hsqldb.jdbcDriver</driver>
- <username>sa</username>
- </dataSource>
- </configuration>
- <goals>
- <goal>cdbgen</goal>
- </goals>
- </execution>
- </executions>
-</plugin></programlisting></para>
- </section>
- <section xml:id="mvn-cdbimport">
- <title>cdbimport</title>
- <para><code>cdbimport</code> is a <code>cayenne-maven-plugin</code> goal that generates a DataMap
- based on an existing database schema. By default, it is bound to the
- generate-sources phase. This allows you to generate your DataMap prior to building
- your project, possibly followed by "cgen" execution to generate the classes.
- CDBImport plugin described in details in chapter <link linkend="re-introduction">"DB-First Flow"</link>
- <table frame="void" xml:id="cdbimport_parameters">
- <caption>cdbimport parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="7%"/>
- <col width="72%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Required</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>map</code>
- </td>
- <td>File</td>
- <td>Yes</td>
- <td>DataMap XML file which is the destination of the schema import. Can
- be an existing file. If this file does not exist, it is created when
- cdbimport is executed. E.g.
- <code>${project.basedir}/src/main/resources/my.map.xml</code>.
- If "overwrite" is true (the default), an existing DataMap will be
- used as a template for the new imported DataMap, i.e. all its
- entities will be cleared and recreated, but its common settings,
- such as default Java package, will be preserved (unless changed
- explicitly in the plugin configuration).</td>
- </tr>
- <tr>
- <td><code>adapter</code>
- </td>
- <td>String</td>
- <td>No</td>
- <td>A Java class name implementing org.apache.cayenne.dba.DbAdapter. This attribute is
- optional. If not specified, AutoAdapter is used, which will attempt
- to guess the DB type.</td>
- </tr>
- <tr>
- <td><code>dataSource</code>
- </td>
- <td>XML</td>
- <td>Yes</td>
- <td>An object that contains Data Source parameters</td>
- </tr>
- <tr>
- <td><code>dbimport</code>
- </td>
- <td>XML</td>
- <td>No</td>
- <td>An object that contains detailed reverse engineering rules about what DB objects should
- be processed. For full information about this parameter see <link
- linkend="re-introduction">"DB-First Flow"</link> chapter.</td>
- </tr>
- </tbody>
- </table>
- </para>
- <para>
- <table frame="void">
- <caption><dataSource> parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="7%"/>
- <col width="72%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Required</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>driver</code></td>
- <td>String</td>
- <td>Yes</td>
- <td>A class of JDBC driver to use for the target database.</td>
- </tr>
- <tr>
- <td><code>url</code></td>
- <td>String</td>
- <td>Yes</td>
- <td>JDBC URL of a target database.</td>
- </tr>
- <tr>
- <td><code>username</code></td>
- <td>String</td>
- <td>No</td>
- <td>Database user name.</td>
- </tr>
- <tr>
- <td><code>password</code></td>
- <td>String</td>
- <td>No</td>
- <td>Database user password.</td>
- </tr>
- </tbody>
- </table>
- </para>
- <para>
- <table frame="void">
- <caption><dbimport> parameters</caption>
- <col width="14%"/>
- <col width="7%"/>
- <col width="79%"/>
- <thead>
- <tr>
- <th>Name</th>
- <th>Type</th>
- <th>Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>defaultPackage</code></td>
- <td>String</td>
- <td>A Java package that will be set as the imported DataMap default and
- a package of all the persistent Java classes. This is a required
- attribute if the "map" itself does not already contain a default
- package, as otherwise all the persistent classes will be mapped with
- no package, and will not compile.</td>
- </tr>
- <tr>
- <td><code>forceDataMapCatalog</code></td>
- <td>boolean</td>
- <td> Automatically tagging each DbEntity with the actual DB catalog/schema (default behavior)
- may sometimes be undesirable. If this is the case then setting
- <code>forceDataMapCatalog</code> to <code>true</code> will set
- DbEntity catalog to one in the DataMap. Default value is
- <code>false</code>. </td>
- </tr>
- <tr>
- <td><code>forceDataMapSchema</code></td>
- <td>boolean</td>
- <td> Automatically tagging each DbEntity with the actual DB catalog/schema (default behavior)
- may sometimes be undesirable. If this is the case then setting
- <code>forceDataMapSchema</code> to <code>true</code> will set
- DbEntity schema to one in the DataMap. Default value is
- <code>false</code>. </td>
- </tr>
- <tr>
- <td><code>meaningfulPkTables</code></td>
- <td>String</td>
- <td>A comma-separated list of Perl5 patterns that defines which imported tables should have
- their primary key columns mapped as ObjAttributes. "*" would
- indicate all tables.</td>
- </tr>
- <tr>
- <td><code>namingStrategy</code></td>
- <td>String</td>
- <td>
- The naming strategy used for mapping database names to object entity
- names. Default is <code>org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator</code>.
- </td>
- </tr>
- <tr>
- <td><code>skipPrimaryKeyLoading</code></td>
- <td>boolean</td>
- <td>Whether to load primary keys. Default "false".</td>
- </tr>
- <tr>
- <td><code>skipRelationshipsLoading</code></td>
- <td>boolean</td>
- <td>Whether to load relationships. Default "false".</td>
- </tr>
- <tr>
- <td><code>stripFromTableNames</code></td>
- <td>String</td>
- <td>Regex that matches the part of the table name that needs to be stripped off when
- generating ObjEntity name. Here are some examples: <programlisting language="xml"><![CDATA[<!-- Strip prefix -->
-<stripFromTableNames>^myt_</stripFromTableNames>
-
-<!-- Strip suffix -->
-<stripFromTableNames>_s$</stripFromTableNames>
-
-<!-- Strip multiple occurrences in the middle -->
-<stripFromTableNames>_abc</stripFromTableNames>]]></programlisting>
- </td>
- </tr>
- <tr>
- <td><code>usePrimitives</code></td>
- <td>boolean</td>
- <td>Whether numeric and boolean data types should be mapped as Java primitives or Java
- classes. Default is "true", i.e. primitives will be used.</td>
- </tr>
- <tr>
- <td><code>useJava7Types</code></td>
- <td>boolean</td>
- <td>Whether <code>DATE</code>, <code>TIME</code> and <code>TIMESTAMP</code> data types should be mapped
- as <code>java.util.Date</code> or <code>java.time.*</code> classes.
- Default is "false", i.e. <code>java.time.*</code> will be used.</td>
- </tr>
- <tr xml:id="cdbimport-rr-parameter">
- <td>filters configuration</td>
- <td>XML</td>
- <td>Detailed reverse engineering rules about what DB objects should be processed.
- For full information about this parameter see <link linkend="re-introduction">"DB-First Flow"</link> chapter.
- Here is some simple example:
- <programlisting language="xml"><dbimport>
- <catalog name="test_catalog">
- <schema name="test_schema">
- <includeTable>.*</includeTable>
- <excludeTable>test_table</excludeTable>
- </schema>
- </catalog>
-
- <includeProcedure pattern=".*"/>
-</dbimport></programlisting>
- </td>
- </tr>
- </tbody>
- </table>
- </para>
- <para>Example - loading a DB schema from a local HSQLDB database (essentially a reverse operation
- compared to the <code>cdbgen</code> example above)
- :<programlisting language="xml"><plugin>
- <groupId>org.apache.cayenne.plugins</groupId>
- <artifactId>cayenne-maven-plugin</artifactId>
- <version><?eval ${project.version}?></version>
-
- <executions>
- <execution>
- <configuration>
- <map>${project.basedir}/src/main/resources/my.map.xml</map>
- <dataSource>
- <url>jdbc:mysql://127.0.0.1/mydb</url>
- <driver>com.mysql.jdbc.Driver</driver>
- <username>sa</username>
- </dataSource>
- <dbimport>
- <defaultPackage>com.example.cayenne</defaultPackage>
- </dbimport>
- </configuration>
- <goals>
- <goal>cdbimport</goal>
- </goals>
- </execution>
- </executions>
-</plugin></programlisting></para>
- </section>
- </section>
- <section xml:id="gradle-projects">
- <title>Gradle Projects</title>
- <para>
- To include Cayenne into your Gradle project you have two options:
- <itemizedlist>
- <listitem><para>
- Simply add Cayenne as a dependency:
- <programlisting language="groovy">compile 'org.apache.cayenne:cayenne-server:<?eval ${project.version}?>'</programlisting>
- </para></listitem>
- <listitem>
- <para>Or you can use Cayenne Gradle plugin</para>
- </listitem>
- </itemizedlist>
- </para>
- <section xml:id="gradle-plugin">
- <title>Gradle Plugin</title>
- <para>
- Cayenne Gradle plugin provides several tasks, such as synching generated Java classes with the mapping
- or synching mapping with the database. Plugin aslo provides <code>cayenne</code> extension that have some
- useful utility methods.
- Here is example of how to include Cayenne plugin into your project:
- <programlisting language="groovy">
-buildscript {
- // add Maven Central repository
- repositories {
- mavenCentral()
- }
- // add Cayenne Gradle Plugin
- dependencies {
- classpath group: 'org.apache.cayenne.plugins', name: 'cayenne-gradle-plugin', version: '<?eval ${project.version}?>'
- }
-}
-
-// apply plugin
-apply plugin: 'org.apache.cayenne'
-
-// set default DataMap
-cayenne.defaultDataMap 'datamap.map.xml'
-
-// add Cayenne dependencies to your project
-dependencies {
- // this is a shortcut for 'org.apache.cayenne:cayenne-server:VERSION_OF_PLUGIN'
- compile cayenne.dependency('server')
- compile cayenne.dependency('java8')
-}</programlisting>
- </para>
- <para>
- <warning>
- Cayenne Gradle plugin is experimental and it's API can change later.
- </warning>
- </para>
- <section>
- <title>cgen</title>
- <para>
- Cgen task generates Java classes based on your DataMap,
- it has same configuration parameters as in Maven Plugin version, described in
- <xref linkend="cgen_params_table"/>.
- If you provided default DataMap via <code>cayenne.defaultDataMap</code>,
- you can skip <code>cgen</code> configuration as default settings will suffice in common case.
- </para>
- <para>
- Here is how you can change settings of the default <code>cgen</code> task:
- <programlisting language="groovy">
-cgen {
- client = false
- mode = 'all'
- overwrite = true
- createPropertiesNames = true
-}</programlisting>
-
- And here is example of how to define additional cgen task (e.g. for client classes if you are using ROP):
- <programlisting language="groovy">
-task clientCgen(type: cayenne.cgen) {
- client = true
-}</programlisting>
- </para>
- </section>
- <section>
- <title>cdbimport</title>
- <para>
- This task is for creating and synchronizing your Cayenne model from database schema.
- Full list of parameters are same as in Maven Plugin version, described in
- <xref linkend="cdbimport_parameters"/>, with exception that Gradle version will use Groovy instead
- of XML.
- </para>
- <para>
- Here is example of configuration for cdbimport task:
- <programlisting language="groovy">
-cdbimport {
- // map can be skipped if it is defined in cayenne.defaultDataMap
- map 'datamap.map.xml'
-
- dataSource {
- driver 'com.mysql.cj.jdbc.Driver'
- url 'jdbc:mysql://127.0.0.1:3306/test?useSSL=false'
- username 'root'
- password ''
- }
-
- dbImport
- // additional settings
- usePrimitives false
- defaultPackage 'org.apache.cayenne.test'
-
- // DB filter configuration
- catalog 'catalog-1'
- schema 'schema-1'
-
- catalog {
- name 'catalog-2'
-
- includeTable 'table0', {
- excludeColumns '_column_'
- }
-
- includeTables 'table1', 'table2', 'table3'
-
- includeTable 'table4', {
- includeColumns 'id', 'type', 'data'
- }
-
- excludeTable '^GENERATED_.*'
- }
-
- catalog {
- name 'catalog-3'
- schema {
- name 'schema-2'
- includeTable 'test_table'
- includeTable 'test_table2', {
- excludeColumn '__excluded'
- }
- }
- }
-
- includeProcedure 'procedure_test_1'
-
- includeColumns 'id', 'version'
-
- tableTypes 'TABLE', 'VIEW'
- }
-}</programlisting>
- </para>
- </section>
- <section>
- <title>cdbgen</title>
- <para>
- Cdbgen task drops and/or generates tables in a database on Cayenne DataMap.
- Full list of parameters are same as in Maven Plugin version, described in
- <xref linkend="cdbgen_parameters"/>
- </para>
- <para>
- Here is example of how to configure default <code>cdbgen</code> task:
- <programlisting language="groovy">
-cdbgen {
-
- adapter 'org.apache.cayenne.dba.derby.DerbyAdapter'
-
- dataSource {
- driver 'org.apache.derby.jdbc.EmbeddedDriver'
- url 'jdbc:derby:build/testdb;create=true'
- username 'sa'
- password ''
- }
-
- dropTables true
- dropPk true
-
- createTables true
- createPk true
- createFk true
-}</programlisting>
- </para>
- </section>
- <section>
- <title>Link tasks to Gradle build lifecycle</title>
- <para>
- With gradle you can easily connect Cayenne tasks to default build lifecycle.
- Here is short example of how to connect defaut <code>cgen</code> and <code>cdbimport</code> tasks
- with <code>compileJava</code> task:
- <programlisting language="groovy">cgen.dependsOn cdbimport
-compileJava.dependsOn cgen</programlisting>
- <note>
- Running <code>cdbimport</code> automatically with build not always a good choice,
- e.g. in case of complex model that you need to alter in the Cayenne Modeler after import.
- </note>
- </para>
- </section>
- </section>
- </section>
- <section xml:id="ant-projects">
- <title>Ant Projects</title>
- <para>Ant tasks are the same as Maven plugin goals described above, namely "cgen", "cdbgen",
- "cdbimport". Configuration parameters are also similar (except Maven can guess many
- defaults that Ant can't). To include Ant tasks in the project, use the following
- Antlib:<programlisting language="xml"><typedef resource="org/apache/cayenne/tools/antlib.xml">
- <classpath>
- <fileset dir="lib" >
- <include name="cayenne-ant-*.jar" />
- <include name="cayenne-cgen-*.jar" />
- <include name="cayenne-dbsync-*.jar" />
- <include name="cayenne-di-*.jar" />
- <include name="cayenne-project-*.jar" />
- <include name="cayenne-server-*.jar" />
- <include name="commons-collections-*.jar" />
- <include name="commons-lang-*.jar" />
- <include name="slf4j-api-*.jar" />
- <include name="velocity-*.jar" />
- <include name="vpp-2.2.1.jar" />
- </fileset>
- </classpath>
-</typedef></programlisting></para>
- <section xml:id="ant-cgen">
- <title>cgen</title>
- </section>
- <section xml:id="ant-cdbgen">
- <title>cdbgen</title>
- </section>
- <section xml:id="ant-cdbimport">
- <title>cdbimport</title>
- <para>This is an Ant counterpart of "cdbimport" goal of cayenne-maven-plugin described
- above. It has exactly the same properties. Here is a usage
- example:<programlisting language="xml"> <cdbimport map="${context.dir}/WEB-INF/my.map.xml"
- driver="com.mysql.jdbc.Driver"
- url="jdbc:mysql://127.0.0.1/mydb"
- username="sa"
- defaultPackage="com.example.cayenne"/> </programlisting>
- </para>
- </section>
- </section>
-</chapter>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/index.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/index.xml b/docs/docbook/cayenne-guide/src/docbkx/index.xml
deleted file mode 100644
index 8ac6c61..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/index.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?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.
--->
-<book xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
- xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://docbook.org/xml/5.0/xsd/docbook.xsd" xml:id="cayenne-guide">
- <info>
- <title>Cayenne Guide</title>
- <copyright>
- <year>2011-<?dbtimestamp format="Y"?></year>
- <holder>Apache Software Foundation and individual authors</holder>
- </copyright>
- <legalnotice>
- <title>License</title>
- <para>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</para>
-
- <para>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.</para>
- </legalnotice>
- </info>
- <xi:include href="part1.xml"/>
- <xi:include href="part2.xml"/>
- <xi:include href="part3.xml"/>
- <xi:include href="part4.xml"/>
- <xi:include href="part5.xml"/>
- <xi:include href="appendix-a.xml"/>
- <xi:include href="appendix-b.xml"/>
- <xi:include href="appendix-c.xml"/>
-</book>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/lifecycle-events.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/lifecycle-events.xml b/docs/docbook/cayenne-guide/src/docbkx/lifecycle-events.xml
deleted file mode 100644
index 09eefd6..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/lifecycle-events.xml
+++ /dev/null
@@ -1,314 +0,0 @@
-<?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.
--->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
- version="5.0" xml:id="lifecycle-events">
- <title>Lifecycle Events</title>
- <para>An application might be interested in getting notified when a Persistent object moves
- through its lifecycle (i.e. fetched from DB, created, modified, committed). E.g. when a new
- object is created, the application may want to initialize its default properties (this can't
- be done in constructor, as constructor is also called when an object is fetched from DB).
- Before save, the application may perform validation and/or set some properties (e.g.
- "updatedTimestamp"). After save it may want to create an audit record for each saved object,
- etc., etc. </para>
- <para>All this can be achieved by declaring callback methods either in Persistent objects or in
- non-persistent listener classes defined by the application (further simply called
- "listeners"). There are eight types of lifecycle events supported by Cayenne, listed later
- in this chapter. When any such event occurs (e.g. an object is committed), Cayenne would
- invoke all appropriate callbacks. Persistent objects would receive their own events, while
- listeners would receive events from any objects. </para>
- <para>Cayenne allows to build rather powerful and complex "workflows" or "processors" tied to
- objects lifecycle, especially with listeners, as they have full access to the application
- evnironment outside Cayenne. This power comes from such features as filtering which entity
- events are sent to a given listener and the ability to create a common operation context for
- multiple callback invocations. All of these are discussed later in this chapter.</para>
- <section xml:id="types-of-lifecycle-events">
- <title>Types of Lifecycle Events</title>
- <para>Cayenne defines the following 8 types of lifecycle events for which callbacks can be
- regsitered:<table frame="void">
- <caption>Lifecycle Event Types</caption>
- <col width="16%"/>
- <col width="84%"/>
- <thead>
- <tr>
- <th>Event</th>
- <th>Occurs...</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>PostAdd</td>
- <td>right after a new object is created inside
- <code>ObjectContext.newObject()</code>. When this event is fired the
- object is already registered with its ObjectContext and has its ObjectId
- and ObjectContext properties set.</td>
- </tr>
- <tr>
- <td>PrePersist</td>
- <td>right before a new object is committed, inside
- <code>ObjectContext.commitChanges()</code> and
- <code>ObjectContext.commitChangesToParent()</code> (and after
- "<code>validateForInsert()</code>").</td>
- </tr>
- <tr>
- <td>PreUpdate</td>
- <td>right before a modified object is committed, inside
- <code>ObjectContext.commitChanges()</code> and
- <code>ObjectContext.commitChangesToParent()</code> (and after
- "<code>validateForUpdate()</code>").</td>
- </tr>
- <tr>
- <td>PreRemove</td>
- <td>right before an object is deleted, inside
- <code>ObjectContext.deleteObjects()</code>. The event is also
- generated for each object indirectly deleted as a result of CASCADE
- delete rule.</td>
- </tr>
- <tr>
- <td>PostPersist</td>
- <td>right after a commit of a new object is done, inside
- <code>ObjectContext.commitChanges()</code>.</td>
- </tr>
- <tr>
- <td>PostUpdate</td>
- <td>right after a commit of a modified object is done, inside
- <code>ObjectContext.commitChanges()</code>.</td>
- </tr>
- <tr>
- <td>PostRemove</td>
- <td>right after a commit of a deleted object is done, inside
- <code>ObjectContext.commitChanges()</code>.</td>
- </tr>
- <tr>
- <td>PostLoad</td>
- <td>
- <itemizedlist>
- <listitem>
- <para>After an object is fetched inside
- <code>ObjectContext.performQuery()</code>.</para>
- </listitem>
- <listitem>
- <para>After an object is reverted inside
- <code>ObjectContext.rollbackChanges()</code>.</para>
- </listitem>
- <listitem>
- <para>Anytime a faulted object is resolved (i.e. if a
- relationship is fetched).</para>
- </listitem>
- </itemizedlist>
- </td>
- </tr>
- </tbody>
- </table></para>
- </section>
- <section xml:id="callback-persistent">
- <title>Callbacks on Persistent Objects</title>
- <para>Callback methods on Persistent classes are mapped in CayenneModeler for each
- ObjEntity. Empty callback methods are automatically created as a part of class
- generation (either with Maven, Ant or the Modeler) and are later filled with appropriate
- logic by the programmer. E.g. assuming we mapped a 'post-add' callback called
- 'onNewOrder' in ObjEntity 'Order', the following code will be
- generated:<programlisting language="java">public abstract class _Order extends CayenneDataObject {
- protected abstract void onNewOrder();
-}
-
-public class Order extends _Order {
-
- @Override
- protected void onNewOrder() {
- //TODO: implement onNewOrder
- }
-}</programlisting></para>
- <para>As <code>onNewOrder()</code> is already declared in the mapping, it does not need to
- be registered explicitly. Implementing the method in subclass to do something meaningful
- is all that is required at this point. </para>
- <para>As a rule callback methods do not have any knowledge of the outside application, and
- can only access the state of the object itself and possibly the state of other
- persistent objects via object's own ObjectContext.</para>
- <para>
- <note>
- <para><emphasis role="italic">Validation and callbacks:</emphasis> There is a clear
- overlap in functionality between object callbacks and
- <code>DataObject.validateForX()</code> methods. In the future validation may
- be completely superceeded by callbacks. It is a good idea to use "validateForX"
- strictly for validation (or not use it at all). Updating the state before commit
- should be done via callbacks.</para>
- </note>
- </para>
- </section>
- <section xml:id="callback-non-persistent">
- <title>Callbacks on Non-Persistent Listeners</title>
- <para>A listener is simply some application class that has one or more annotated
- callback methods. A callback method signature should be <code>void
- someMethod(SomePersistentType object)</code>. It can be public, private, protected
- or use default access:</para>
- <para>
- <programlisting language="java"> public class OrderListener {
-
- @PostAdd(Order.class)
- public void setDefaultsForNewOrder(Order o) {
- o.setCreatedOn(new Date());
- }
-}</programlisting>
- </para>
- <para>Notice that the example above contains an annotation on the callback method that
- defines the type of the event this method should be called for. Before we go into
- annotation details, we'll show how to create and register a listener with Cayenne. It is
- always a user responsibility to register desired application listeners, usually right
- after ServerRuntime is started. Here is an example:</para>
- <para>First let's define 2 simple
- listeners.<programlisting language="java">public class Listener1 {
-
- @PostAdd(MyEntity.class)
- void postAdd(Persistent object) {
- // do something
- }
-}
-
-public class Listener2 {
-
- @PostRemove({ MyEntity1.class, MyEntity2.class })
- void postRemove(Persistent object) {
- // do something
- }
-
- @PostUpdate({ MyEntity1.class, MyEntity2.class })
- void postUpdate(Persistent object) {
- // do something
- }
-}</programlisting></para>
- <para>Ignore the annotations for a minute. The important point here is that the listeners
- are arbitrary classes unmapped and unknown to Cayenne, that contain some callback
- methods. Now let's register them with
- runtime:<programlisting language="java">ServerRuntime runtime = ...
-
-runtime.getDataDomain().addListener(new Listener1());
-runtime.getDataDomain().addListener(new Listener2());</programlisting></para>
- <para>Listeners in this example are very simple. However they don't have to be. Unlike
- Persistent objects, normally listeners initialization is managed by the application
- code, not Cayenne, so listeners may have knowledge of various application services,
- operation transactional context, etc. Besides a single listener can apply to multiple
- entities. As a consequence their callbacks can do more than just access a single
- ObjectContext. </para>
- <para>Now let's discuss the annotations. There are eight annotations exactly matching the
- names of eight lifecycle events. A callback method in a listener should be annotated
- with at least one, but possibly with more than one of them. Annotation itself defines
- what event the callback should react to. Annotation parameters are essentially an entity
- filter, defining a subset of ObjEntities whose events we are interested
- in:<programlisting language="java">// this callback will be invoked on PostRemove event of any object
-// belonging to MyEntity1, MyEntity2 or their subclasses
-@PostRemove({ MyEntity1.class, MyEntity2.class })
-void postRemove(Persistent object) {
- ...
-}</programlisting><programlisting language="java">// similar example with multipe annotations on a single method
-// each matching just one entity
-@PostPersist(MyEntity1.class)
-@PostRemove(MyEntity1.class)
-@PostUpdate(MyEntity1.class)
-void postCommit(MyEntity1 object) {
- ...
-}</programlisting></para>
- <para>As shown above, "value" (the implicit annotation parameter) can contain one or more
- entity classes. Only these entities' events will result in callback invocation. There's
- also another way to match entities - via custom annotations. This allows to match any
- number of entities without even knowing what they are. Here is an example. We'll first
- define a custom
- annotation:<programlisting language="java">@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Tag {
-
-}</programlisting></para>
- <para>Now we can define a listener that will react to events from ObjEntities annotated with
- this
- annotation:<programlisting language="java">public class Listener3 {
-
- @PostAdd(entityAnnotations = Tag.class)
- void postAdd(Persistent object) {
- // do something
- }
-}</programlisting></para>
- <para>As you see we don't have any entities yet, still we can define a listener that does
- something useful. Now let's annotate some
- entities:<programlisting language="java">@Tag
-public class MyEntity1 extends _MyEntity1 {
-
-}
-
-@Tag
-public class MyEntity2 extends _MyEntity2 {
-
-}</programlisting></para>
- </section>
-
- <section xml:id="comining-listeners-with-datachannelfilters">
- <title>Combining Listeners with DataChannelFilters</title>
- <para>A final touch in the listeners design is preserving the state of the listener within a
- single select or commit, so that events generated by multiple objects can be collected
- and processed all together. To do that you will need to implement a
- <code>DataChannelFilter</code>, and add some callback methods to it. They will store
- their state in a ThreadLocal variable of the filter. Here is an example filter that does
- something pretty meaningless - counts how many total objects were committed. However it
- demonstrates the important pattern of aggregating multiple events and presenting a
- combined
- result:<programlisting language="java">public class CommittedObjectCounter implements DataChannelFilter {
-
- private ThreadLocal<int[]> counter;
-
- @Override
- public void init(DataChannel channel) {
- counter = new ThreadLocal<int[]>();
- }
-
- @Override
- public QueryResponse onQuery(ObjectContext originatingContext, Query query, DataChannelFilterChain filterChain) {
- return filterChain.onQuery(originatingContext, query);
- }
-
- @Override
- public GraphDiff onSync(ObjectContext originatingContext, GraphDiff changes, int syncType,
- DataChannelFilterChain filterChain) {
-
- // init the counter for the current commit
- counter.set(new int[1]);
-
- try {
- return filterChain.onSync(originatingContext, changes, syncType);
- } finally {
-
- // process aggregated result and release the counter
- System.out.println("Committed " + counter.get()[0] + " object(s)");
- counter.set(null);
- }
- }
-
- @PostPersist(entityAnnotations = Tag.class)
- @PostUpdate(entityAnnotations = Tag.class)
- @PostRemove(entityAnnotations = Tag.class)
- void afterCommit(Persistent object) {
- counter.get()[0]++;
- }
-}</programlisting></para>
- <para>Now since this is both a filter and a listener, it needs to be registered as
- such:<programlisting language="java">CommittedObjectCounter counter = new CommittedObjectCounter();
-
-ServerRuntime runtime = ...
-DataDomain domain = runtime.getDataDomain();
-
-// register filter
-// this will also add it as a listener (since 3.2)
-domain.addFilter(counter);</programlisting></para>
- </section>
-</chapter>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/orderings.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/orderings.xml b/docs/docbook/cayenne-guide/src/docbkx/orderings.xml
deleted file mode 100644
index a3a6bde..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/orderings.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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.
--->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
- version="5.0" xml:id="orderings">
- <title>Orderings</title>
- <para>An Ordering object defines how a list of objects should be ordered. Orderings are
- essentially path expressions combined with a sorting strategy. Creating an Ordering:
- <programlisting language="java">Ordering o = new Ordering(Painting.NAME_PROPERTY, SortOrder.ASCENDING);</programlisting></para>
- <para>Like expressions, orderings are translated into SQL as parts of queries (and the sorting
- occurs in the database). Also like expressions, orderings can be used in memory, naturally -
- to sort
- objects:<programlisting language="java">Ordering o = new Ordering(Painting.NAME_PROPERTY, SortOrder.ASCENDING_INSENSITIVE);
-List<Painting> list = ...
-o.orderList(list);</programlisting>Note
- that unlike filtering with Expressions, ordering is performed in-place. This list object is
- reordered and no new list is created.</para>
-</chapter>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/part1.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/part1.xml b/docs/docbook/cayenne-guide/src/docbkx/part1.xml
deleted file mode 100644
index ac79499..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/part1.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?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.
--->
-<part xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
- xml:id="cayenne-guide-part1" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Object Relational Mapping with Cayenne</title>
- <xi:include href="setup.xml"/>
- <xi:include href="cayenne-mapping-structure.xml"/>
- <xi:include href="cayennemodeler-application.xml"/>
-</part>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/part2.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/part2.xml b/docs/docbook/cayenne-guide/src/docbkx/part2.xml
deleted file mode 100644
index c5f8201..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/part2.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?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.
--->
-<part xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
- xml:id="cayenne-guide-part2" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Cayenne Framework</title>
- <xi:include href="including-cayenne-in-project.xml"/>
- <xi:include href="starting-cayenne.xml"/>
- <xi:include href="persistent-objects-objectcontext.xml"/>
- <xi:include href="expressions.xml"/>
- <xi:include href="orderings.xml"/>
- <xi:include href="queries.xml"/>
- <xi:include href="lifecycle-events.xml"/>
- <xi:include href="performance-tuning.xml"/>
- <xi:include href="customizing-cayenne-runtime.xml"/>
-</part>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/part3.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/part3.xml b/docs/docbook/cayenne-guide/src/docbkx/part3.xml
deleted file mode 100644
index 75c60b3..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/part3.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.
--->
-<part xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
- xml:id="cayenne-guide-part3" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Cayenne Framework - Remote Object Persistence </title>
- <xi:include href="rop-introduction.xml"/>
- <xi:include href="rop-setup.xml"/>
- <xi:include href="implementing-rop-server.xml"/>
- <xi:include href="implementing-rop-client.xml"/>
- <xi:include href="rop-deployment.xml"/>
- <xi:include href="current-limitations.xml"/>
-</part>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/part4.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/part4.xml b/docs/docbook/cayenne-guide/src/docbkx/part4.xml
deleted file mode 100644
index 76ea83e..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/part4.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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.
--->
-<part xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
- xml:id="cayenne-guide-part4" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>DB-First Flow</title>
- <xi:include href="re-introduction.xml"/>
- <xi:include href="re-filtering.xml"/>
- <xi:include href="re-other-settings.xml"/>
- <xi:include href="re-modeler.xml"/>
-</part>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/df1324e4/docs/docbook/cayenne-guide/src/docbkx/part5.xml
----------------------------------------------------------------------
diff --git a/docs/docbook/cayenne-guide/src/docbkx/part5.xml b/docs/docbook/cayenne-guide/src/docbkx/part5.xml
deleted file mode 100644
index ee95291..0000000
--- a/docs/docbook/cayenne-guide/src/docbkx/part5.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?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.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
-<part xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
- xml:id="cayenne-guide-part5" xmlns:xi="http://www.w3.org/2001/XInclude">
- <title>Cayenne Additional Modules</title>
- <xi:include href="ext-cache-invalidation.xml"/>
- <xi:include href="ext-commit-log.xml"/>
- <xi:include href="ext-crypto.xml"/>
- <!--<xi:include href="ext-dbcp2.xml"/>-->
- <!--<xi:include href="ext-java8.xml"/>-->
- <xi:include href="ext-jcache.xml"/>
- <xi:include href="ext-joda.xml"/>
- <xi:include href="ext-project-compatibility.xml"/>
- <xi:include href="ext-velocity.xml"/>
-</part>