http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/itests/cayenne-tools-itest/src/test/resources/testmap.map.xml
----------------------------------------------------------------------
diff --git a/itests/cayenne-tools-itest/src/test/resources/testmap.map.xml 
b/itests/cayenne-tools-itest/src/test/resources/testmap.map.xml
deleted file mode 100644
index e426dda..0000000
--- a/itests/cayenne-tools-itest/src/test/resources/testmap.map.xml
+++ /dev/null
@@ -1,735 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap";
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-        xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap 
http://cayenne.apache.org/schema/10/modelMap.xsd";
-        project-version="10">
-       <property name="defaultPackage" 
value="org.apache.cayenne.testdo.testmap"/>
-       <property name="defaultSuperclass" 
value="org.apache.cayenne.CayenneDataObject"/>
-       <property name="clientSupported" value="true"/>
-       <property name="defaultClientPackage" value="test.client"/>
-       <property name="defaultClientSuperclass" 
value="org.apache.cayenne.PersistentObject"/>
-       <procedure name="cayenne_tst_out_proc">
-               <procedure-parameter name="in_param" type="INTEGER" 
direction="in"/>
-               <procedure-parameter name="out_param" type="INTEGER" 
direction="out"/>
-       </procedure>
-       <procedure name="cayenne_tst_select_proc">
-               <procedure-parameter name="aName" type="VARCHAR" length="254" 
direction="in"/>
-               <procedure-parameter name="paintingPrice" type="INTEGER" 
direction="in"/>
-       </procedure>
-       <procedure name="cayenne_tst_upd_proc">
-               <procedure-parameter name="paintingPrice" type="INTEGER" 
direction="in"/>
-       </procedure>
-       <procedure name="cayenne_tst_upd_proc2">
-       </procedure>
-       <db-entity name="ARRAYS_ENTITY">
-               <db-attribute name="BYTE_ARRAY" type="VARBINARY" length="200"/>
-               <db-attribute name="BYTE_WRAPPER_ARRAY" type="VARBINARY" 
length="200"/>
-               <db-attribute name="CHAR_ARRAY" type="VARCHAR" length="200"/>
-               <db-attribute name="CHAR_WRAPPER_ARRAY" type="VARCHAR" 
length="200"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="ARTGROUP">
-               <db-attribute name="GROUP_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" isMandatory="true" 
length="100"/>
-               <db-attribute name="PARENT_GROUP_ID" type="INTEGER"/>
-       </db-entity>
-       <db-entity name="ARTIST">
-               <db-attribute name="ARTIST_ID" type="BIGINT" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="ARTIST_NAME" type="CHAR" isMandatory="true" 
length="254"/>
-               <db-attribute name="DATE_OF_BIRTH" type="DATE"/>
-       </db-entity>
-       <db-entity name="ARTIST_CT">
-               <db-attribute name="ARTIST_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="ARTIST_NAME" type="CHAR" isMandatory="true" 
length="254"/>
-               <db-attribute name="DATE_OF_BIRTH" type="DATE"/>
-       </db-entity>
-       <db-entity name="ARTIST_EXHIBIT">
-               <db-attribute name="ARTIST_ID" type="BIGINT" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="EXHIBIT_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="ARTIST_GROUP">
-               <db-attribute name="ARTIST_ID" type="BIGINT" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="GROUP_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="BIGDECIMAL_ENTITY">
-               <db-attribute name="BIGDECIMAL_FIELD" type="NUMERIC" 
length="12" scale="2"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="BIGINTEGER_ENTITY">
-               <db-attribute name="BIG_INTEGER_FIELD" type="BIGINT"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="BINARY_PK_TEST1">
-               <db-attribute name="BIN_ID" type="VARBINARY" 
isPrimaryKey="true" isMandatory="true" length="32"/>
-               <db-attribute name="NAME" type="VARCHAR" length="10"/>
-       </db-entity>
-       <db-entity name="BINARY_PK_TEST2">
-               <db-attribute name="DETAIL_NAME" type="VARCHAR" length="10"/>
-               <db-attribute name="FK_ID" type="VARBINARY" length="32"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="BIT_TEST">
-               <db-attribute name="BIT_COLUMN" type="BIT" isMandatory="true"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="BLOB_TEST">
-               <db-attribute name="BLOB_COL" type="BLOB"/>
-               <db-attribute name="BLOB_TEST_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="BOOLEAN_TEST">
-               <db-attribute name="BOOLEAN_COLUMN" type="BOOLEAN" 
isMandatory="true"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="CALENDAR_TEST">
-               <db-attribute name="CALENDAR_FIELD" type="TIMESTAMP"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="CHARACTER_ENTITY">
-               <db-attribute name="CHARACTER_FIELD" type="CHAR" length="1"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="CHAR_FK_TEST">
-               <db-attribute name="FK_COL" type="CHAR" length="10"/>
-               <db-attribute name="NAME" type="VARCHAR" length="100"/>
-               <db-attribute name="PK" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="CHAR_PK_TEST">
-               <db-attribute name="OTHER_COL" type="CHAR" length="10"/>
-               <db-attribute name="PK_COL" type="CHAR" isPrimaryKey="true" 
isMandatory="true" length="10"/>
-       </db-entity>
-       <db-entity name="CLOB_TEST">
-               <db-attribute name="CLOB_COL" type="CLOB"/>
-               <db-attribute name="CLOB_TEST_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="CLOB_TEST_RELATION">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="ID_CLOB" type="INTEGER" isMandatory="true"/>
-               <db-attribute name="VALUE" type="INTEGER"/>
-       </db-entity>
-       <db-entity name="COMPOUND_FK_TEST">
-               <db-attribute name="F_KEY1" type="VARCHAR" length="20"/>
-               <db-attribute name="F_KEY2" type="VARCHAR" length="20"/>
-               <db-attribute name="NAME" type="VARCHAR" length="255"/>
-               <db-attribute name="PKEY" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="COMPOUND_PK_TEST">
-               <db-attribute name="KEY1" type="VARCHAR" isPrimaryKey="true" 
isMandatory="true" length="20"/>
-               <db-attribute name="KEY2" type="VARCHAR" isPrimaryKey="true" 
isMandatory="true" length="20"/>
-               <db-attribute name="NAME" type="VARCHAR" length="255"/>
-       </db-entity>
-       <db-entity name="DATE_TEST">
-               <db-attribute name="DATE_COLUMN" type="DATE"/>
-               <db-attribute name="DATE_TEST_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="TIMESTAMP_COLUMN" type="TIMESTAMP"/>
-               <db-attribute name="TIME_COLUMN" type="TIME"/>
-       </db-entity>
-       <db-entity name="DECIMAL_PK_TST">
-               <db-attribute name="DECIMAL_PK" type="DECIMAL" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="100"/>
-       </db-entity>
-       <db-entity name="ENUM_ENTITY">
-               <db-attribute name="ENUM_ATTRIBUTE" type="VARCHAR" 
length="250"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="EXHIBIT">
-               <db-attribute name="CLOSING_DATE" type="TIMESTAMP" 
isMandatory="true"/>
-               <db-attribute name="EXHIBIT_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="GALLERY_ID" type="INTEGER" 
isMandatory="true"/>
-               <db-attribute name="OPENING_DATE" type="TIMESTAMP" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="EXTENDED_TYPE_TEST">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="200"/>
-       </db-entity>
-       <db-entity name="FLOAT_TEST">
-               <db-attribute name="FLOAT_COL" type="FLOAT"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="GALLERY">
-               <db-attribute name="GALLERY_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="GALLERY_NAME" type="VARCHAR" 
isMandatory="true" length="100"/>
-       </db-entity>
-       <db-entity name="GENERATED_COLUMN_COMP_KEY">
-               <db-attribute name="AUTO_PK" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="GENERATED_COLUMN" type="INTEGER" 
isPrimaryKey="true" isGenerated="true" isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="100"/>
-               <db-attribute name="PROPAGATED_PK" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="GENERATED_COLUMN_COMP_M">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="100"/>
-       </db-entity>
-       <db-entity name="GENERATED_COLUMN_DEP">
-               <db-attribute name="GENERATED_COLUMN_FK" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="100"/>
-       </db-entity>
-       <db-entity name="GENERATED_COLUMN_TEST">
-               <db-attribute name="GENERATED_COLUMN" type="INTEGER" 
isPrimaryKey="true" isGenerated="true" isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="250"/>
-       </db-entity>
-       <db-entity name="GENERATED_COLUMN_TEST2">
-               <db-attribute name="GENERATED_COLUMN" type="INTEGER" 
isPrimaryKey="true" isGenerated="true" isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="100"/>
-       </db-entity>
-       <db-entity name="GENERATED_F1">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="GENERATED_F2">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-       </db-entity>
-       <db-entity name="GENERATED_JOIN">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isGenerated="true" isMandatory="true"/>
-               <db-attribute name="ID1" type="INTEGER"/>
-               <db-attribute name="ID2" type="INTEGER"/>
-       </db-entity>
-       <db-entity name="LONG_ENTITY">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="LONG_FIELD" type="BIGINT"/>
-       </db-entity>
-       <db-entity name="MEANINGFUL_PK_DEP">
-               <db-attribute name="DESCR" type="VARCHAR" length="50"/>
-               <db-attribute name="MASTER_PK" type="INTEGER"/>
-               <db-attribute name="PK_ATTRIBUTE" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="MEANINGFUL_PK_TEST1">
-               <db-attribute name="DESCR" type="VARCHAR" length="50"/>
-               <db-attribute name="PK_ATTRIBUTE" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-       </db-entity>
-       <db-entity name="MIXED_PERSISTENCE_STRATEGY">
-               <db-attribute name="DESCRIPTION" type="VARCHAR" length="200"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="NAME" type="VARCHAR" length="200"/>
-       </db-entity>
-       <db-entity name="MIXED_PERSISTENCE_STRATEGY2">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="MASTER_ID" type="INTEGER"/>
-               <db-attribute name="NAME" type="VARCHAR" length="200"/>
-       </db-entity>
-       <db-entity name="NO_PK_TEST">
-               <db-attribute name="ATTRIBUTE1" type="INTEGER"/>
-       </db-entity>
-       <db-entity name="PAINTING">
-               <db-attribute name="ARTIST_ID" type="BIGINT"/>
-               <db-attribute name="ESTIMATED_PRICE" type="DECIMAL" length="10" 
scale="2"/>
-               <db-attribute name="GALLERY_ID" type="INTEGER"/>
-               <db-attribute name="PAINTING_DESCRIPTION" type="VARCHAR" 
length="255"/>
-               <db-attribute name="PAINTING_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="PAINTING_TITLE" type="VARCHAR" 
isMandatory="true" length="255"/>
-       </db-entity>
-       <db-entity name="PAINTING1">
-               <db-attribute name="ARTIST_ID" type="BIGINT"/>
-               <db-attribute name="ESTIMATED_PRICE" type="DECIMAL" length="10" 
scale="2"/>
-               <db-attribute name="GALLERY_ID" type="INTEGER"/>
-               <db-attribute name="PAINTING_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="PAINTING_TITLE" type="VARCHAR" 
isMandatory="true" length="255"/>
-       </db-entity>
-       <db-entity name="PAINTING_INFO">
-               <db-attribute name="IMAGE_BLOB" type="LONGVARBINARY"/>
-               <db-attribute name="PAINTING_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
-               <db-attribute name="TEXT_REVIEW" type="LONGVARCHAR"/>
-       </db-entity>
-       <db-entity name="PRIMITIVES_TEST">
-               <db-attribute name="BOOLEAN_COLUMN" type="BOOLEAN"/>
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="INT_COLUMN" type="INTEGER"/>
-       </db-entity>
-       <db-entity name="SERIALIZABLE_ENTITY">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="SERIALIZABLE_FIELD" type="BLOB"/>
-       </db-entity>
-       <db-entity name="SMALLINT_TEST">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="SMALLINT_COL" type="SMALLINT"/>
-       </db-entity>
-       <db-entity name="TINYINT_TEST">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="TINYINT_COL" type="TINYINT"/>
-       </db-entity>
-       <db-entity name="TYPES_MAPPING_TEST1">
-               <db-attribute name="AAAID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="BIGINT_COLUMN" type="BIGINT"/>
-               <db-attribute name="BIT_COLUMN" type="BIT"/>
-               <db-attribute name="BOOLEAN_COLUMN" type="BOOLEAN"/>
-               <db-attribute name="CHAR_COLUMN" type="CHAR" length="254"/>
-               <db-attribute name="CLOB_COLUMN" type="CLOB"/>
-               <db-attribute name="DATE_COLUMN" type="DATE"/>
-               <db-attribute name="DECIMAL_COLUMN" type="DECIMAL" length="12" 
scale="5"/>
-               <db-attribute name="DOUBLE_COLUMN" type="DOUBLE" scale="7"/>
-               <db-attribute name="FLOAT_COLUMN" type="FLOAT" scale="3"/>
-               <db-attribute name="INTEGER_COLUMN" type="INTEGER"/>
-               <db-attribute name="LONGVARCHAR_COLUMN" type="LONGVARCHAR"/>
-               <db-attribute name="NUMERIC_COLUMN" type="NUMERIC" length="12" 
scale="5"/>
-               <db-attribute name="REAL_COLUMN" type="REAL" scale="5"/>
-               <db-attribute name="SMALLINT_COLUMN" type="SMALLINT"/>
-               <db-attribute name="TIMESTAMP_COLUMN" type="TIMESTAMP"/>
-               <db-attribute name="TIME_COLUMN" type="TIME"/>
-               <db-attribute name="TINYINT_COLUMN" type="TINYINT"/>
-               <db-attribute name="VARCHAR_COLUMN" type="VARCHAR" 
length="255"/>
-       </db-entity>
-       <db-entity name="TYPES_MAPPING_TEST2">
-               <db-attribute name="AAAID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="BINARY_COLUMN" type="BINARY" length="14"/>
-               <db-attribute name="BLOB_COLUMN" type="BLOB"/>
-               <db-attribute name="LONGVARBINARY_COLUMN" type="LONGVARBINARY"/>
-               <db-attribute name="VARBINARY_COLUMN" type="VARBINARY" 
length="1000"/>
-       </db-entity>
-       <db-entity name="UUID_TEST">
-               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
-               <db-attribute name="UUID" type="VARCHAR" length="100"/>
-       </db-entity>
-       <obj-entity name="ArraysEntity" 
className="org.apache.cayenne.testdo.misc_types.ArraysEntity" 
dbEntityName="ARRAYS_ENTITY">
-               <obj-attribute name="byteArray" type="byte[]" 
db-attribute-path="BYTE_ARRAY"/>
-               <obj-attribute name="byteWrapperArray" type="java.lang.Byte[]" 
db-attribute-path="BYTE_WRAPPER_ARRAY"/>
-               <obj-attribute name="charArray" type="char[]" 
db-attribute-path="CHAR_ARRAY"/>
-               <obj-attribute name="charWrapperArray" 
type="java.lang.Character[]" db-attribute-path="CHAR_WRAPPER_ARRAY"/>
-       </obj-entity>
-       <obj-entity name="ArtGroup" 
className="org.apache.cayenne.testdo.testmap.ArtGroup" dbEntityName="ARTGROUP">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="Artist" 
className="org.apache.cayenne.testdo.testmap.Artist" dbEntityName="ARTIST">
-               <obj-attribute name="artistName" type="java.lang.String" 
db-attribute-path="ARTIST_NAME"/>
-               <obj-attribute name="dateOfBirth" type="java.util.Date" 
db-attribute-path="DATE_OF_BIRTH"/>
-       </obj-entity>
-       <obj-entity name="ArtistCallbackTest" 
className="org.apache.cayenne.testdo.testmap.ArtistCallbackTest" 
dbEntityName="ARTIST_CT">
-               <obj-attribute name="artistName" type="java.lang.String"/>
-               <obj-attribute name="dateOfBirth" type="java.util.Date"/>
-               <post-add method-name="prePersistEntityObjEntity"/>
-               <post-persist method-name="postPersistEntityObjEntity"/>
-               <pre-update method-name="preUpdateEntityObjEntity"/>
-               <post-update method-name="postUpdateEntityObjEntity"/>
-               <pre-remove method-name="preRemoveEntityObjEntity"/>
-               <post-remove method-name="postRemoveEntityObjEntity"/>
-               <post-load method-name="postLoadEntityObjEntity"/>
-       </obj-entity>
-       <obj-entity name="ArtistExhibit" 
className="org.apache.cayenne.testdo.testmap.ArtistExhibit" 
dbEntityName="ARTIST_EXHIBIT">
-       </obj-entity>
-       <obj-entity name="BigDecimalEntity" 
className="org.apache.cayenne.testdo.numeric_types.BigDecimalEntity" 
dbEntityName="BIGDECIMAL_ENTITY">
-               <obj-attribute name="bigDecimalField" 
type="java.math.BigDecimal" db-attribute-path="BIGDECIMAL_FIELD"/>
-       </obj-entity>
-       <obj-entity name="BigIntegerEntity" 
className="org.apache.cayenne.testdo.numeric_types.BigIntegerEntity" 
dbEntityName="BIGINTEGER_ENTITY">
-               <obj-attribute name="bigIntegerField" 
type="java.math.BigInteger" db-attribute-path="BIG_INTEGER_FIELD"/>
-       </obj-entity>
-       <obj-entity name="BinaryPKTest1" 
className="org.apache.cayenne.testdo.binary_pk.BinaryPKTest1" 
dbEntityName="BINARY_PK_TEST1">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="BinaryPKTest2" 
className="org.apache.cayenne.testdo.binary_pk.BinaryPKTest2" 
dbEntityName="BINARY_PK_TEST2">
-               <obj-attribute name="detailName" type="java.lang.String" 
db-attribute-path="DETAIL_NAME"/>
-       </obj-entity>
-       <obj-entity name="BitNumberTestEntity" 
className="org.apache.cayenne.testdo.numeric_types.BitNumberTestEntity" 
dbEntityName="BIT_TEST">
-               <obj-attribute name="bitColumn" type="java.lang.Integer" 
db-attribute-path="BIT_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="BitTestEntity" 
className="org.apache.cayenne.testdo.numeric_types.BitTestEntity" 
dbEntityName="BIT_TEST">
-               <obj-attribute name="bitColumn" type="java.lang.Boolean" 
db-attribute-path="BIT_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="BlobTestEntity" 
className="org.apache.cayenne.testdo.lob.BlobTestEntity" 
dbEntityName="BLOB_TEST">
-               <obj-attribute name="blobCol" type="byte[]" 
db-attribute-path="BLOB_COL"/>
-       </obj-entity>
-       <obj-entity name="BooleanTestEntity" 
className="org.apache.cayenne.testdo.numeric_types.BooleanTestEntity" 
dbEntityName="BOOLEAN_TEST">
-               <obj-attribute name="booleanColumn" type="java.lang.Boolean" 
db-attribute-path="BOOLEAN_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="CalendarEntity" 
className="org.apache.cayenne.testdo.date_time.CalendarEntity" 
dbEntityName="CALENDAR_TEST">
-               <obj-attribute name="calendarField" type="java.util.Calendar" 
db-attribute-path="CALENDAR_FIELD"/>
-       </obj-entity>
-       <obj-entity name="CharFkTestEntity" 
className="org.apache.cayenne.testdo.compound.CharFkTestEntity" 
dbEntityName="CHAR_FK_TEST">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="CharPkTestEntity" 
className="org.apache.cayenne.testdo.compound.CharPkTestEntity" 
dbEntityName="CHAR_PK_TEST">
-               <obj-attribute name="otherCol" type="java.lang.String" 
db-attribute-path="OTHER_COL"/>
-               <obj-attribute name="pkCol" type="java.lang.String" 
db-attribute-path="PK_COL"/>
-       </obj-entity>
-       <obj-entity name="CharacterEntity" 
className="org.apache.cayenne.testdo.misc_types.CharacterEntity" 
dbEntityName="CHARACTER_ENTITY">
-               <obj-attribute name="characterField" type="java.lang.Character" 
db-attribute-path="CHARACTER_FIELD"/>
-       </obj-entity>
-       <obj-entity name="ClobTestEntity" 
className="org.apache.cayenne.testdo.lob.ClobTestEntity" 
dbEntityName="CLOB_TEST">
-               <obj-attribute name="clobCol" type="java.lang.String" 
db-attribute-path="CLOB_COL"/>
-       </obj-entity>
-       <obj-entity name="ClobTestRelation" 
className="org.apache.cayenne.testdo.lob.ClobTestRelation" 
dbEntityName="CLOB_TEST_RELATION">
-               <obj-attribute name="id" type="java.lang.Integer" 
db-attribute-path="ID"/>
-               <obj-attribute name="value" type="java.lang.Integer" 
db-attribute-path="VALUE"/>
-       </obj-entity>
-       <obj-entity name="CompoundFkTestEntity" 
className="org.apache.cayenne.testdo.compound.CompoundFkTestEntity" 
dbEntityName="COMPOUND_FK_TEST">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="CompoundPainting" 
className="org.apache.cayenne.testdo.testmap.CompoundPainting" 
dbEntityName="PAINTING">
-               <obj-attribute name="artistName" type="java.lang.String" 
db-attribute-path="toArtist.ARTIST_NAME"/>
-               <obj-attribute name="estimatedPrice" 
type="java.math.BigDecimal" db-attribute-path="ESTIMATED_PRICE"/>
-               <obj-attribute name="galleryName" type="java.lang.String" 
db-attribute-path="toGallery.GALLERY_NAME"/>
-               <obj-attribute name="paintingTitle" type="java.lang.String" 
db-attribute-path="PAINTING_TITLE"/>
-               <obj-attribute name="textReview" type="java.lang.String" 
db-attribute-path="toPaintingInfo.TEXT_REVIEW"/>
-       </obj-entity>
-       <obj-entity name="CompoundPkTestEntity" 
className="org.apache.cayenne.testdo.compound.CompoundPkTestEntity" 
dbEntityName="COMPOUND_PK_TEST">
-               <obj-attribute name="key1" type="java.lang.String" 
db-attribute-path="KEY1"/>
-               <obj-attribute name="key2" type="java.lang.String" 
db-attribute-path="KEY2"/>
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="DateTestEntity" 
className="org.apache.cayenne.testdo.date_time.DateTestEntity" 
dbEntityName="DATE_TEST">
-               <obj-attribute name="dateColumn" type="java.util.Date" 
db-attribute-path="DATE_COLUMN"/>
-               <obj-attribute name="timeColumn" type="java.util.Date" 
db-attribute-path="TIME_COLUMN"/>
-               <obj-attribute name="timestampColumn" type="java.util.Date" 
db-attribute-path="TIMESTAMP_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="DecimalPKTest1" 
className="org.apache.cayenne.testdo.numeric_types.DecimalPKTest1" 
dbEntityName="DECIMAL_PK_TST">
-               <obj-attribute name="decimalPK" type="java.lang.Double" 
db-attribute-path="DECIMAL_PK"/>
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="DecimalPKTestEntity" 
className="org.apache.cayenne.testdo.numeric_types.DecimalPKTestEntity" 
dbEntityName="DECIMAL_PK_TST">
-               <obj-attribute name="decimalPK" type="java.math.BigDecimal" 
db-attribute-path="DECIMAL_PK"/>
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="EnumEntity" 
className="org.apache.cayenne.testdo.enum_test.EnumEntity" 
dbEntityName="ENUM_ENTITY">
-               <obj-attribute name="enumAttribute" 
type="org.apache.cayenne.testdo.enum_test.Enum1" 
db-attribute-path="ENUM_ATTRIBUTE"/>
-       </obj-entity>
-       <obj-entity name="Exhibit" 
className="org.apache.cayenne.testdo.testmap.Exhibit" dbEntityName="EXHIBIT">
-               <obj-attribute name="closingDate" type="java.util.Date" 
db-attribute-path="CLOSING_DATE"/>
-               <obj-attribute name="openingDate" type="java.util.Date" 
db-attribute-path="OPENING_DATE"/>
-       </obj-entity>
-       <obj-entity name="ExtendedTypeEntity" 
className="org.apache.cayenne.testdo.extended_type.ExtendedTypeEntity" 
dbEntityName="EXTENDED_TYPE_TEST">
-               <obj-attribute name="name" 
type="org.apache.cayenne.testdo.extended_type.StringET1" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="Gallery" 
className="org.apache.cayenne.testdo.testmap.Gallery" dbEntityName="GALLERY">
-               <obj-attribute name="galleryName" type="java.lang.String" 
db-attribute-path="GALLERY_NAME"/>
-       </obj-entity>
-       <obj-entity name="GeneratedColumnCompKey" 
className="org.apache.cayenne.testdo.generated.GeneratedColumnCompKey" 
dbEntityName="GENERATED_COLUMN_COMP_KEY">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="GeneratedColumnCompMaster" 
className="org.apache.cayenne.testdo.generated.GeneratedColumnCompMaster" 
dbEntityName="GENERATED_COLUMN_COMP_M">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="GeneratedColumnDep" 
className="org.apache.cayenne.testdo.generated.GeneratedColumnDep" 
dbEntityName="GENERATED_COLUMN_DEP">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="GeneratedColumnTest2" 
className="org.apache.cayenne.testdo.generated.GeneratedColumnTest2" 
dbEntityName="GENERATED_COLUMN_TEST2">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="GeneratedColumnTestEntity" 
className="org.apache.cayenne.testdo.generated.GeneratedColumnTestEntity" 
dbEntityName="GENERATED_COLUMN_TEST">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="GeneratedF1" 
className="org.apache.cayenne.testdo.generated.GeneratedF1" 
clientClassName="test.client.GeneratedF1" dbEntityName="GENERATED_F1" 
superClassName="org.apache.cayenne.CayenneDataObject" 
clientSuperClassName="org.apache.cayenne.PersistentObject">
-       </obj-entity>
-       <obj-entity name="GeneratedF2" 
className="org.apache.cayenne.testdo.generated.GeneratedF2" 
clientClassName="test.client.GeneratedF2" dbEntityName="GENERATED_F2" 
superClassName="org.apache.cayenne.CayenneDataObject" 
clientSuperClassName="org.apache.cayenne.PersistentObject">
-       </obj-entity>
-       <obj-entity name="LongEntity" 
className="org.apache.cayenne.testdo.numeric_types.LongEntity" 
dbEntityName="LONG_ENTITY">
-               <obj-attribute name="longField" type="java.lang.Long" 
db-attribute-path="LONG_FIELD"/>
-       </obj-entity>
-       <obj-entity name="MeaningfulGeneratedColumnTestEntity" 
className="org.apache.cayenne.testdo.testmap.MeaningfulGeneratedColumnTestEntity"
 dbEntityName="GENERATED_COLUMN_TEST">
