Repository: cayenne
Updated Branches:
  refs/heads/CAY-1946_1 67ac9ec0e -> 571a1370a


http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/CayenneProjects.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/CayenneProjects.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/CayenneProjects.java
new file mode 100644
index 0000000..5daa3a7
--- /dev/null
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/CayenneProjects.java
@@ -0,0 +1,79 @@
+/*****************************************************************
+ *   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.unit.di.server;
+
+public class CayenneProjects {
+
+    // known runtimes... unit tests may reuse these with @UseServerRuntime
+    // annotation or
+    // can define their own on the fly (TODO: how would that work with the
+    // global schema
+    // setup?)
+    public static final String BINARY_PK_PROJECT = "cayenne-binary-pk.xml";
+    public static final String COMPOUND_PROJECT = "cayenne-compound.xml";
+    public static final String DATE_TIME_PROJECT = "cayenne-date-time.xml";
+    public static final String DELETE_RULES_PROJECT = 
"cayenne-delete-rules.xml";
+    public static final String EMBEDDABLE_PROJECT = "cayenne-embeddable.xml";
+    public static final String EMPTY_PROJECT = "cayenne-empty.xml";
+    public static final String ENUM_PROJECT = "cayenne-enum.xml";
+    public static final String EXTENDED_TYPE_PROJECT = 
"cayenne-extended-type.xml";
+    public static final String GENERATED_PROJECT = "cayenne-generated.xml";
+    public static final String GENERIC_PROJECT = "cayenne-generic.xml";
+    public static final String INHERITANCE_PROJECT = "cayenne-inheritance.xml";
+    public static final String INHERITANCE_SINGLE_TABLE1_PROJECT = 
"cayenne-inheritance-single-table1.xml";
+    public static final String INHERITANCE_VERTICAL_PROJECT = 
"cayenne-inheritance-vertical.xml";
+    public static final String LIFECYCLES_PROJECT = "cayenne-lifecycles.xml";
+    public static final String LOB_PROJECT = "cayenne-lob.xml";
+    public static final String LOCKING_PROJECT = "cayenne-locking.xml";
+    public static final String MAP_TO_MANY_PROJECT = "cayenne-map-to-many.xml";
+    public static final String MEANINGFUL_PK_PROJECT = 
"cayenne-meaningful-pk.xml";
+    public static final String MISC_TYPES_PROJECT = "cayenne-misc-types.xml";
+    public static final String MIXED_PERSISTENCE_STRATEGY_PROJECT = 
"cayenne-mixed-persistence-strategy.xml";
+    public static final String MULTI_TIER_PROJECT = "cayenne-multi-tier.xml";
+    public static final String MULTINODE_PROJECT = "cayenne-multinode.xml";
+    public static final String NO_PK_PROJECT = "cayenne-no-pk.xml";
+    public static final String NUMERIC_TYPES_PROJECT = 
"cayenne-numeric-types.xml";
+    public static final String ONEWAY_PROJECT = "cayenne-oneway-rels.xml";
+    public static final String PEOPLE_PROJECT = "cayenne-people.xml";
+    public static final String PERSISTENT_PROJECT = "cayenne-persistent.xml";
+    public static final String PRIMITIVE_PROJECT = "cayenne-primitive.xml";
+    public static final String QUALIFIED_PROJECT = "cayenne-qualified.xml";
+    public static final String QUOTED_IDENTIFIERS_PROJECT = 
"cayenne-quoted-identifiers.xml";
+    public static final String REFLEXIVE_PROJECT = "cayenne-reflexive.xml";
+    public static final String RELATIONSHIPS_PROJECT = 
"cayenne-relationships.xml";
+    public static final String RELATIONSHIPS_ACTIVITY_PROJECT = 
"cayenne-relationships-activity.xml";
+    public static final String RELATIONSHIPS_CHILD_MASTER_PROJECT = 
"cayenne-relationships-child-master.xml";
+    public static final String RELATIONSHIPS_CLOB_PROJECT = 
"cayenne-relationships-clob.xml";
+    public static final String RELATIONSHIPS_COLLECTION_TO_MANY_PROJECT = 
"cayenne-relationships-collection-to-many.xml";
+    public static final String RELATIONSHIPS_DELETE_RULES_PROJECT = 
"cayenne-relationships-delete-rules.xml";
+    public static final String RELATIONSHIPS_FLATTENED_PROJECT = 
"cayenne-relationships-flattened.xml";
+    public static final String RELATIONSHIPS_SET_TO_MANY_PROJECT = 
"cayenne-relationships-set-to-many.xml";
+    public static final String RELATIONSHIPS_TO_MANY_FK_PROJECT = 
"cayenne-relationships-to-many-fk.xml";
+    public static final String RELATIONSHIPS_TO_ONE_FK_PROJECT = 
"cayenne-relationships-to-one-fk.xml";
+    public static final String RETURN_TYPES_PROJECT = 
"cayenne-return-types.xml";
+    public static final String SOFT_DELETE_PROJECT = "cayenne-soft-delete.xml";
+    public static final String SUS_PROJECT = "cayenne-sus.xml";
+    public static final String TABLE_PRIMITIVES_PROJECT = 
"cayenne-table-primitives.xml";
+    public static final String TESTMAP_PROJECT = "cayenne-testmap.xml";
+    public static final String THINGS_PROJECT = "cayenne-things.xml";
+    public static final String TOONE_PROJECT = "cayenne-toone.xml";
+    public static final String UUID_PROJECT = "cayenne-uuid.xml";
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java
new file mode 100644
index 0000000..d44ac87
--- /dev/null
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleaner.java
@@ -0,0 +1,256 @@
+/*****************************************************************
+ *   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.unit.di.server;
+
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.unit.UnitDbAdapter;
+
+import java.sql.SQLException;
+
+public class DBCleaner {
+
+    private FlavoredDBHelper dbHelper;
+    private String location;
+
+    @Inject
+    private UnitDbAdapter accessStackAdapter;
+
+    public DBCleaner(FlavoredDBHelper dbHelper, String location) {
+        this.dbHelper = dbHelper;
+        this.location = location;
+    }
+
+    public void clean() throws SQLException {
+        if (location.equals(CayenneProjects.TESTMAP_PROJECT)) {
+            dbHelper.deleteAll("ARTGROUP");
+            dbHelper.deleteAll("ARTIST");
+            dbHelper.deleteAll("ARTIST_CT");
+            dbHelper.deleteAll("ARTIST_EXHIBIT");
+            dbHelper.deleteAll("ARTIST_GROUP");
+            dbHelper.deleteAll("EXHIBIT");
+            dbHelper.deleteAll("GALLERY");
+            dbHelper.deleteAll("GENERATED_COLUMN");
+            dbHelper.deleteAll("NULL_TEST");
+            dbHelper.deleteAll("PAINTING");
+            dbHelper.deleteAll("PAINTING1");
+            dbHelper.deleteAll("PAINTING_INFO");
+        } else if (location.equals(CayenneProjects.MULTI_TIER_PROJECT)) {
+            dbHelper.deleteAll("MT_JOIN45");
+            dbHelper.deleteAll("MT_TABLE1");
+            dbHelper.deleteAll("MT_TABLE2");
+            dbHelper.deleteAll("MT_TABLE3");
+            dbHelper.deleteAll("MT_TABLE4");
+            dbHelper.deleteAll("MT_TABLE5");
+        } else if (location.equals(CayenneProjects.COMPOUND_PROJECT)) {
+            dbHelper.deleteAll("CHAR_FK_TEST");
+            dbHelper.deleteAll("CHAR_PK_TEST");
+            dbHelper.deleteAll("COMPOUND_FK_TEST");
+            dbHelper.deleteAll("COMPOUND_PK_TEST");
+        } else if (location.equals(CayenneProjects.PEOPLE_PROJECT)) {
+            dbHelper.deleteAll("ADDRESS");
+            dbHelper.deleteAll("CLIENT_COMPANY");
+            dbHelper.deleteAll("DEPARTMENT");
+            dbHelper.deleteAll("PERSON");
+            dbHelper.deleteAll("PERSON_NOTES");
+        } else if(location.equals(CayenneProjects.BINARY_PK_PROJECT)) {
+            dbHelper.deleteAll("BINARY_PK_TEST1");
+            dbHelper.deleteAll("BINARY_PK_TEST2");
+        } else if (location.equals(CayenneProjects.DATE_TIME_PROJECT)) {
+            dbHelper.deleteAll("CALENDAR_TEST");
+            dbHelper.deleteAll("DATE_TEST");
+        } else if (location.equals(CayenneProjects.DELETE_RULES_PROJECT)) {
+            dbHelper.deleteAll("DELETE_CASCADE");
+            dbHelper.deleteAll("DELETE_DENY");
+            dbHelper.deleteAll("DELETE_NULLIFY");
+            dbHelper.deleteAll("DELETE_RULE");
+        } else if (location.equals(CayenneProjects.EMBEDDABLE_PROJECT)) {
+            dbHelper.deleteAll("EMBED_ENTITY1");
+        } else if (location.equals(CayenneProjects.EMPTY_PROJECT)) {
+            return;
+        } else if (location.equals(CayenneProjects.ENUM_PROJECT)) {
+            dbHelper.deleteAll("ENUM_ENTITY");
+        } else if (location.equals(CayenneProjects.EXTENDED_TYPE_PROJECT)) {
+            dbHelper.deleteAll("EXTENDED_TYPE_TEST");
+        } else if (location.equals(CayenneProjects.GENERATED_PROJECT)) {
+            dbHelper.deleteAll("GENERATED_COLUMN_COMP_KEY");
+            dbHelper.deleteAll("GENERATED_COLUMN_COMP_M");
+            dbHelper.deleteAll("GENERATED_COLUMN_DEP");
+            dbHelper.deleteAll("GENERATED_COLUMN_TEST");
+            dbHelper.deleteAll("GENERATED_COLUMN_TEST2");
+            dbHelper.deleteAll("GENERATED_F1");
+            dbHelper.deleteAll("GENERATED_F2");
+            dbHelper.deleteAll("GENERATED_JOIN");
+        } else if (location.equals(CayenneProjects.GENERIC_PROJECT)) {
+            dbHelper.deleteAll("GENERIC1");
+            dbHelper.deleteAll("GENERIC2");
+        } else if (location.equals(CayenneProjects.INHERITANCE_PROJECT)) {
+            dbHelper.deleteAll("BASE_ENTITY");
+            dbHelper.deleteAll("DIRECT_TO_SUB_ENTITY");
+            dbHelper.deleteAll("RELATED_ENTITY");
+        } else if 
(location.equals(CayenneProjects.INHERITANCE_SINGLE_TABLE1_PROJECT)) {
+            dbHelper.deleteAll("GROUP_MEMBERS");
+            dbHelper.deleteAll("GROUP_PROPERTIES");
+            dbHelper.deleteAll("ROLES");
+            dbHelper.deleteAll("USER_PROPERTIES");
+        } else if 
(location.equals(CayenneProjects.INHERITANCE_VERTICAL_PROJECT)) {
+            dbHelper.deleteAll("IV1_ROOT");
+            dbHelper.deleteAll("IV1_SUB1");
+            dbHelper.deleteAll("IV2_ROOT");
+            dbHelper.deleteAll("IV2_SUB1");
+            dbHelper.deleteAll("IV2_X");
+            dbHelper.deleteAll("IV_ROOT");
+            dbHelper.deleteAll("IV_SUB1");
+            dbHelper.deleteAll("IV_SUB1_SUB1");
+            dbHelper.deleteAll("IV_SUB2");
+        } else if (location.equals(CayenneProjects.LIFECYCLES_PROJECT)) {
+            dbHelper.deleteAll("LIFECYCLES");
+        } else if (location.equals(CayenneProjects.LOB_PROJECT)) {
+            if (accessStackAdapter.supportsLobs()) {
+                dbHelper.deleteAll("BLOB_TEST");
+                dbHelper.deleteAll("CLOB_TEST");
+            }
+            dbHelper.deleteAll("CLOB_TEST_RELATION");
+            dbHelper.deleteAll("TEST");
+        } else if (location.equals(CayenneProjects.LOCKING_PROJECT)) {
+            dbHelper.deleteAll("LOCKING_HELPER");
+            dbHelper.deleteAll("REL_LOCKING_TEST");
+            dbHelper.deleteAll("SIMPLE_LOCKING_TEST");
+        } else if (location.equals(CayenneProjects.MAP_TO_MANY_PROJECT)) {
+            dbHelper.deleteAll("ID_MAP_TO_MANY");
+            dbHelper.deleteAll("ID_MAP_TO_MANY_TARGET");
+            dbHelper.deleteAll("MAP_TO_MANY");
+            dbHelper.deleteAll("MAP_TO_MANY_TARGET");
+        } else if (location.equals(CayenneProjects.MEANINGFUL_PK_PROJECT)) {
+            dbHelper.deleteAll("MEANINGFUL_PK");
+            dbHelper.deleteAll("MEANINGFUL_PK_DEP");
+            dbHelper.deleteAll("MEANINGFUL_PK_TEST1");
+        } else if (location.equals(CayenneProjects.MISC_TYPES_PROJECT)) {
+            dbHelper.deleteAll("ARRAYS_ENTITY");
+            dbHelper.deleteAll("CHARACTER_ENTITY");
+            if(accessStackAdapter.supportsLobs()) {
+                dbHelper.deleteAll("SERIALIZABLE_ENTITY");
+            }
+        } else if 
(location.equals(CayenneProjects.MIXED_PERSISTENCE_STRATEGY_PROJECT)) {
+            dbHelper.deleteAll("MIXED_PERSISTENCE_STRATEGY");
+            dbHelper.deleteAll("MIXED_PERSISTENCE_STRATEGY2");
+        } else if (location.equals(CayenneProjects.MULTINODE_PROJECT)) {
+            dbHelper.deleteAll("CROSSDB_M1E1");
+            dbHelper.deleteAll("CROSSDB_M2E1");
+            dbHelper.deleteAll("CROSSDB_M2E2");
+        } else if (location.equals(CayenneProjects.NO_PK_PROJECT)) {
+            dbHelper.deleteAll("NO_PK_TEST");
+        } else if (location.equals(CayenneProjects.NUMERIC_TYPES_PROJECT)) {
+            dbHelper.deleteAll("BIGDECIMAL_ENTITY");
+            dbHelper.deleteAll("BIGINTEGER_ENTITY");
+            dbHelper.deleteAll("BIT_TEST");
+            dbHelper.deleteAll("BOOLEAN_TEST");
+            dbHelper.deleteAll("DECIMAL_PK_TST");
+            dbHelper.deleteAll("FLOAT_TEST");
+            dbHelper.deleteAll("LONG_ENTITY");
+            dbHelper.deleteAll("SMALLINT_TEST");
+            dbHelper.deleteAll("TINYINT_TEST");
+        } else if (location.equals(CayenneProjects.ONEWAY_PROJECT)) {
+            dbHelper.deleteAll("oneway_table1");
+            dbHelper.deleteAll("oneway_table2");
+            dbHelper.deleteAll("oneway_table3");
+            dbHelper.deleteAll("oneway_table4");
+        } else if (location.equals(CayenneProjects.PERSISTENT_PROJECT)) {
+            dbHelper.deleteAll("CONTINENT");
+            dbHelper.deleteAll("COUNTRY");
+        } else if (location.equals(CayenneProjects.PRIMITIVE_PROJECT)) {
+            dbHelper.deleteAll("PRIMITIVES_TEST");
+        } else if (location.equals(CayenneProjects.QUALIFIED_PROJECT)) {
+            dbHelper.deleteAll("TEST_QUALIFIED1");
+            dbHelper.deleteAll("TEST_QUALIFIED2");
+        } else if 
(location.equals(CayenneProjects.QUOTED_IDENTIFIERS_PROJECT)) {
+            dbHelper.deleteAll("QUOTED_ADDRESS");
+            dbHelper.deleteAll("quote Person");
+        } else if (location.equals(CayenneProjects.REFLEXIVE_PROJECT)) {
+            dbHelper.deleteAll("REFLEXIVE");
+        } else if (location.equals(CayenneProjects.RELATIONSHIPS_PROJECT)) {
+            dbHelper.deleteAll("FK_OF_DIFFERENT_TYPE");
+            dbHelper.deleteAll("MEANINGFUL_FK");
+            dbHelper.deleteAll("REFLEXIVE_AND_TO_ONE");
+            dbHelper.deleteAll("RELATIONSHIP_HELPER");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_ACTIVITY_PROJECT)) {
+            dbHelper.deleteAll("ACTIVITY");
+            dbHelper.deleteAll("RESULT");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_CHILD_MASTER_PROJECT)) {
+            dbHelper.deleteAll("CHILD");
+            dbHelper.deleteAll("MASTER");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_CLOB_PROJECT)) {
+            dbHelper.deleteAll("CLOB_DETAIL");
+            dbHelper.deleteAll("CLOB_MASTER");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_COLLECTION_TO_MANY_PROJECT)) {
+            dbHelper.deleteAll("COLLECTION_TO_MANY");
+            dbHelper.deleteAll("COLLECTION_TO_MANY_TARGET");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_DELETE_RULES_PROJECT)) {
+            dbHelper.deleteAll("DELETE_RULE_FLATA");
+            dbHelper.deleteAll("DELETE_RULE_FLATB");
+            dbHelper.deleteAll("DELETE_RULE_JOIN");
+            dbHelper.deleteAll("DELETE_RULE_TEST1");
+            dbHelper.deleteAll("DELETE_RULE_TEST2");
+            dbHelper.deleteAll("DELETE_RULE_TEST3");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_FLATTENED_PROJECT)) {
+            dbHelper.deleteAll("COMPLEX_JOIN");
+            dbHelper.deleteAll("FLATTENED_CIRCULAR");
+            dbHelper.deleteAll("FLATTENED_CIRCULAR_JOIN");
+            dbHelper.deleteAll("FLATTENED_TEST_1");
+            dbHelper.deleteAll("FLATTENED_TEST_2");
+            dbHelper.deleteAll("FLATTENED_TEST_3");
+            dbHelper.deleteAll("FLATTENED_TEST_4");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_SET_TO_MANY_PROJECT)) {
+            dbHelper.deleteAll("SET_TO_MANY");
+            dbHelper.deleteAll("SET_TO_MANY_TARGET");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_TO_MANY_FK_PROJECT)) {
+            dbHelper.deleteAll("TO_MANY_FKDEP");
+            dbHelper.deleteAll("TO_MANY_FKROOT");
+            dbHelper.deleteAll("TO_MANY_ROOT2");
+        } else if 
(location.equals(CayenneProjects.RELATIONSHIPS_TO_ONE_FK_PROJECT)) {
+            dbHelper.deleteAll("TO_ONE_FK1");
+            dbHelper.deleteAll("TO_ONE_FK2");
+        } else if (location.equals(CayenneProjects.RETURN_TYPES_PROJECT)) {
+            if (accessStackAdapter.supportsLobs()) {
+                dbHelper.deleteAll("TYPES_MAPPING_LOBS_TEST1");
+                dbHelper.deleteAll("TYPES_MAPPING_TEST2");
+            }
+            dbHelper.deleteAll("TYPES_MAPPING_TEST1");
+        } else if (location.equals(CayenneProjects.SOFT_DELETE_PROJECT)) {
+            dbHelper.deleteAll("SOFT_DELETE");
+        } else if (location.equals(CayenneProjects.SUS_PROJECT)) {
+            return;
+        } else if (location.equals(CayenneProjects.TABLE_PRIMITIVES_PROJECT)) {
+            dbHelper.deleteAll("TABLE_PRIMITIVES");
+        } else if (location.equals(CayenneProjects.THINGS_PROJECT)) {
+            dbHelper.deleteAll("BAG");
+            dbHelper.deleteAll("BALL");
+            dbHelper.deleteAll("BOX");
+            dbHelper.deleteAll("BOX_INFO");
+            dbHelper.deleteAll("BOX_THING");
+            dbHelper.deleteAll("THING");
+        } else if (location.equals(CayenneProjects.TOONE_PROJECT)) {
+            dbHelper.deleteAll("TOONE_DEP");
+            dbHelper.deleteAll("TOONE_MASTER");
+        } else if (location.equals(CayenneProjects.UUID_PROJECT)) {
+            dbHelper.deleteAll("UUID_PK_ENTITY");
+            dbHelper.deleteAll("UUID_TEST");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleanerProvider.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleanerProvider.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleanerProvider.java
new file mode 100644
index 0000000..86b5e86
--- /dev/null
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/DBCleanerProvider.java
@@ -0,0 +1,40 @@
+/*****************************************************************
+ *   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.unit.di.server;
+
+import org.apache.cayenne.ConfigurationException;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.di.Provider;
+import org.apache.cayenne.test.jdbc.DBHelper;
+
+public class DBCleanerProvider implements Provider<DBCleaner> {
+
+    @Inject
+    private DBHelper dbHelper;
+
+    @Inject
+    protected Provider<ServerCaseProperties> propertiesProvider;
+
+    @Override
+    public DBCleaner get() throws ConfigurationException {
+        return new DBCleaner((FlavoredDBHelper) dbHelper, 
propertiesProvider.get().getConfigurationLocation());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
index 1b194ec..a497e0d 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/SchemaBuilder.java
@@ -70,7 +70,7 @@ public class SchemaBuilder {
 
     private static String[] MAPS_REQUIRING_SCHEMA_SETUP = {"testmap.map.xml", 
"compound.map.xml", "misc-types.map.xml", "things.map.xml", 
"numeric-types.map.xml", "binary-pk.map.xml", "no-pk.map.xml",
             "lob.map.xml", "date-time.map.xml", "enum.map.xml", 
"extended-type.map.xml", "generated.map.xml", 
"mixed-persistence-strategy.map.xml", "people.map.xml", "primitive.map.xml", 
"inheritance.map.xml",
-            "locking.map.xml", "soft-delete.map.xml", "relationships.map.xml", 
"relationships-activity.map.xml", "relationships-delete-rules.map.xml",
+            "locking.map.xml", "soft-delete.map.xml", "empty.map.xml", 
"relationships.map.xml", "relationships-activity.map.xml", 
"relationships-delete-rules.map.xml",
             "relationships-collection-to-many.map.xml", 
"relationships-child-master.map.xml", "relationships-clob.map.xml",
             "relationships-flattened.map.xml", 
"relationships-set-to-many.map.xml", "relationships-to-many-fk.map.xml", 
"relationships-to-one-fk.map.xml", "return-types.map.xml", "uuid.map.xml",
             "multi-tier.map.xml", "persistent.map.xml", "reflexive.map.xml", 
"delete-rules.map.xml", "lifecycles.map.xml",

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
index 7ca8a79..d5b5871 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCase.java
@@ -19,62 +19,18 @@
 package org.apache.cayenne.unit.di.server;
 
 import org.apache.cayenne.di.DIBootstrap;
+import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.di.spi.DefaultScope;
 import org.apache.cayenne.unit.di.DICase;
 
 public class ServerCase extends DICase {
 
-       // known runtimes... unit tests may reuse these with @UseServerRuntime
-       // annotation or
-       // can define their own on the fly (TODO: how would that work with the
-       // global schema
-       // setup?)
-       public static final String INHERITANCE_SINGLE_TABLE1_PROJECT = 
"cayenne-inheritance-single-table1.xml";
-       public static final String INHERITANCE_VERTICAL_PROJECT = 
"cayenne-inheritance-vertical.xml";
-       public static final String INHERITANCE_PROJECT = 
"cayenne-inheritance.xml";
-       public static final String LOCKING_PROJECT = "cayenne-locking.xml";
-       public static final String SOFT_DELETE_PROJECT = 
"cayenne-soft-delete.xml";
-       public static final String QUOTED_IDENTIFIERS_PROJECT = 
"cayenne-quoted-identifiers.xml";
-       public static final String PEOPLE_PROJECT = "cayenne-people.xml";
-       public static final String RELATIONSHIPS_PROJECT = 
"cayenne-relationships.xml";
-       public static final String RELATIONSHIPS_ACTIVITY_PROJECT = 
"cayenne-relationships-activity.xml";
-       public static final String RELATIONSHIPS_DELETE_RULES_PROJECT = 
"cayenne-relationships-delete-rules.xml";
-       public static final String RELATIONSHIPS_COLLECTION_TO_MANY_PROJECT = 
"cayenne-relationships-collection-to-many.xml";
-       public static final String RELATIONSHIPS_CHILD_MASTER_PROJECT = 
"cayenne-relationships-child-master.xml";
-       public static final String RELATIONSHIPS_CLOB_PROJECT = 
"cayenne-relationships-clob.xml";
-       public static final String RELATIONSHIPS_FLATTENED_PROJECT = 
"cayenne-relationships-flattened.xml";
-       public static final String RELATIONSHIPS_SET_TO_MANY_PROJECT = 
"cayenne-relationships-set-to-many.xml";
-       public static final String RELATIONSHIPS_TO_MANY_FK_PROJECT = 
"cayenne-relationships-to-many-fk.xml";
-       public static final String RELATIONSHIPS_TO_ONE_FK_PROJECT = 
"cayenne-relationships-to-one-fk.xml";
-       public static final String MISC_TYPES_PROJECT = 
"cayenne-misc-types.xml";
-       public static final String THINGS_PROJECT = "cayenne-things.xml";
-       public static final String NUMERIC_TYPES_PROJECT = 
"cayenne-numeric-types.xml";
-       public static final String BINARY_PK_PROJECT = "cayenne-binary-pk.xml";
-       public static final String NO_PK_PROJECT = "cayenne-no-pk.xml";
-       public static final String LOB_PROJECT = "cayenne-lob.xml";
-       public static final String DATE_TIME_PROJECT = "cayenne-date-time.xml";
-       public static final String ENUM_PROJECT = "cayenne-enum.xml";
-       public static final String EXTENDED_TYPE_PROJECT = 
"cayenne-extended-type.xml";
-       public static final String GENERATED_PROJECT = "cayenne-generated.xml";
-       public static final String MEANINGFUL_PK_PROJECT = 
"cayenne-meaningful-pk.xml";
-       public static final String MIXED_PERSISTENCE_STRATEGY_PROJECT = 
"cayenne-mixed-persistence-strategy.xml";
-       public static final String PRIMITIVE_PROJECT = "cayenne-primitive.xml";
-       public static final String RETURN_TYPES_PROJECT = 
"cayenne-return-types.xml";
-       public static final String UUID_PROJECT = "cayenne-uuid.xml";
-       public static final String COMPOUND_PROJECT = "cayenne-compound.xml";
-       public static final String TESTMAP_PROJECT = "cayenne-testmap.xml";
-       public static final String EMBEDDABLE_PROJECT = 
"cayenne-embeddable.xml";
-       public static final String GENERIC_PROJECT = "cayenne-generic.xml";
-       public static final String QUALIFIED_PROJECT = "cayenne-qualified.xml";
-       public static final String MULTINODE_PROJECT = "cayenne-multinode.xml";
-       public static final String ONEWAY_PROJECT = "cayenne-oneway-rels.xml";
-       public static final String MULTI_TIER_PROJECT = 
"cayenne-multi-tier.xml";
-    public static final String MAP_TO_MANY_PROJECT = "cayenne-map-to-many.xml";
-       public static final String SUS_PROJECT = "cayenne-sus.xml";
-
        private static final Injector injector;
 
+       @Inject
+       private DBCleaner dbCleaner;
+
        static {
                DefaultScope testScope = new DefaultScope();
                injector = DIBootstrap.createInjector(new 
ServerCaseModule(testScope));
@@ -82,6 +38,11 @@ public class ServerCase extends DICase {
        }
 
        @Override
+       protected void setUpAfterInjection() throws Exception {
+               dbCleaner.clean();
+       }
+
+       @Override
        protected Injector getUnitTestInjector() {
                return injector;
        }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
index 65f622e..4bf0bbb 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseModule.java
@@ -18,9 +18,6 @@
  ****************************************************************/
 package org.apache.cayenne.unit.di.server;
 
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.access.DataContext;
 import org.apache.cayenne.access.DataNode;
@@ -102,6 +99,9 @@ import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestLifecycleManager;
 import org.apache.cayenne.unit.util.SQLTemplateCustomizer;
 
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
 public class ServerCaseModule implements Module {
 
     protected DefaultScope testScope;
@@ -229,5 +229,7 @@ public class ServerCaseModule implements Module {
 
         
binder.bind(DBHelper.class).toProvider(FlavoredDBHelperProvider.class).in(
                 testScope);
+        binder.bind(DBCleaner.class).toProvider(DBCleanerProvider.class).in(
+                testScope);
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfIT.java
index 64b6bda..993828b 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/di/server/ServerCaseSelfIT.java
@@ -28,7 +28,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
 
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class ServerCaseSelfIT extends ServerCase {
 
     @Inject
@@ -44,7 +44,7 @@ public class ServerCaseSelfIT extends ServerCase {
     public void testSetup_TearDown_Runtime() throws Exception {
 
         assertNotNull(properties);
-        assertEquals(ServerCase.TESTMAP_PROJECT, 
properties.getConfigurationLocation());
+        assertEquals(CayenneProjects.TESTMAP_PROJECT, 
properties.getConfigurationLocation());
 
         ServerRuntime local = this.runtime;
         assertNotNull(local);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
index f4d8b3f..2877c3c 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_115IT.java
@@ -28,8 +28,10 @@ import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.relationships_clob.ClobMaster;
 import org.apache.cayenne.unit.UnitDbAdapter;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.util.List;
@@ -38,7 +40,7 @@ import static org.junit.Assert.assertEquals;
 
 /**
  */
-@UseServerRuntime(ServerCase.RELATIONSHIPS_CLOB_PROJECT)
+@UseServerRuntime(CayenneProjects.RELATIONSHIPS_CLOB_PROJECT)
 public class CAY_115IT extends ServerCase {
 
     @Inject
@@ -52,12 +54,9 @@ public class CAY_115IT extends ServerCase {
     
     protected TableHelper tClobMaster;
     protected TableHelper tClobDetail;
-    
-    @Override
-    protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("CLOB_DETAIL");
-        dbHelper.deleteAll("CLOB_MASTER");
-        
+
+    @Before
+    public void testSetUp() throws Exception {
         tClobMaster = new TableHelper(dbHelper, "CLOB_MASTER");
         tClobMaster.setColumns("CLOB_MASTER_ID", "CLOB_COLUMN", "NAME");
         

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_191IT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_191IT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_191IT.java
index 30d7d40..fb31bd2 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_191IT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_191IT.java
@@ -25,16 +25,16 @@ import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.relationships.FkOfDifferentType;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.Before;
 import org.junit.Test;
 
-import java.sql.Types;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-@UseServerRuntime(ServerCase.RELATIONSHIPS_PROJECT)
+@UseServerRuntime(CayenneProjects.RELATIONSHIPS_PROJECT)
 public class CAY_191IT extends ServerCase {
     
     @Inject
@@ -45,14 +45,9 @@ public class CAY_191IT extends ServerCase {
     
     protected TableHelper tRelationshipHelper;
     protected TableHelper tFkOfDifferentType;
-    
-    @Override
-    protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("FK_OF_DIFFERENT_TYPE");
-        dbHelper.update("REFLEXIVE_AND_TO_ONE").set("PARENT_ID", null, 
Types.INTEGER).execute();
-        dbHelper.deleteAll("REFLEXIVE_AND_TO_ONE");
-        dbHelper.deleteAll("RELATIONSHIP_HELPER");
-        
+
+    @Before
+    public void testSetUp() throws Exception {
         tRelationshipHelper = new TableHelper(dbHelper, "RELATIONSHIP_HELPER");
         tRelationshipHelper.setColumns("NAME", "RELATIONSHIP_HELPER_ID");
         

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
index 2fca6b9..dcd6b6a 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/unit/jira/CAY_194IT.java
@@ -27,8 +27,10 @@ import org.apache.cayenne.query.SelectQuery;
 import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.test.jdbc.TableHelper;
 import org.apache.cayenne.testdo.relationships.ReflexiveAndToOne;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.Before;
 import org.junit.Test;
 
 import java.sql.Types;
@@ -42,7 +44,7 @@ import static org.junit.Assert.assertSame;
  */
 // TODO: this is really a qualifier translator general test... need to
 // find an appropriate place in unit tests..
-@UseServerRuntime(ServerCase.RELATIONSHIPS_PROJECT)
+@UseServerRuntime(CayenneProjects.RELATIONSHIPS_PROJECT)
 public class CAY_194IT extends ServerCase {
 
     @Inject
@@ -51,8 +53,8 @@ public class CAY_194IT extends ServerCase {
     @Inject
     private DBHelper dbHelper;
 
-    @Override
-    protected void setUpAfterInjection() throws Exception {
+    @Before
+    public void testSetUp() throws Exception {
         TableHelper tReflexive = new TableHelper(dbHelper, 
"REFLEXIVE_AND_TO_ONE");
         tReflexive.setColumns("REFLEXIVE_AND_TO_ONE_ID", "PARENT_ID");
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationIT.java
index 91d2368..2e86640 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationIT.java
@@ -26,6 +26,7 @@ import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestClosure;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.junit.Test;
@@ -34,7 +35,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class DeepMergeOperationIT extends ServerCase {
 
     @Inject

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceIT.java
index bf95dab..4204412 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/util/DeepMergeOperationInheritanceIT.java
@@ -28,6 +28,7 @@ import org.apache.cayenne.testdo.inheritance_people.Employee;
 import org.apache.cayenne.testdo.inheritance_people.Manager;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestClosure;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.junit.Test;
@@ -37,7 +38,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
-@UseServerRuntime(ServerCase.PEOPLE_PROJECT)
+@UseServerRuntime(CayenneProjects.PEOPLE_PROJECT)
 public class DeepMergeOperationInheritanceIT extends ServerCase {
 
     @Inject

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
index 83c4f53..ec9b604 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/util/EntityMergeSupportIT.java
@@ -25,7 +25,7 @@ import org.apache.cayenne.map.DbRelationship;
 import org.apache.cayenne.map.DeleteRule;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.merge.MergeCase;
-import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.junit.Test;
 
@@ -37,7 +37,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class EntityMergeSupportIT extends MergeCase {
 
     @Test

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/util/ShallowMergeOperationIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/util/ShallowMergeOperationIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/util/ShallowMergeOperationIT.java
index b29f0ad..0f7ec48 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/util/ShallowMergeOperationIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/util/ShallowMergeOperationIT.java
@@ -33,15 +33,17 @@ import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.testdo.testmap.Painting;
 import org.apache.cayenne.unit.di.DataChannelInterceptor;
 import org.apache.cayenne.unit.di.UnitTestClosure;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.Before;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class ShallowMergeOperationIT extends ServerCase {
 
     @Inject
@@ -58,14 +60,8 @@ public class ShallowMergeOperationIT extends ServerCase {
 
     private TableHelper tArtist;
 
-    @Override
-    protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("PAINTING_INFO");
-        dbHelper.deleteAll("PAINTING");
-        dbHelper.deleteAll("ARTIST_EXHIBIT");
-        dbHelper.deleteAll("ARTIST_GROUP");
-        dbHelper.deleteAll("ARTIST");
-
+    @Before
+    public void testSetUp() throws Exception {
         tArtist = new TableHelper(dbHelper, "ARTIST");
         tArtist.setColumns("ARTIST_ID", "ARTIST_NAME");
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/velocity/BindDirectiveIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/velocity/BindDirectiveIT.java 
b/cayenne-server/src/test/java/org/apache/cayenne/velocity/BindDirectiveIT.java
index b8945fe..69461c8 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/velocity/BindDirectiveIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/velocity/BindDirectiveIT.java
@@ -30,8 +30,8 @@ import org.apache.cayenne.log.JdbcEventLogger;
 import org.apache.cayenne.query.CapsStrategy;
 import org.apache.cayenne.query.SQLTemplate;
 import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.ServerCaseDataSourceFactory;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -55,7 +55,7 @@ import static org.junit.Assert.assertNull;
 /**
  * Tests BindDirective for passed null parameters and for not passed parameters
  */
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class BindDirectiveIT extends ServerCase {
 
     @Inject
@@ -68,23 +68,11 @@ public class BindDirectiveIT extends ServerCase {
     private ObjectContext context;
 
     @Inject
-    private DBHelper dbHelper;
-
-    @Inject
     private JdbcEventLogger logger;
     
     @Inject
     private DataNode node;
 
-    @Override
-    protected void setUpAfterInjection() throws Exception {
-        dbHelper.deleteAll("PAINTING_INFO");
-        dbHelper.deleteAll("PAINTING");
-        dbHelper.deleteAll("ARTIST_EXHIBIT");
-        dbHelper.deleteAll("ARTIST_GROUP");
-        dbHelper.deleteAll("ARTIST");
-    }
-
     @Test
     public void testBindTimestamp() throws Exception {
         Map<String, Object> parameters = new HashMap<String, Object>();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/java/org/apache/cayenne/velocity/ResultDirectiveIT.java
----------------------------------------------------------------------
diff --git 
a/cayenne-server/src/test/java/org/apache/cayenne/velocity/ResultDirectiveIT.java
 
b/cayenne-server/src/test/java/org/apache/cayenne/velocity/ResultDirectiveIT.java
index 449e33f..1b5fdd0 100644
--- 
a/cayenne-server/src/test/java/org/apache/cayenne/velocity/ResultDirectiveIT.java
+++ 
b/cayenne-server/src/test/java/org/apache/cayenne/velocity/ResultDirectiveIT.java
@@ -28,8 +28,8 @@ import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.query.CapsStrategy;
 import org.apache.cayenne.query.SQLTemplate;
 import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.test.jdbc.DBHelper;
 import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
 import org.apache.cayenne.unit.di.server.ServerCase;
 import org.apache.cayenne.unit.di.server.UseServerRuntime;
 import org.junit.Test;
@@ -47,33 +47,18 @@ import static org.junit.Assert.assertNotNull;
  * Test for Result directive to check if we could use ResultDirective
  * optionally.
  */
-@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
 public class ResultDirectiveIT extends ServerCase {
 
        @Inject
        private ServerRuntime runtime;
 
        @Inject
-       private DBHelper dbHelper;
-
-       @Inject
        private JdbcAdapter dbAdapter;
 
        @Inject
        private DataNode node;
 
-       @Override
-       protected void setUpAfterInjection() throws Exception {
-               dbHelper.deleteAll("PAINTING_INFO");
-               dbHelper.deleteAll("PAINTING");
-               dbHelper.deleteAll("PAINTING1");
-               dbHelper.deleteAll("ARTIST_EXHIBIT");
-               dbHelper.deleteAll("ARTIST_GROUP");
-               dbHelper.deleteAll("ARTIST");
-               dbHelper.deleteAll("EXHIBIT");
-               dbHelper.deleteAll("GALLERY");
-       }
-
     @Test
        public void testWithoutResultDirective() throws Exception {
                String sql = "SELECT ARTIST_ID, ARTIST_NAME FROM ARTIST";

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/resources/cayenne-empty.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/cayenne-empty.xml 
b/cayenne-server/src/test/resources/cayenne-empty.xml
new file mode 100644
index 0000000..00778a5
--- /dev/null
+++ b/cayenne-server/src/test/resources/cayenne-empty.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<domain project-version="7">
+    <map name="empty"/>
+</domain>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/resources/empty.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/empty.map.xml 
b/cayenne-server/src/test/resources/empty.map.xml
new file mode 100644
index 0000000..20ffbc78
--- /dev/null
+++ b/cayenne-server/src/test/resources/empty.map.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<data-map xmlns="http://cayenne.apache.org/schema/7/modelMap";
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+          xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap 
http://cayenne.apache.org/schema/7/modelMap.xsd";
+          project-version="7">
+    <db-entity name="EMPTY">
+        <db-attribute name="ID" type="INTEGER" isPrimaryKey="true" 
isMandatory="true"/>
+    </db-entity>
+</data-map>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cayenne/blob/368b4ac5/cayenne-server/src/test/resources/small-testmap.map.xml
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/resources/small-testmap.map.xml 
b/cayenne-server/src/test/resources/small-testmap.map.xml
deleted file mode 100644
index 486256e..0000000
--- a/cayenne-server/src/test/resources/small-testmap.map.xml
+++ /dev/null
@@ -1,225 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<data-map xmlns="http://cayenne.apache.org/schema/7/modelMap";
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-        xsi:schemaLocation="http://cayenne.apache.org/schema/7/modelMap 
http://cayenne.apache.org/schema/7/modelMap.xsd";
-        project-version="7">
-       <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="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="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="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="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="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>
-       <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="ArtistExhibit" 
className="org.apache.cayenne.testdo.testmap.ArtistExhibit" 
dbEntityName="ARTIST_EXHIBIT">
-       </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="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="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="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="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="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>
-       <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="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="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="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="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"/>
-</data-map>

Reply via email to