-               <obj-attribute name="generatedColumn" type="java.lang.Integer" 
db-attribute-path="GENERATED_COLUMN"/>
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="MeaningfulPKDep" 
className="org.apache.cayenne.testdo.meaningful_pk.MeaningfulPKDep" 
dbEntityName="MEANINGFUL_PK_DEP">
-               <obj-attribute name="descr" type="java.lang.String" 
db-attribute-path="DESCR"/>
-       </obj-entity>
-       <obj-entity name="MeaningfulPKTest1" 
className="org.apache.cayenne.testdo.meaningful_pk.MeaningfulPKTest1" 
dbEntityName="MEANINGFUL_PK_TEST1">
-               <obj-attribute name="descr" type="java.lang.String" 
db-attribute-path="DESCR"/>
-               <obj-attribute name="pkAttribute" type="java.lang.Integer" 
db-attribute-path="PK_ATTRIBUTE"/>
-       </obj-entity>
-       <obj-entity name="MixedPersistenceStrategy" 
className="org.apache.cayenne.testdo.mixed_persistence_strategy.MixedPersistenceStrategy"
 dbEntityName="MIXED_PERSISTENCE_STRATEGY">
-               <obj-attribute name="description" type="java.lang.String" 
db-attribute-path="DESCRIPTION"/>
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="MixedPersistenceStrategy2" 
className="org.apache.cayenne.testdo.mixed_persistence_strategy.MixedPersistenceStrategy2"
 dbEntityName="MIXED_PERSISTENCE_STRATEGY2">
-               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
-       </obj-entity>
-       <obj-entity name="NoPkTestEntity" 
className="org.apache.cayenne.testdo.no_pk.NoPkTestEntity" 
dbEntityName="NO_PK_TEST">
-               <obj-attribute name="attribute1" type="java.lang.Integer" 
db-attribute-path="ATTRIBUTE1"/>
-       </obj-entity>
-       <obj-entity name="Painting" 
className="org.apache.cayenne.testdo.testmap.Painting" dbEntityName="PAINTING" 
superClassName="org.apache.cayenne.testdo.testmap.ArtDataObject">
-               <obj-attribute name="estimatedPrice" 
type="java.math.BigDecimal" db-attribute-path="ESTIMATED_PRICE"/>
-               <obj-attribute name="paintingDescription" 
type="java.lang.String" db-attribute-path="PAINTING_DESCRIPTION"/>
-               <obj-attribute name="paintingTitle" type="java.lang.String" 
db-attribute-path="PAINTING_TITLE"/>
-       </obj-entity>
-       <obj-entity name="Painting1" 
className="org.apache.cayenne.testdo.testmap.Painting1" 
dbEntityName="PAINTING1">
-               <obj-attribute name="estimatedPrice" 
type="java.math.BigDecimal" db-attribute-path="ESTIMATED_PRICE"/>
-               <obj-attribute name="paintingTitle" type="java.lang.String" 
db-attribute-path="PAINTING_TITLE"/>
-       </obj-entity>
-       <obj-entity name="PaintingInfo" 
className="org.apache.cayenne.testdo.testmap.PaintingInfo" 
dbEntityName="PAINTING_INFO">
-               <obj-attribute name="imageBlob" type="byte[]" 
db-attribute-path="IMAGE_BLOB"/>
-               <obj-attribute name="textReview" type="java.lang.String" 
db-attribute-path="TEXT_REVIEW"/>
-       </obj-entity>
-       <obj-entity name="PrimitivesTestEntity" 
className="org.apache.cayenne.testdo.primitive.PrimitivesTestEntity" 
dbEntityName="PRIMITIVES_TEST">
-               <obj-attribute name="booleanColumn" type="boolean" 
db-attribute-path="BOOLEAN_COLUMN"/>
-               <obj-attribute name="intColumn" type="int" 
db-attribute-path="INT_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="ROArtist" 
className="org.apache.cayenne.testdo.testmap.ROArtist" readOnly="true" 
dbEntityName="ARTIST">
-               <obj-attribute name="artistName" type="java.lang.String" 
db-attribute-path="ARTIST_NAME"/>
-               <obj-attribute name="dateOfBirth" type="java.sql.Date" 
db-attribute-path="DATE_OF_BIRTH"/>
-       </obj-entity>
-       <obj-entity name="ROPainting" 
className="org.apache.cayenne.testdo.testmap.ROPainting" readOnly="true" 
dbEntityName="PAINTING">
-               <obj-attribute name="estimatedPrice" 
type="java.math.BigDecimal" db-attribute-path="ESTIMATED_PRICE"/>
-               <obj-attribute name="paintingTitle" type="java.lang.String" 
db-attribute-path="PAINTING_TITLE"/>
-       </obj-entity>
-       <obj-entity name="RWCompoundPainting" 
className="org.apache.cayenne.testdo.testmap.RWCompoundPainting" 
dbEntityName="PAINTING">
-               <obj-attribute name="estimatedPrice" 
type="java.math.BigDecimal" db-attribute-path="ESTIMATED_PRICE"/>
-               <obj-attribute name="paintingTitle" type="java.lang.String" 
db-attribute-path="PAINTING_TITLE"/>
-               <obj-attribute name="textReview" type="java.lang.String" 
db-attribute-path="toPaintingInfo.TEXT_REVIEW"/>
-       </obj-entity>
-       <obj-entity name="ReturnTypesMap1" 
className="org.apache.cayenne.testdo.return_types.ReturnTypesMap1" 
clientClassName="test.client.ReturnTypesMap1" 
dbEntityName="TYPES_MAPPING_TEST1" 
superClassName="org.apache.cayenne.CayenneDataObject" 
clientSuperClassName="org.apache.cayenne.PersistentObject">
-               <obj-attribute name="bigintColumn" type="java.lang.Long" 
db-attribute-path="BIGINT_COLUMN"/>
-               <obj-attribute name="bitColumn" type="java.lang.Boolean" 
db-attribute-path="BIT_COLUMN"/>
-               <obj-attribute name="booleanColumn" type="java.lang.Boolean" 
db-attribute-path="BOOLEAN_COLUMN"/>
-               <obj-attribute name="charColumn" type="java.lang.String" 
db-attribute-path="CHAR_COLUMN"/>
-               <obj-attribute name="clobColumn" type="java.lang.String" 
db-attribute-path="CLOB_COLUMN"/>
-               <obj-attribute name="dateColumn" type="java.util.Date" 
db-attribute-path="DATE_COLUMN"/>
-               <obj-attribute name="decimalColumn" type="java.math.BigDecimal" 
db-attribute-path="DECIMAL_COLUMN"/>
-               <obj-attribute name="doubleColumn" type="java.lang.Double" 
db-attribute-path="DOUBLE_COLUMN"/>
-               <obj-attribute name="floatColumn" type="java.lang.Float" 
db-attribute-path="FLOAT_COLUMN"/>
-               <obj-attribute name="integerColumn" type="java.lang.Integer" 
db-attribute-path="INTEGER_COLUMN"/>
-               <obj-attribute name="longvarcharColumn" type="java.lang.String" 
db-attribute-path="LONGVARCHAR_COLUMN"/>
-               <obj-attribute name="numericColumn" type="java.math.BigDecimal" 
db-attribute-path="NUMERIC_COLUMN"/>
-               <obj-attribute name="realColumn" type="java.lang.Float" 
db-attribute-path="REAL_COLUMN"/>
-               <obj-attribute name="smallintColumn" type="java.lang.Short" 
db-attribute-path="SMALLINT_COLUMN"/>
-               <obj-attribute name="timeColumn" type="java.util.Date" 
db-attribute-path="TIME_COLUMN"/>
-               <obj-attribute name="timestampColumn" type="java.util.Date" 
db-attribute-path="TIMESTAMP_COLUMN"/>
-               <obj-attribute name="tinyintColumn" type="java.lang.Byte" 
db-attribute-path="TINYINT_COLUMN"/>
-               <obj-attribute name="varcharColumn" type="java.lang.String" 
db-attribute-path="VARCHAR_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="ReturnTypesMap2" 
className="org.apache.cayenne.testdo.return_types.ReturnTypesMap2" 
clientClassName="test.client.ReturnTypesMap2" 
dbEntityName="TYPES_MAPPING_TEST2" 
superClassName="org.apache.cayenne.CayenneDataObject" 
clientSuperClassName="org.apache.cayenne.PersistentObject">
-               <obj-attribute name="binaryColumn" type="byte[]" 
db-attribute-path="BINARY_COLUMN"/>
-               <obj-attribute name="blobColumn" type="byte[]" 
db-attribute-path="BLOB_COLUMN"/>
-               <obj-attribute name="longvarbinaryColumn" type="byte[]" 
db-attribute-path="LONGVARBINARY_COLUMN"/>
-               <obj-attribute name="varbinaryColumn" type="byte[]" 
db-attribute-path="VARBINARY_COLUMN"/>
-       </obj-entity>
-       <obj-entity name="SerializableEntity" 
className="org.apache.cayenne.testdo.misc_types.SerializableEntity" 
dbEntityName="SERIALIZABLE_ENTITY">
-               <obj-attribute name="serializableField" 
type="org.apache.cayenne.MockSerializable" 
db-attribute-path="SERIALIZABLE_FIELD"/>
-       </obj-entity>
-       <obj-entity name="SmallintTestEntity" 
className="org.apache.cayenne.testdo.numeric_types.SmallintTestEntity" 
dbEntityName="SMALLINT_TEST">
-               <obj-attribute name="smallintCol" type="java.lang.Short" 
db-attribute-path="SMALLINT_COL"/>
-       </obj-entity>
-       <obj-entity name="SubPainting" 
className="org.apache.cayenne.testdo.testmap.SubPainting" 
dbEntityName="PAINTING">
-               <obj-attribute name="paintingTitle" type="java.lang.String" 
db-attribute-path="PAINTING_TITLE"/>
-       </obj-entity>
-       <obj-entity name="TinyintTestEntity" 
className="org.apache.cayenne.testdo.numeric_types.TinyintTestEntity" 
dbEntityName="TINYINT_TEST">
-               <obj-attribute name="tinyintCol" type="java.lang.Byte" 
db-attribute-path="TINYINT_COL"/>
-       </obj-entity>
-       <obj-entity name="UuidTestEntity" 
className="org.apache.cayenne.testdo.uuid.UuidTestEntity" 
dbEntityName="UUID_TEST">
-               <obj-attribute name="uuid" type="java.util.UUID" 
db-attribute-path="UUID"/>
-       </obj-entity>
-       <db-relationship name="artistGroupArray" source="ARTGROUP" 
target="ARTIST_GROUP" toMany="true">
-               <db-attribute-pair source="GROUP_ID" target="GROUP_ID"/>
-       </db-relationship>
-       <db-relationship name="toChildGroups" source="ARTGROUP" 
target="ARTGROUP" toMany="true">
-               <db-attribute-pair source="GROUP_ID" target="PARENT_GROUP_ID"/>
-       </db-relationship>
-       <db-relationship name="toParentGroup" source="ARTGROUP" 
target="ARTGROUP" toMany="false">
-               <db-attribute-pair source="PARENT_GROUP_ID" target="GROUP_ID"/>
-       </db-relationship>
-       <db-relationship name="artistExhibitArray" source="ARTIST" 
target="ARTIST_EXHIBIT" toDependentPK="true" toMany="true">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="artistGroupArray" source="ARTIST" 
target="ARTIST_GROUP" toMany="true">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="paintingArray" source="ARTIST" target="PAINTING" 
toMany="true">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="toArtist" source="ARTIST_EXHIBIT" 
target="ARTIST" toMany="false">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="toExhibit" source="ARTIST_EXHIBIT" 
target="EXHIBIT" toMany="false">
-               <db-attribute-pair source="EXHIBIT_ID" target="EXHIBIT_ID"/>
-       </db-relationship>
-       <db-relationship name="toArtist" source="ARTIST_GROUP" target="ARTIST" 
toMany="false">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="toGroup" source="ARTIST_GROUP" target="ARTGROUP" 
toMany="false">
-               <db-attribute-pair source="GROUP_ID" target="GROUP_ID"/>
-       </db-relationship>
-       <db-relationship name="binaryPKDetails" source="BINARY_PK_TEST1" 
target="BINARY_PK_TEST2" toMany="true">
-               <db-attribute-pair source="BIN_ID" target="FK_ID"/>
-       </db-relationship>
-       <db-relationship name="toBinaryPKMaster" source="BINARY_PK_TEST2" 
target="BINARY_PK_TEST1" toMany="false">
-               <db-attribute-pair source="FK_ID" target="BIN_ID"/>
-       </db-relationship>
-       <db-relationship name="toCharPK" source="CHAR_FK_TEST" 
target="CHAR_PK_TEST" toMany="false">
-               <db-attribute-pair source="FK_COL" target="PK_COL"/>
-       </db-relationship>
-       <db-relationship name="charFKs" source="CHAR_PK_TEST" 
target="CHAR_FK_TEST" toMany="true">
-               <db-attribute-pair source="PK_COL" target="FK_COL"/>
-       </db-relationship>
-       <db-relationship name="clob" source="CLOB_TEST" 
target="CLOB_TEST_RELATION" toMany="true">
-               <db-attribute-pair source="CLOB_TEST_ID" target="ID_CLOB"/>
-       </db-relationship>
-       <db-relationship name="CLOB_REL" source="CLOB_TEST_RELATION" 
target="CLOB_TEST" toMany="false">
-               <db-attribute-pair source="ID_CLOB" target="CLOB_TEST_ID"/>
-       </db-relationship>
-       <db-relationship name="toCompoundPk" source="COMPOUND_FK_TEST" 
target="COMPOUND_PK_TEST" toMany="false">
-               <db-attribute-pair source="F_KEY1" target="KEY1"/>
-               <db-attribute-pair source="F_KEY2" target="KEY2"/>
-       </db-relationship>
-       <db-relationship name="compoundFkArray" source="COMPOUND_PK_TEST" 
target="COMPOUND_FK_TEST" toMany="true">
-               <db-attribute-pair source="KEY1" target="F_KEY1"/>
-               <db-attribute-pair source="KEY2" target="F_KEY2"/>
-       </db-relationship>
-       <db-relationship name="artistExhibitArray" source="EXHIBIT" 
target="ARTIST_EXHIBIT" toDependentPK="true" toMany="true">
-               <db-attribute-pair source="EXHIBIT_ID" target="EXHIBIT_ID"/>
-       </db-relationship>
-       <db-relationship name="toGallery" source="EXHIBIT" target="GALLERY" 
toMany="false">
-               <db-attribute-pair source="GALLERY_ID" target="GALLERY_ID"/>
-       </db-relationship>
-       <db-relationship name="exhibitArray" source="GALLERY" target="EXHIBIT" 
toMany="true">
-               <db-attribute-pair source="GALLERY_ID" target="GALLERY_ID"/>
-       </db-relationship>
-       <db-relationship name="paintingArray" source="GALLERY" 
target="PAINTING" toMany="true">
-               <db-attribute-pair source="GALLERY_ID" target="GALLERY_ID"/>
-       </db-relationship>
-       <db-relationship name="toMaster" source="GENERATED_COLUMN_COMP_KEY" 
target="GENERATED_COLUMN_COMP_M" toMany="false">
-               <db-attribute-pair source="PROPAGATED_PK" target="ID"/>
-       </db-relationship>
-       <db-relationship name="toDetail" source="GENERATED_COLUMN_COMP_M" 
target="GENERATED_COLUMN_COMP_KEY" toDependentPK="true" toMany="true">
-               <db-attribute-pair source="ID" target="PROPAGATED_PK"/>
-       </db-relationship>
-       <db-relationship name="toMaster" source="GENERATED_COLUMN_DEP" 
target="GENERATED_COLUMN_TEST" toMany="false">
-               <db-attribute-pair source="GENERATED_COLUMN_FK" 
target="GENERATED_COLUMN"/>
-       </db-relationship>
-       <db-relationship name="toDep" source="GENERATED_COLUMN_TEST" 
target="GENERATED_COLUMN_DEP" toDependentPK="true" toMany="false">
-               <db-attribute-pair source="GENERATED_COLUMN" 
target="GENERATED_COLUMN_FK"/>
-       </db-relationship>
-       <db-relationship name="join" source="GENERATED_F1" 
target="GENERATED_JOIN" toMany="true">
-               <db-attribute-pair source="ID" target="ID1"/>
-       </db-relationship>
-       <db-relationship name="join" source="GENERATED_F2" 
target="GENERATED_JOIN" toMany="true">
-               <db-attribute-pair source="ID" target="ID2"/>
-       </db-relationship>
-       <db-relationship name="f1" source="GENERATED_JOIN" 
target="GENERATED_F1" toMany="false">
-               <db-attribute-pair source="ID1" target="ID"/>
-       </db-relationship>
-       <db-relationship name="f2" source="GENERATED_JOIN" 
target="GENERATED_F2" toMany="false">
-               <db-attribute-pair source="ID2" target="ID"/>
-       </db-relationship>
-       <db-relationship name="toMeaningfulPK" source="MEANINGFUL_PK_DEP" 
target="MEANINGFUL_PK_TEST1" toMany="false">
-               <db-attribute-pair source="MASTER_PK" target="PK_ATTRIBUTE"/>
-       </db-relationship>
-       <db-relationship name="meaningfulPKDepArray" 
source="MEANINGFUL_PK_TEST1" target="MEANINGFUL_PK_DEP" toMany="true">
-               <db-attribute-pair source="PK_ATTRIBUTE" target="MASTER_PK"/>
-       </db-relationship>
-       <db-relationship name="details" source="MIXED_PERSISTENCE_STRATEGY" 
target="MIXED_PERSISTENCE_STRATEGY2" toMany="true">
-               <db-attribute-pair source="ID" target="MASTER_ID"/>
-       </db-relationship>
-       <db-relationship name="master" source="MIXED_PERSISTENCE_STRATEGY2" 
target="MIXED_PERSISTENCE_STRATEGY" toMany="false">
-               <db-attribute-pair source="MASTER_ID" target="ID"/>
-       </db-relationship>
-       <db-relationship name="toArtist" source="PAINTING" target="ARTIST" 
toMany="false">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="toGallery" source="PAINTING" target="GALLERY" 
toMany="false">
-               <db-attribute-pair source="GALLERY_ID" target="GALLERY_ID"/>
-       </db-relationship>
-       <db-relationship name="toPaintingInfo" source="PAINTING" 
target="PAINTING_INFO" toDependentPK="true" toMany="false">
-               <db-attribute-pair source="PAINTING_ID" target="PAINTING_ID"/>
-       </db-relationship>
-       <db-relationship name="toArtist" source="PAINTING1" target="ARTIST" 
toMany="false">
-               <db-attribute-pair source="ARTIST_ID" target="ARTIST_ID"/>
-       </db-relationship>
-       <db-relationship name="painting" source="PAINTING_INFO" 
target="PAINTING" toMany="false">
-               <db-attribute-pair source="PAINTING_ID" target="PAINTING_ID"/>
-       </db-relationship>
-       <obj-relationship name="artistArray" source="ArtGroup" target="Artist" 
deleteRule="Nullify" db-relationship-path="artistGroupArray.toArtist"/>
-       <obj-relationship name="childGroupsArray" source="ArtGroup" 
target="ArtGroup" deleteRule="Nullify" db-relationship-path="toChildGroups"/>
-       <obj-relationship name="toParentGroup" source="ArtGroup" 
target="ArtGroup" deleteRule="Nullify" db-relationship-path="toParentGroup"/>
-       <obj-relationship name="artistExhibitArray" source="Artist" 
target="ArtistExhibit" deleteRule="Cascade" 
db-relationship-path="artistExhibitArray"/>
-       <obj-relationship name="groupArray" source="Artist" target="ArtGroup" 
deleteRule="Cascade" db-relationship-path="artistGroupArray.toGroup"/>
-       <obj-relationship name="paintingArray" source="Artist" 
target="Painting" deleteRule="Cascade" db-relationship-path="paintingArray"/>
-       <obj-relationship name="toArtist" source="ArtistExhibit" 
target="Artist" deleteRule="Nullify" db-relationship-path="toArtist"/>
-       <obj-relationship name="toExhibit" source="ArtistExhibit" 
target="Exhibit" deleteRule="Nullify" db-relationship-path="toExhibit"/>
-       <obj-relationship name="binaryPKDetails" source="BinaryPKTest1" 
target="BinaryPKTest2" db-relationship-path="binaryPKDetails"/>
-       <obj-relationship name="toBinaryPKMaster" source="BinaryPKTest2" 
target="BinaryPKTest1" db-relationship-path="toBinaryPKMaster"/>
-       <obj-relationship name="toCharPK" source="CharFkTestEntity" 
target="CharPkTestEntity" db-relationship-path="toCharPK"/>
-       <obj-relationship name="charFKs" source="CharPkTestEntity" 
target="CharFkTestEntity" db-relationship-path="charFKs"/>
-       <obj-relationship name="clobValue" source="ClobTestEntity" 
target="ClobTestRelation" db-relationship-path="clob"/>
-       <obj-relationship name="clobId" source="ClobTestRelation" 
target="ClobTestEntity" db-relationship-path="CLOB_REL"/>
-       <obj-relationship name="toCompoundPk" source="CompoundFkTestEntity" 
target="CompoundPkTestEntity" db-relationship-path="toCompoundPk"/>
-       <obj-relationship name="toArtist" source="CompoundPainting" 
target="Artist" deleteRule="Nullify" db-relationship-path="toArtist"/>
-       <obj-relationship name="toGallery" source="CompoundPainting" 
target="Gallery" deleteRule="Nullify" db-relationship-path="toGallery"/>
-       <obj-relationship name="toPaintingInfo" source="CompoundPainting" 
target="PaintingInfo" deleteRule="Cascade" 
db-relationship-path="toPaintingInfo"/>
-       <obj-relationship name="compoundFkArray" source="CompoundPkTestEntity" 
target="CompoundFkTestEntity" db-relationship-path="compoundFkArray"/>
-       <obj-relationship name="artistExhibitArray" source="Exhibit" 
target="ArtistExhibit" deleteRule="Cascade" 
db-relationship-path="artistExhibitArray"/>
-       <obj-relationship name="toGallery" source="Exhibit" target="Gallery" 
deleteRule="Nullify" db-relationship-path="toGallery"/>
-       <obj-relationship name="exhibitArray" source="Gallery" target="Exhibit" 
deleteRule="Cascade" db-relationship-path="exhibitArray"/>
-       <obj-relationship name="paintingArray" source="Gallery" 
target="Painting" deleteRule="Deny" db-relationship-path="paintingArray"/>
-       <obj-relationship name="toMaster" source="GeneratedColumnCompKey" 
target="GeneratedColumnCompMaster" db-relationship-path="toMaster"/>
-       <obj-relationship name="toDetail" source="GeneratedColumnCompMaster" 
target="GeneratedColumnCompKey" db-relationship-path="toDetail"/>
-       <obj-relationship name="toMaster" source="GeneratedColumnDep" 
target="GeneratedColumnTestEntity" db-relationship-path="toMaster"/>
-       <obj-relationship name="toDep" source="GeneratedColumnTestEntity" 
target="GeneratedColumnDep" db-relationship-path="toDep"/>
-       <obj-relationship name="f2" source="GeneratedF1" target="GeneratedF2" 
deleteRule="Nullify" db-relationship-path="join.f2"/>
-       <obj-relationship name="f1" source="GeneratedF2" target="GeneratedF1" 
deleteRule="Nullify" db-relationship-path="join.f1"/>
-       <obj-relationship name="toMeaningfulPK" source="MeaningfulPKDep" 
target="MeaningfulPKTest1" db-relationship-path="toMeaningfulPK"/>
-       <obj-relationship name="meaningfulPKDepArray" 
source="MeaningfulPKTest1" target="MeaningfulPKDep" 
db-relationship-path="meaningfulPKDepArray"/>
-       <obj-relationship name="details" source="MixedPersistenceStrategy" 
target="MixedPersistenceStrategy2" db-relationship-path="details"/>
-       <obj-relationship name="master" source="MixedPersistenceStrategy2" 
target="MixedPersistenceStrategy" db-relationship-path="master"/>
-       <obj-relationship name="toArtist" source="Painting" target="Artist" 
deleteRule="Nullify" db-relationship-path="toArtist"/>
-       <obj-relationship name="toGallery" source="Painting" target="Gallery" 
deleteRule="Nullify" db-relationship-path="toGallery"/>
-       <obj-relationship name="toPaintingInfo" source="Painting" 
target="PaintingInfo" deleteRule="Cascade" 
db-relationship-path="toPaintingInfo"/>
-       <obj-relationship name="toArtist" source="Painting1" target="Artist" 
deleteRule="Nullify" db-relationship-path="toArtist"/>
-       <obj-relationship name="painting" source="PaintingInfo" 
target="Painting" deleteRule="Nullify" db-relationship-path="painting"/>
-       <obj-relationship name="paintingArray" source="ROArtist" 
target="Painting" deleteRule="Deny" db-relationship-path="paintingArray"/>
-       <obj-relationship name="toArtist" source="ROPainting" target="Artist" 
deleteRule="Nullify" db-relationship-path="toArtist"/>
-       <query name="EjbqlQueryTest" type="EJBQLQuery">
-               <property name="cayenne.GenericSelectQuery.fetchingDataRows" 
value="true"/>
-               <property name="cayenne.GenericSelectQuery.cacheStrategy" 
value="SHARED_CACHE"/>
-               <ejbql><![CDATA[select a from Artist a]]></ejbql>
-       </query>
-       <query name="NonSelectingQuery" type="SQLTemplate" root="data-map" 
root-name="testmap">
-               <property name="cayenne.SQLTemplate.columnNameCapitalization" 
value="UPPER"/>
-               <sql><![CDATA[INSERT INTO PAINTING (PAINTING_ID, 
PAINTING_TITLE, ESTIMATED_PRICE)
-VALUES (512, 'No Painting Like This', 12.5)]]></sql>
-               <sql 
adapter-class="org.apache.cayenne.dba.db2.DB2Adapter"><![CDATA[INSERT INTO 
PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE) VALUES (512, 'No 
Painting Like This', 12.5)]]></sql>
-       </query>
-       <query name="ObjectQuery" type="SelectQuery" root="obj-entity" 
root-name="Painting">
-               <qualifier><![CDATA[toArtist = $artist]]></qualifier>
-               <ordering><![CDATA[paintingTitle]]></ordering>
-       </query>
-       <query name="ParameterizedNonSelectingQuery" type="SQLTemplate" 
root="data-map" root-name="testmap">
-               <sql><![CDATA[INSERT INTO PAINTING (PAINTING_ID, 
PAINTING_TITLE, ESTIMATED_PRICE)
-VALUES (#bind($id), #bind($title), #bind($price))]]></sql>
-               <sql 
adapter-class="org.apache.cayenne.dba.db2.DB2Adapter"><![CDATA[INSERT INTO 
PAINTING (PAINTING_ID, PAINTING_TITLE, ESTIMATED_PRICE) values (#bind($id), 
#bind($title), #bind($price))]]></sql>
-       </query>
-       <query name="ParameterizedQueryWithLocalCache" type="SelectQuery" 
root="obj-entity" root-name="Artist">
-               <property name="cayenne.GenericSelectQuery.cacheStrategy" 
value="LOCAL_CACHE"/>
-               <qualifier><![CDATA[artistName like $name]]></qualifier>
-       </query>
-       <query name="ParameterizedQueryWithSharedCache" type="SelectQuery" 
root="obj-entity" root-name="Artist">
-               <property name="cayenne.GenericSelectQuery.cacheStrategy" 
value="SHARED_CACHE"/>
-               <qualifier><![CDATA[artistName like $name]]></qualifier>
-       </query>
-       <query name="ProcedureQuery" type="ProcedureQuery" root="procedure" 
root-name="cayenne_tst_select_proc" result-entity="Artist">
-       </query>
-       <query name="QueryWithLocalCache" type="SelectQuery" root="obj-entity" 
root-name="Artist">
-               <property name="cayenne.GenericSelectQuery.cacheStrategy" 
value="LOCAL_CACHE"/>
-       </query>
-       <query name="QueryWithOrdering" type="SelectQuery" root="obj-entity" 
root-name="Artist">
-               <ordering descending="true" 
ignore-case="true"><![CDATA[artistName]]></ordering>
-               <ordering><![CDATA[dateOfBirth]]></ordering>
-       </query>
-       <query name="QueryWithPrefetch" type="SelectQuery" root="obj-entity" 
root-name="Gallery">
-               <prefetch>paintingArray</prefetch>
-       </query>
-       <query name="QueryWithQualifier" type="SelectQuery" root="obj-entity" 
root-name="Artist">
-               <qualifier><![CDATA[artistName = $param1]]></qualifier>
-       </query>
-       <query name="QueryWithSharedCache" type="SelectQuery" root="obj-entity" 
root-name="Artist">
-               <property name="cayenne.GenericSelectQuery.cacheStrategy" 
value="SHARED_CACHE"/>
-       </query>
-       <query name="SelectDateTest" type="SQLTemplate" root="data-map" 
root-name="testmap">
-               <property name="cayenne.GenericSelectQuery.fetchingDataRows" 
value="true"/>
-               <property name="cayenne.SQLTemplate.columnNameCapitalization" 
value="UPPER"/>
-               <sql><![CDATA[SELECT * FROM DATE_TEST]]></sql>
-       </query>
-       <query name="SelectReturnTypesMap1" type="SQLTemplate" root="data-map" 
root-name="testmap">
-               <property name="cayenne.GenericSelectQuery.fetchingDataRows" 
value="true"/>
-               <property name="cayenne.SQLTemplate.columnNameCapitalization" 
value="UPPER"/>
-               <sql><![CDATA[SELECT * FROM TYPES_MAPPING_TEST1]]></sql>
-       </query>
-       <query name="SelectReturnTypesMap2" type="SQLTemplate" root="data-map" 
root-name="testmap">
-               <property name="cayenne.GenericSelectQuery.fetchingDataRows" 
value="true"/>
-               <property name="cayenne.SQLTemplate.columnNameCapitalization" 
value="UPPER"/>
-               <sql><![CDATA[SELECT * FROM TYPES_MAPPING_TEST2]]></sql>
-       </query>
-       <query name="SelectTestLower" type="SQLTemplate" root="data-map" 
root-name="testmap">
-               <property name="cayenne.GenericSelectQuery.fetchingDataRows" 
value="true"/>
-               <property name="cayenne.SQLTemplate.columnNameCapitalization" 
value="LOWER"/>
-               <sql><![CDATA[select * from ARTIST]]></sql>
-       </query>
-       <query name="SelectTestUpper" type="SQLTemplate" root="data-map" 
root-name="testmap">
-               <property name="cayenne.GenericSelectQuery.fetchingDataRows" 
value="true"/>
-               <property name="cayenne.SQLTemplate.columnNameCapitalization" 
value="UPPER"/>
-               <sql><![CDATA[select * from ARTIST]]></sql>
-       </query>
-</data-map>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/itests/pom.xml
----------------------------------------------------------------------
diff --git a/itests/pom.xml b/itests/pom.xml
deleted file mode 100644
index eea0029..0000000
--- a/itests/pom.xml
+++ /dev/null
@@ -1,57 +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.   
--->
-
-<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/maven-v4_0_0.xsd";>
-    
-    <modelVersion>4.0.0</modelVersion>
-
-    <parent>
-      <groupId>org.apache.cayenne</groupId>
-      <artifactId>cayenne-parent</artifactId>
-      <version>4.1.M2-SNAPSHOT</version>
-    </parent>
-
-    <groupId>org.apache.cayenne.itests</groupId>
-    <artifactId>cayenne-itests-parent</artifactId>
-    <name>cayenne-itests-parent: Integration Tests Parent</name>
-    <packaging>pom</packaging>
-    
-    <modules>
-         <module>cayenne-tools-itest</module>
-    </modules>
-       <build>
-               <plugins>
-                       <plugin>
-                               <groupId>org.apache.maven.plugins</groupId>
-                               <artifactId>maven-deploy-plugin</artifactId>
-                               <configuration>
-                                       <skip>true</skip>
-                               </configuration>
-                       </plugin>
-                       <!-- This ensures LICENSE and NOTICE inclusion in all 
jars -->
-            <plugin>
-                <artifactId>maven-remote-resources-plugin</artifactId>
-                <configuration>
-                       <skip>true</skip>
-                </configuration>
-            </plugin>
-               </plugins>
-       </build>
-</project>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/pom.xml
----------------------------------------------------------------------
diff --git a/maven-plugins/cayenne-tools-itest/pom.xml 
b/maven-plugins/cayenne-tools-itest/pom.xml
new file mode 100644
index 0000000..f173358
--- /dev/null
+++ b/maven-plugins/cayenne-tools-itest/pom.xml
@@ -0,0 +1,178 @@
+<?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/maven-v4_0_0.xsd";>
+
+       <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>cayenne-maven-plugins-parent</artifactId>
+        <groupId>org.apache.cayenne.plugins</groupId>
+        <version>4.1.M2-SNAPSHOT</version>
+    </parent>
+
+       <description>Integration Tests - Cayenne Tools</description>
+       <artifactId>cayenne-tools-itest</artifactId>
+       <name>cayenne-tools-itest: Tools integration tests</name>
+       <packaging>jar</packaging>
+       
+       <properties>
+               
<testResourceDir>${project.build.testSourceDirectory}/../resources</testResourceDir>
+               
<generatedClassesDir>${project.build.directory}/generated-tests</generatedClassesDir>
+       </properties>
+
+       <dependencies>
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>compile</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.cayenne.build-tools</groupId>
+                       <artifactId>cayenne-test-utilities</artifactId>
+                       <version>${project.version}</version>
+                       <scope>compile</scope>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.cayenne</groupId>
+                       <artifactId>cayenne-di</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.apache.cayenne</groupId>
+                       <artifactId>cayenne-server</artifactId>
+                       <version>${project.version}</version>
+               </dependency>
+
+       </dependencies>
+
+       <build>
+               <plugins>
+                       
+                       <plugin>
+                               <groupId>org.apache.cayenne.plugins</groupId>
+                               <artifactId>cayenne-maven-plugin</artifactId>
+                               <version>${project.version}</version>
+                               <executions>
+                                   <execution>
+                                       <id>single-classes-cust-template</id>
+                                       <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                               <configuration>
+                                 <map>${testResourceDir}/testmap.map.xml</map>
+                                 
<destDir>${generatedClassesDir}/single-classes-cust-template</destDir>
+                                 <makePairs>false</makePairs>
+                                 <usePkgPath>true</usePkgPath>
+                                 
<template>${testResourceDir}/org/apache/cayenne/tools/velotemplate.vm</template>
+                               </configuration>
+                                   </execution>
+                                   <execution>
+                        <id>single-classes1</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/testmap.map.xml</map>
+                          
<destDir>${generatedClassesDir}/single-classes1</destDir>
+                          <makePairs>false</makePairs>
+                          <usePkgPath>true</usePkgPath>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>single-classes2</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/testmap.map.xml</map>
+                          
<destDir>${generatedClassesDir}/single-classes2</destDir>
+                          <makePairs>false</makePairs>
+                          <usePkgPath>false</usePkgPath>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>pairs1</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/testmap.map.xml</map>
+                          <destDir>${generatedClassesDir}/pairs1</destDir>
+                          <makePairs>true</makePairs>
+                          <usePkgPath>true</usePkgPath>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>pairs2</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/testmap.map.xml</map>
+                          <destDir>${generatedClassesDir}/pairs2</destDir>
+                          <makePairs>true</makePairs>
+                          <usePkgPath>false</usePkgPath>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>pairs3</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/testmap.map.xml</map>
+                          <destDir>${generatedClassesDir}/pairs3</destDir>
+                          <makePairs>true</makePairs>
+                          <usePkgPath>true</usePkgPath>
+                          
<superPkg>org.apache.cayenne.testdo.testmap.superart</superPkg>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>pairs1-client</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/testmap-client.map.xml</map>
+                          
<destDir>${generatedClassesDir}/pairs1-client</destDir>
+                          <client>true</client>
+                          <makePairs>true</makePairs>
+                          <usePkgPath>true</usePkgPath>
+                          
<superPkg>org.apache.cayenne.testdo.testmap.client.superart</superPkg>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>pairs-embeddables3</id>
+                        <goals>
+                            <goal>cgen</goal>
+                        </goals>
+                        <configuration>
+                          <map>${testResourceDir}/embeddable.map.xml</map>
+                          
<destDir>${generatedClassesDir}/pairs-embeddables3</destDir>
+                          <makePairs>true</makePairs>
+                          <usePkgPath>true</usePkgPath>
+                          
<superPkg>org.apache.cayenne.testdo.embeddable.auto</superPkg>
+                        </configuration>
+                    </execution>
+                               </executions>
+            </plugin>
+               </plugins>
+       </build>
+</project>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/src/test/java/org/apache/cayenne/tools/CayenneGeneratorIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/maven-plugins/cayenne-tools-itest/src/test/java/org/apache/cayenne/tools/CayenneGeneratorIntegrationTest.java
 
b/maven-plugins/cayenne-tools-itest/src/test/java/org/apache/cayenne/tools/CayenneGeneratorIntegrationTest.java
new file mode 100644
index 0000000..2142389
--- /dev/null
+++ 
b/maven-plugins/cayenne-tools-itest/src/test/java/org/apache/cayenne/tools/CayenneGeneratorIntegrationTest.java
@@ -0,0 +1,186 @@
+/*****************************************************************
+ *   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.tools;
+
+import org.junit.Test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class CayenneGeneratorIntegrationTest {
+
+    private File testDir;
+
+    private void startTest(String testName) {
+        testDir = new File("target/generated-tests", testName);
+        assertTrue(testDir.isDirectory());
+    }
+
+    /**
+     * Test single classes with a non-standard template.
+     */
+    @Test
+    public void testSingleClassesCustTemplate() throws Exception {
+        startTest("single-classes-cust-template");
+
+        assertContents("org/apache/cayenne/testdo/testmap/Artist.java", 
"Artist", "org.apache.cayenne.testdo.testmap",
+                "CayenneDataObject");
+        assertExists("org/apache/cayenne/testdo/testmap/_Artist.java");
+    }
+
+    /** Test single classes generation including full package path. */
+    @Test
+    public void testSingleClasses1() throws Exception {
+        startTest("single-classes1");
+
+        assertContents("org/apache/cayenne/testdo/testmap/Artist.java", 
"Artist", "org.apache.cayenne.testdo.testmap",
+                "BaseDataObject");
+        assertExists("org/apache/cayenne/testdo/testmap/_Artist.java");
+    }
+
+    /** Test single classes generation ignoring package path. */
+    @Test
+    public void testSingleClasses2() throws Exception {
+        startTest("single-classes2");
+
+        assertContents("Artist.java", "Artist", 
"org.apache.cayenne.testdo.testmap", "BaseDataObject");
+        assertExists("_Artist.java");
+        assertExists("org/apache/cayenne/testdo/testmap/Artist.java");
+    }
+
+    /** Test pairs generation including full package path. */
+    @Test
+    public void testPairs1() throws Exception {
+        startTest("pairs1");
+
+        assertContents("org/apache/cayenne/testdo/testmap/Artist.java", 
"Artist", "org.apache.cayenne.testdo.testmap",
+                "_Artist");
+        assertContents("org/apache/cayenne/testdo/testmap/auto/_Artist.java", 
"_Artist",
+                "org.apache.cayenne.testdo.testmap.auto", "BaseDataObject");
+    }
+
+    /** Test pairs generation in the same directory. */
+    @Test
+    public void testPairs2() throws Exception {
+        startTest("pairs2");
+
+        assertContents("Artist.java", "Artist", 
"org.apache.cayenne.testdo.testmap", "_Artist");
+        assertContents("_Artist.java", "_Artist", 
"org.apache.cayenne.testdo.testmap", "BaseDataObject");
+        assertExists("org/apache/cayenne/testdo/testmap/Artist.java");
+    }
+
+    /**
+     * Test pairs generation including full package path with superclass and
+     * subclass in different packages.
+     */
+    @Test
+    public void testPairs3() throws Exception {
+        startTest("pairs3");
+
+        assertContents("org/apache/cayenne/testdo/testmap/Artist.java", 
"Artist", "org.apache.cayenne.testdo.testmap",
+                "_Artist");
+        
assertContents("org/apache/cayenne/testdo/testmap/superart/_Artist.java", 
"_Artist",
+                "org.apache.cayenne.testdo.testmap.superart", 
"BaseDataObject");
+    }
+
+    @Test
+    public void testPairs1_client() throws Exception {
+        startTest("pairs1-client");
+
+        assertContents("org/apache/cayenne/testdo/testmap/client/Artist.java", 
"Artist", "org.apache.cayenne.testdo.testmap.client",
+                "_Artist");
+        
assertContents("org/apache/cayenne/testdo/testmap/client/superart/_Artist.java",
 "_Artist",
+                "org.apache.cayenne.testdo.testmap.client.superart", 
"PersistentObject");
+    }
+
+    @Test
+    public void testPairsEmbeddable3() throws Exception {
+        startTest("pairs-embeddables3");
+
+        
assertContents("org/apache/cayenne/testdo/embeddable/EmbedEntity1.java", 
"EmbedEntity1",
+                "org.apache.cayenne.testdo.embeddable", "_EmbedEntity1");
+        
assertContents("org/apache/cayenne/testdo/embeddable/auto/_EmbedEntity1.java", 
"_EmbedEntity1",
+                "org.apache.cayenne.testdo.embeddable.auto", "BaseDataObject");
+        
assertContents("org/apache/cayenne/testdo/embeddable/Embeddable1.java", 
"Embeddable1",
+                "org.apache.cayenne.testdo.embeddable", "_Embeddable1");
+        
assertContents("org/apache/cayenne/testdo/embeddable/auto/_Embeddable1.java", 
"_Embeddable1",
+                "org.apache.cayenne.testdo.embeddable.auto", "Object");
+    }
+
+    private String convertPath(String unixPath) {
+        return unixPath.replace('/', File.separatorChar);
+    }
+
+    private void assertContents(String filePath, String className, String 
packageName, String extendsName)
+            throws Exception {
+        File f = new File(testDir, convertPath(filePath));
+        assertTrue("Not a file: " + f.getAbsolutePath(), f.isFile());
+        assertContents(f, className, packageName, extendsName);
+    }
+
+    private void assertExists(String filePath) {
+        File f = new File(testDir, convertPath(filePath));
+        assertFalse(f.exists());
+    }
+
+    private void assertContents(File f, String className, String packageName, 
String extendsName) throws Exception {
+        
+        try(BufferedReader in = new BufferedReader(new InputStreamReader(new 
FileInputStream(f)))) {
+            assertPackage(in, packageName);
+            assertClass(in, className, extendsName);
+        } 
+    }
+
+    private void assertPackage(BufferedReader in, String packageName) throws 
Exception {
+
+        String s = null;
+        while ((s = in.readLine()) != null) {
+            if (Pattern.matches("^package\\s+([^\\s;]+);", s)) {
+                assertTrue(s.indexOf(packageName) > 0);
+                return;
+            }
+        }
+
+        fail("No package declaration found.");
+    }
+
+    private void assertClass(BufferedReader in, String className, String 
extendsName) throws Exception {
+
+        Pattern classPattern = Pattern.compile("^public\\s+");
+
+        String s = null;
+        while ((s = in.readLine()) != null) {
+            if (classPattern.matcher(s).find()) {
+                assertTrue(s.indexOf(className) > 0);
+                assertTrue(s.indexOf(extendsName) > 0);
+                assertTrue(s.indexOf(className) < s.indexOf(extendsName));
+                return;
+            }
+        }
+
+        fail("No class declaration found.");
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/src/test/resources/cayenne-client.xml
----------------------------------------------------------------------
diff --git 
a/maven-plugins/cayenne-tools-itest/src/test/resources/cayenne-client.xml 
b/maven-plugins/cayenne-tools-itest/src/test/resources/cayenne-client.xml
new file mode 100644
index 0000000..355ac28
--- /dev/null
+++ b/maven-plugins/cayenne-tools-itest/src/test/resources/cayenne-client.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain xmlns="http://cayenne.apache.org/schema/10/domain";
+        project-version="10">
+       <map name="testmap-client"/>
+</domain>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/src/test/resources/embeddable.map.xml
----------------------------------------------------------------------
diff --git 
a/maven-plugins/cayenne-tools-itest/src/test/resources/embeddable.map.xml 
b/maven-plugins/cayenne-tools-itest/src/test/resources/embeddable.map.xml
new file mode 100644
index 0000000..10c4db6
--- /dev/null
+++ b/maven-plugins/cayenne-tools-itest/src/test/resources/embeddable.map.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/10/modelMap";
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+        xsi:schemaLocation="http://cayenne.apache.org/schema/10/modelMap 
http://cayenne.apache.org/schema/10/modelMap.xsd";
+        project-version="10">
+       <property name="defaultPackage" 
value="org.apache.cayenne.testdo.embeddable"/>
+       <embeddable 
className="org.apache.cayenne.testdo.embeddable.Embeddable1">
+               <embeddable-attribute name="embedded10" type="java.lang.String" 
db-attribute-name="EMBEDDED10"/>
+               <embeddable-attribute name="embedded20" type="java.lang.String" 
db-attribute-name="EMBEDDED20"/>
+       </embeddable>
+       <db-entity name="EMBED_ENTITY1">
+               <db-attribute name="EMBEDDED10" type="VARCHAR" length="100"/>
+               <db-attribute name="EMBEDDED20" type="VARCHAR" length="100"/>
+               <db-attribute name="EMBEDDED30" type="VARCHAR" length="100"/>
+               <db-attribute name="EMBEDDED40" type="VARCHAR" length="100"/>
+               <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+               <db-attribute name="NAME" type="VARCHAR" length="100"/>
+       </db-entity>
+       <obj-entity name="EmbedEntity1" 
className="org.apache.cayenne.testdo.embeddable.EmbedEntity1" 
dbEntityName="EMBED_ENTITY1">
+               <embedded-attribute name="embedded1" 
type="org.apache.cayenne.testdo.embeddable.Embeddable1"/>
+               <embedded-attribute name="embedded2" 
type="org.apache.cayenne.testdo.embeddable.Embeddable1">
+                       <embeddable-attribute-override name="embedded10" 
db-attribute-path="EMBEDDED30"/>
+                       <embeddable-attribute-override name="embedded20" 
db-attribute-path="EMBEDDED40"/>
+               </embedded-attribute>
+               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
+       </obj-entity>
+</data-map>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen-dependent.map.xml
----------------------------------------------------------------------
diff --git 
a/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen-dependent.map.xml
 
b/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen-dependent.map.xml
new file mode 100644
index 0000000..b72f320
--- /dev/null
+++ 
b/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen-dependent.map.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap 
http://cayenne.apache.org/schema/9/modelMap.xsd";
+       project-version="1.1">
+       <property name="defaultPackage" 
value="org.apache.cayenne.testdo.cgen2"/>
+       <db-entity name="MYARTGROUP">
+               <db-attribute name="MY_GROUP_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
+               <db-attribute name="CUSTOM" type="VARCHAR" isMandatory="true" 
length="100"/>
+               <db-attribute name="MY_PARENT_GROUP_ID" type="INTEGER"/>
+       </db-entity>
+       <obj-entity name="MyArtGroup" 
className="org.apache.cayenne.testdo.cgen2.MyArtGroup" 
dbEntityName="MYARTGROUP">
+               <obj-attribute name="custom" type="java.lang.String" 
db-attribute-path="CUSTOM"/>
+       </obj-entity>
+       <db-relationship name="toParentArtGroup" source="MYARTGROUP" 
target="ARTGROUP" toMany="false">
+               <db-attribute-pair source="MY_PARENT_GROUP_ID" 
target="GROUP_ID"/>
+       </db-relationship>
+       <obj-relationship name="toParentGroup" source="MyArtGroup" 
target="ArtGroup" deleteRule="Nullify" db-relationship-path="toParentArtGroup"/>
+</data-map>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen.map.xml
----------------------------------------------------------------------
diff --git 
a/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen.map.xml
 
b/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen.map.xml
new file mode 100644
index 0000000..56a2d92
--- /dev/null
+++ 
b/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/cgen.map.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/9/modelMap";
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+        xsi:schemaLocation="http://cayenne.apache.org/schema/9/modelMap 
http://cayenne.apache.org/schema/9/modelMap.xsd";
+        project-version="9">
+
+       <db-entity name="ARTGROUP">
+               <db-attribute name="GROUP_ID" type="INTEGER" 
isPrimaryKey="true" isMandatory="true"/>
+               <db-attribute name="NAME" type="VARCHAR" isMandatory="true" 
length="100"/>
+               <db-attribute name="PARENT_GROUP_ID" type="INTEGER"/>
+       </db-entity>
+       <obj-entity name="ArtGroup" 
className="org.apache.cayenne.testdo.testmap.ArtGroup" dbEntityName="ARTGROUP">
+               <obj-attribute name="name" type="java.lang.String" 
db-attribute-path="NAME"/>
+       </obj-entity>
+</data-map>

http://git-wip-us.apache.org/repos/asf/cayenne/blob/6378c41f/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/velotemplate.vm
----------------------------------------------------------------------
diff --git 
a/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/velotemplate.vm
 
b/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/velotemplate.vm
new file mode 100644
index 0000000..1ca078c
--- /dev/null
+++ 
b/maven-plugins/cayenne-tools-itest/src/test/resources/org/apache/cayenne/tools/velotemplate.vm
@@ -0,0 +1,13 @@
+## Test Velocity template
+${importUtils.setPackage($subPackageName)}##
+${importUtils.generate()}
+
+import java.util.List;
+import org.apache.cayenne.*;
+
+/** Class ${classGen.superPrefix}${classGen.className} was generated by 
Cayenne.
+  * It is probably a good idea to avoid changing this class manually, 
+  * since it may be overwritten next time code is regenerated. 
+  * If you need to make any customizations, please use subclass. 
+  */
+public class ${subClassName} extends CayenneDataObject {

Reply via email to