You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/07/01 16:20:05 UTC

[cayenne] 04/06: CAY-2737 Cayenne 4.3: cleanup deprecated code

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 36add985c22aa06b2334ec6b17d79f02fb1010f8
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Jul 1 18:06:13 2022 +0300

    CAY-2737 Cayenne 4.3: cleanup deprecated code
---
 .../legacy/DefaultBatchTranslatorFactory.java      |  64 --------
 .../batch/legacy/DeleteBatchTranslator.java        | 118 --------------
 .../batch/legacy/InsertBatchTranslator.java        | 149 -----------------
 .../batch/legacy/SoftDeleteBatchTranslator.java    | 110 -------------
 .../batch/legacy/SoftDeleteTranslatorFactory.java  |  73 ---------
 .../batch/legacy/UpdateBatchTranslator.java        | 148 -----------------
 .../java/org/apache/cayenne/dba/JdbcAdapter.java   |  11 --
 .../org/apache/cayenne/dba/db2/DB2Adapter.java     |   8 -
 .../org/apache/cayenne/dba/derby/DerbyAdapter.java |   5 -
 .../cayenne/dba/frontbase/FrontBaseAdapter.java    |   5 -
 .../java/org/apache/cayenne/dba/h2/H2Adapter.java  |   5 -
 .../apache/cayenne/dba/ingres/IngresAdapter.java   |   8 -
 .../org/apache/cayenne/dba/mysql/MySQLAdapter.java |  10 --
 .../apache/cayenne/dba/oracle/OracleAdapter.java   |   9 -
 .../cayenne/dba/postgres/PostgresAdapter.java      |   8 -
 .../apache/cayenne/dba/sybase/SybaseAdapter.java   |   9 -
 .../java/org/apache/cayenne/reflect/Property.java  |  31 ----
 .../resource/FilesystemResourceLocator.java        | 118 --------------
 .../batch/legacy/DeleteBatchTranslatorIT.java      | 164 -------------------
 .../batch/legacy/InsertBatchTranslatorIT.java      | 105 ------------
 .../batch/legacy/SoftDeleteBatchTranslatorIT.java  | 181 ---------------------
 .../batch/legacy/UpdateBatchTranslatorIT.java      | 170 -------------------
 .../resource/FilesystemResourceLocatorTest.java    | 108 ------------
 23 files changed, 1617 deletions(-)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DefaultBatchTranslatorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DefaultBatchTranslatorFactory.java
deleted file mode 100644
index d246fe3b6..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DefaultBatchTranslatorFactory.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.access.translator.batch.BatchTranslator;
-import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.query.BatchQuery;
-import org.apache.cayenne.query.DeleteBatchQuery;
-import org.apache.cayenne.query.InsertBatchQuery;
-import org.apache.cayenne.query.UpdateBatchQuery;
-
-/**
- * Default implementation of {@link BatchTranslatorFactory}.
- * 
- * @since 4.0
- * @deprecated since 4.2
- */
-@Deprecated
-public class DefaultBatchTranslatorFactory implements BatchTranslatorFactory {
-
-    @Override
-    public BatchTranslator translator(BatchQuery query, DbAdapter adapter, String trimFunction) {
-        if (query instanceof InsertBatchQuery) {
-            return insertTranslator((InsertBatchQuery) query, adapter);
-        } else if (query instanceof UpdateBatchQuery) {
-            return updateTranslator((UpdateBatchQuery) query, adapter, trimFunction);
-        } else if (query instanceof DeleteBatchQuery) {
-            return deleteTranslator((DeleteBatchQuery) query, adapter, trimFunction);
-        } else {
-            throw new CayenneRuntimeException("Unsupported batch query: %s", query);
-        }
-    }
-
-    protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) {
-        return new DeleteBatchTranslator(query, adapter, trimFunction);
-    }
-
-    protected BatchTranslator insertTranslator(InsertBatchQuery query, DbAdapter adapter) {
-        return new InsertBatchTranslator(query, adapter);
-    }
-
-    protected BatchTranslator updateTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) {
-        return new UpdateBatchTranslator(query, adapter, trimFunction);
-    }
-
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslator.java
deleted file mode 100644
index afe719652..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslator.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.cayenne.access.translator.DbAttributeBinding;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.BatchQueryRow;
-import org.apache.cayenne.query.DeleteBatchQuery;
-
-/**
- * Translator for delete BatchQueries. Creates parameterized DELETE SQL
- * statements.
- * @deprecated since 4.2
- */
-@Deprecated
-public class DeleteBatchTranslator extends DefaultBatchTranslator {
-
-    public DeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) {
-        super(query, adapter, trimFunction);
-    }
-
-    @Override
-    protected String createSql() {
-
-        QuotingStrategy strategy = adapter.getQuotingStrategy();
-
-        StringBuilder buffer = new StringBuilder("DELETE FROM ");
-        buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity()));
-
-        applyQualifier(buffer);
-
-        return buffer.toString();
-    }
-
-    /**
-     * Appends WHERE clause to SQL string
-     */
-    protected void applyQualifier(StringBuilder buffer) {
-        buffer.append(" WHERE ");
-
-        DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query;
-        Iterator<DbAttribute> i = deleteBatch.getDbAttributes().iterator();
-        while (i.hasNext()) {
-            DbAttribute attribute = i.next();
-            appendDbAttribute(buffer, attribute);
-            buffer.append(deleteBatch.isNull(attribute) ? " IS NULL" : " = ?");
-
-            if (i.hasNext()) {
-                buffer.append(" AND ");
-            }
-        }
-    }
-
-    @Override
-    protected DbAttributeBinding[] createBindings() {
-        DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query;
-        List<DbAttribute> attributes = deleteBatch.getDbAttributes();
-        int len = attributes.size();
-
-        DbAttributeBinding[] bindings = new DbAttributeBinding[len];
-
-        for (int i = 0; i < len; i++) {
-            bindings[i] = new DbAttributeBinding(attributes.get(i));
-        }
-
-        return bindings;
-    }
-
-    @Override
-    protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) {
-
-        int len = bindings.length;
-
-        DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query;
-
-        for (int i = 0, j = 1; i < len; i++) {
-
-            DbAttributeBinding b = bindings[i];
-
-            // skip null attributes... they are translated as "IS NULL"
-            if (deleteBatch.isNull(b.getAttribute())) {
-                b.exclude();
-            } else {
-                Object value = row.getValue(i);
-                ExtendedType extendedType = value != null
-                        ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
-                        : adapter.getExtendedTypes().getDefaultType();
-
-                b.include(j++, value, extendedType);
-            }
-        }
-
-        return bindings;
-    }
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslator.java
deleted file mode 100644
index 3bc59274b..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslator.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import java.util.List;
-
-import org.apache.cayenne.access.translator.DbAttributeBinding;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.BatchQueryRow;
-import org.apache.cayenne.query.InsertBatchQuery;
-
-/**
- * Translator of InsertBatchQueries.
- * @deprecated since 4.2
- */
-@Deprecated
-public class InsertBatchTranslator extends DefaultBatchTranslator {
-
-    public InsertBatchTranslator(InsertBatchQuery query, DbAdapter adapter) {
-        // no trimming is needed here, so passing hardcoded NULL for trim
-        // function
-        super(query, adapter, null);
-    }
-
-    @Override
-    protected String createSql() {
-
-        List<DbAttribute> dbAttributes = query.getDbAttributes();
-        QuotingStrategy strategy = adapter.getQuotingStrategy();
-
-        StringBuilder buffer = new StringBuilder("INSERT INTO ");
-        buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity()));
-        buffer.append(" (");
-
-        int columnCount = 0;
-        for (DbAttribute attribute : dbAttributes) {
-
-            // attribute inclusion rule - one of the rules below must be true:
-            // (1) attribute not generated
-            // (2) attribute is generated and PK and adapter does not support
-            // generated
-            // keys
-
-            if (includeInBatch(attribute)) {
-
-                if (columnCount > 0) {
-                    buffer.append(", ");
-                }
-                buffer.append(strategy.quotedName(attribute));
-                columnCount++;
-            }
-        }
-
-        buffer.append(") VALUES (");
-
-        for (int i = 0; i < columnCount; i++) {
-            if (i > 0) {
-                buffer.append(", ");
-            }
-
-            buffer.append('?');
-        }
-        buffer.append(')');
-        return buffer.toString();
-    }
-
-    @Override
-    protected DbAttributeBinding[] createBindings() {
-        List<DbAttribute> attributes = query.getDbAttributes();
-        int len = attributes.size();
-
-        DbAttributeBinding[] bindings = new DbAttributeBinding[len];
-
-        for (int i = 0; i < len; i++) {
-            DbAttribute a = attributes.get(i);
-
-            bindings[i] = new DbAttributeBinding(a);
-
-            // include/exclude state depends on DbAttribute only and can be
-            // precompiled here
-            if (includeInBatch(a)) {
-                // setting fake position here... all we care about is that it is
-                // > -1
-                bindings[i].include(1, null, null);
-            } else {
-                bindings[i].exclude();
-            }
-        }
-
-        return bindings;
-    }
-
-    @Override
-    protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) {
-        int len = bindings.length;
-
-        for (int i = 0, j = 1; i < len; i++) {
-
-            DbAttributeBinding b = bindings[i];
-
-            // exclusions are permanent
-            if (!b.isExcluded()) {
-                Object value = row.getValue(i);
-                ExtendedType extendedType = value != null
-                        ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
-                        : adapter.getExtendedTypes().getDefaultType();
-
-                b.include(j++, value, extendedType);
-            }
-        }
-
-        return bindings;
-    }
-
-    /**
-     * Returns true if an attribute should be included in the batch.
-     * 
-     * @since 1.2
-     */
-    protected boolean includeInBatch(DbAttribute attribute) {
-        // attribute inclusion rule - one of the rules below must be true:
-        // (1) attribute not generated
-        // (2) attribute is generated and PK and adapter does not support
-        // generated
-        // keys
-
-        return !attribute.isGenerated() || (attribute.isPrimaryKey() && !adapter.supportsGeneratedKeys());
-    }
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslator.java
deleted file mode 100644
index b616d9287..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslator.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import java.util.Objects;
-
-import org.apache.cayenne.access.translator.DbAttributeBinding;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.dba.TypesMapping;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.BatchQueryRow;
-import org.apache.cayenne.query.DeleteBatchQuery;
-
-/**
- * Implementation of {@link DeleteBatchTranslator}, which uses 'soft' delete
- * (runs UPDATE and sets 'deleted' field to true instead-of running SQL DELETE)
- *
- * @deprecated since 4.2
- */
-@Deprecated
-public class SoftDeleteBatchTranslator extends DeleteBatchTranslator {
-
-    private String deletedFieldName;
-
-    public SoftDeleteBatchTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction,
-            String deletedFieldName) {
-        super(query, adapter, trimFunction);
-        this.deletedFieldName = Objects.requireNonNull(deletedFieldName);
-    }
-
-    @Override
-    protected String createSql() {
-
-        QuotingStrategy strategy = adapter.getQuotingStrategy();
-
-        StringBuilder buffer = new StringBuilder("UPDATE ");
-        buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity()));
-        buffer.append(" SET ").append(strategy.quotedIdentifier(query.getDbEntity(), deletedFieldName)).append(" = ?");
-
-        applyQualifier(buffer);
-
-        return buffer.toString();
-    }
-
-    @Override
-    protected DbAttributeBinding[] createBindings() {
-
-        DbAttributeBinding[] superBindings = super.createBindings();
-
-        int slen = superBindings.length;
-
-        DbAttributeBinding[] bindings = new DbAttributeBinding[slen + 1];
-
-        DbAttribute deleteAttribute = Objects.requireNonNull(query.getDbEntity().getAttribute(deletedFieldName));
-        String typeName = TypesMapping.getJavaBySqlType(deleteAttribute);
-        ExtendedType extendedType = adapter.getExtendedTypes().getRegisteredType(typeName);
-
-        bindings[0] = new DbAttributeBinding(deleteAttribute);
-        bindings[0].include(1, true, extendedType);
-        
-        System.arraycopy(superBindings, 0, bindings, 1, slen);
-
-        return bindings;
-    }
-
-    @Override
-    protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) {
-        int len = bindings.length;
-
-        DeleteBatchQuery deleteBatch = (DeleteBatchQuery) query;
-
-        // skip position 0... Otherwise follow super algorithm
-        for (int i = 1, j = 2; i < len; i++) {
-
-            DbAttributeBinding b = bindings[i];
-
-            // skip null attributes... they are translated as "IS NULL"
-            if (deleteBatch.isNull(b.getAttribute())) {
-                b.exclude();
-            } else {
-                Object value = row.getValue(i - 1);
-                ExtendedType extendedType = value != null
-                        ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
-                        : adapter.getExtendedTypes().getDefaultType();
-
-                b.include(j++, value, extendedType);
-            }
-        }
-
-        return bindings;
-    }
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteTranslatorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteTranslatorFactory.java
deleted file mode 100644
index 1fa838eed..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteTranslatorFactory.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import java.sql.Types;
-import java.util.Objects;
-
-import org.apache.cayenne.access.translator.batch.BatchTranslator;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.DeleteBatchQuery;
-
-/**
- * Implementation of {link #BatchTranslator}, which uses 'soft' delete
- * (runs UPDATE and sets 'deleted' field to true instead-of running SQL DELETE)
- * 
- * @since 4.0
- * @deprecated since 4.2
- */
-@Deprecated
-public class SoftDeleteTranslatorFactory extends DefaultBatchTranslatorFactory {
-    /**
-     * Default name of 'deleted' field
-     */
-    public static final String DEFAULT_DELETED_FIELD_NAME = "DELETED";
-
-    /**
-     * Name of 'deleted' field
-     */
-    private String deletedFieldName;
-
-    public SoftDeleteTranslatorFactory() {
-        this(DEFAULT_DELETED_FIELD_NAME);
-    }
-
-    public SoftDeleteTranslatorFactory(String deletedFieldName) {
-        this.deletedFieldName = Objects.requireNonNull(deletedFieldName);
-    }
-
-    @Override
-    protected BatchTranslator deleteTranslator(DeleteBatchQuery query, DbAdapter adapter, String trimFunction) {
-
-        DbAttribute attr = query.getDbEntity().getAttribute(deletedFieldName);
-        boolean needsSoftDelete = attr != null && attr.getType() == Types.BOOLEAN;
-
-        return needsSoftDelete
-                ? new SoftDeleteBatchTranslator(query, adapter, trimFunction, deletedFieldName)
-                : super.deleteTranslator(query, adapter, trimFunction);
-    }
-
-    /**
-     * @return name of 'deleted' field
-     */
-    public String getDeletedFieldName() {
-        return deletedFieldName;
-    }
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslator.java
deleted file mode 100644
index 36e851bb2..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslator.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.cayenne.access.translator.DbAttributeBinding;
-import org.apache.cayenne.access.types.ExtendedType;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.QuotingStrategy;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.query.BatchQueryRow;
-import org.apache.cayenne.query.UpdateBatchQuery;
-
-/**
- * A translator for UpdateBatchQueries that produces parameterized SQL.
- * @deprecated since 4.2
- */
-@Deprecated
-public class UpdateBatchTranslator extends DefaultBatchTranslator {
-
-    public UpdateBatchTranslator(UpdateBatchQuery query, DbAdapter adapter, String trimFunction) {
-        super(query, adapter, trimFunction);
-    }
-
-    @Override
-    protected String createSql() {
-        UpdateBatchQuery updateBatch = (UpdateBatchQuery) query;
-
-        QuotingStrategy strategy = adapter.getQuotingStrategy();
-
-        List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes();
-        List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes();
-
-        StringBuilder buffer = new StringBuilder("UPDATE ");
-        buffer.append(strategy.quotedFullyQualifiedName(query.getDbEntity()));
-        buffer.append(" SET ");
-
-        int len = updatedDbAttributes.size();
-        for (int i = 0; i < len; i++) {
-            if (i > 0) {
-                buffer.append(", ");
-            }
-
-            DbAttribute attribute = updatedDbAttributes.get(i);
-            buffer.append(strategy.quotedName(attribute));
-            buffer.append(" = ?");
-        }
-
-        buffer.append(" WHERE ");
-
-        Iterator<DbAttribute> i = qualifierAttributes.iterator();
-        while (i.hasNext()) {
-            DbAttribute attribute = i.next();
-            appendDbAttribute(buffer, attribute);
-            buffer.append(updateBatch.isNull(attribute) ? " IS NULL" : " = ?");
-
-            if (i.hasNext()) {
-                buffer.append(" AND ");
-            }
-        }
-
-        return buffer.toString();
-    }
-
-    @Override
-    protected DbAttributeBinding[] createBindings() {
-        UpdateBatchQuery updateBatch = (UpdateBatchQuery) query;
-
-        List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes();
-        List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes();
-
-        int ul = updatedDbAttributes.size();
-        int ql = qualifierAttributes.size();
-
-        DbAttributeBinding[] bindings = new DbAttributeBinding[ul + ql];
-
-        for (int i = 0; i < ul; i++) {
-            bindings[i] = new DbAttributeBinding(updatedDbAttributes.get(i));
-        }
-
-        for (int i = 0; i < ql; i++) {
-            bindings[ul + i] = new DbAttributeBinding(qualifierAttributes.get(i));
-        }
-
-        return bindings;
-    }
-
-    @Override
-    protected DbAttributeBinding[] doUpdateBindings(BatchQueryRow row) {
-
-        UpdateBatchQuery updateBatch = (UpdateBatchQuery) query;
-
-        List<DbAttribute> updatedDbAttributes = updateBatch.getUpdatedAttributes();
-        List<DbAttribute> qualifierAttributes = updateBatch.getQualifierAttributes();
-
-        int ul = updatedDbAttributes.size();
-        int ql = qualifierAttributes.size();
-
-        int j = 1;
-
-        for (int i = 0; i < ul; i++) {
-            Object value = row.getValue(i);
-            ExtendedType extendedType = value != null
-                    ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
-                    : adapter.getExtendedTypes().getDefaultType();
-
-            bindings[i].include(j++, value, extendedType);
-        }
-
-        for (int i = 0; i < ql; i++) {
-
-            DbAttribute a = qualifierAttributes.get(i);
-
-            // skip null attributes... they are translated as "IS NULL"
-            if (updateBatch.isNull(a)) {
-                continue;
-            }
-
-            Object value = row.getValue(ul + i);
-            ExtendedType extendedType = value != null
-                    ? adapter.getExtendedTypes().getRegisteredType(value.getClass())
-                    : adapter.getExtendedTypes().getDefaultType();
-
-            bindings[ul + i].include(j++, value, extendedType);
-        }
-
-        return bindings;
-    }
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
index 5dfc160d4..8c250d6a3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java
@@ -103,7 +103,6 @@ public class JdbcAdapter implements DbAdapter {
         this.caseInsensitiveCollations = runtimeProperties.getBoolean(Constants.CI_PROPERTY, false);
         this.resourceLocator = resourceLocator;
 
-        this.pkGenerator = createPkGenerator();
         this.quotingStrategy = createQuotingStrategy();
 
         this.ejbqlTranslatorFactory = createEJBQLTranslatorFactory();
@@ -191,16 +190,6 @@ public class JdbcAdapter implements DbAdapter {
         extendedTypes.addFactory(new ValueObjectTypeFactory(extendedTypes, valueObjectTypeRegistry));
     }
 
-    /**
-     * Creates and returns a primary key generator. This factory method should
-     * be overriden by JdbcAdapter subclasses to provide custom implementations
-     * of PKGenerator.
-     */
-    @Deprecated
-    protected PkGenerator createPkGenerator() {
-        return new JdbcPkGenerator(this);
-    }
-
     /**
      * Creates and returns an {@link EJBQLTranslatorFactory} used to generate
      * visitors for EJBQL to SQL translations. This method should be overriden
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
index bdbd376be..1f4887127 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/db2/DB2Adapter.java
@@ -73,14 +73,6 @@ public class DB2Adapter extends JdbcAdapter {
         setSupportsGeneratedKeys(true);
     }
 
-    /**
-     * Creates a DB2 specific PK Generator.
-     */
-    @Override
-    protected PkGenerator createPkGenerator() {
-        return new DB2PkGenerator(this);
-    }
-
     @Override
     protected void configureExtendedTypes(ExtendedTypeMap map) {
         super.configureExtendedTypes(map);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
index e7471fe19..437b0e394 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/derby/DerbyAdapter.java
@@ -95,11 +95,6 @@ public class DerbyAdapter extends JdbcAdapter {
 	public boolean supportsGeneratedKeysForBatchInserts() {
 		return false;
 	}
-	
-    @Override
-    protected PkGenerator createPkGenerator() {
-        return new DerbyPkGenerator(this);
-    }
 
     @Override
     public SQLAction getAction(Query query, DataNode node) {
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
index 28c667729..cdc56a0f9 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/frontbase/FrontBaseAdapter.java
@@ -214,11 +214,6 @@ public class FrontBaseAdapter extends JdbcAdapter {
 		return Collections.singleton("DROP TABLE " + getQuotingStrategy().quotedFullyQualifiedName(table) + " CASCADE");
 	}
 
-	@Override
-	protected PkGenerator createPkGenerator() {
-		return new FrontBasePkGenerator(this);
-	}
-
 	/**
 	 * Uses FrontBaseActionBuilder to create the right action.
 	 *
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
index 128321bd2..6799ef5de 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/h2/H2Adapter.java
@@ -96,9 +96,4 @@ public class H2Adapter extends JdbcAdapter {
         // create specially configured CharType handler
         map.registerType(new H2CharType());
     }
-
-    @Override
-    protected PkGenerator createPkGenerator() {
-        return new H2PkGenerator(this);
-    }
 }
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
index ffa1aabb5..a04e3a4ab 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/ingres/IngresAdapter.java
@@ -92,14 +92,6 @@ public class IngresAdapter extends JdbcAdapter {
 		map.registerType(new IngresBooleanType());
 	}
 
-	/**
-	 * @see JdbcAdapter#createPkGenerator()
-	 */
-	@Override
-	protected PkGenerator createPkGenerator() {
-		return new IngresPkGenerator(this);
-	}
-
 	@Override
 	public void bindParameter(PreparedStatement statement, ParameterBinding binding)
 			throws SQLException, Exception {
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
index 1573379ff..06e248a76 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/mysql/MySQLAdapter.java
@@ -249,16 +249,6 @@ public class MySQLAdapter extends JdbcAdapter {
 		}
 	}
 
-	/**
-	 * Creates and returns a primary key generator. Overrides superclass
-	 * implementation to return an instance of MySQLPkGenerator that does the
-	 * correct table locking.
-	 */
-	@Override
-	protected PkGenerator createPkGenerator() {
-		return new MySQLPkGenerator(this);
-	}
-
 	/**
 	 * @since 3.0
 	 */
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
index ccb93e72d..2f2b7b3ba 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/oracle/OracleAdapter.java
@@ -214,15 +214,6 @@ public class OracleAdapter extends JdbcAdapter {
 		map.registerType(new OracleBooleanType());
 	}
 
-	/**
-	 * Creates and returns a primary key generator. Overrides superclass
-	 * implementation to return an instance of OraclePkGenerator.
-	 */
-	@Override
-	protected PkGenerator createPkGenerator() {
-		return new OraclePkGenerator(this);
-	}
-
 	/**
 	 * Returns a query string to drop a table corresponding to <code>ent</code>
 	 * DbEntity. Changes superclass behavior to drop all related foreign key
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
index 1765c3ba5..d1373a08e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/postgres/PostgresAdapter.java
@@ -259,14 +259,6 @@ public class PostgresAdapter extends JdbcAdapter {
 		return Collections.singleton("DROP TABLE " + context.quotedFullyQualifiedName(table) + " CASCADE");
 	}
 
-	/**
-	 * @see JdbcAdapter#createPkGenerator()
-	 */
-	@Override
-	protected PkGenerator createPkGenerator() {
-		return new PostgresPkGenerator(this);
-	}
-
 	@Override
 	public boolean supportsCatalogsOnReverseEngineering() {
 		return false;
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
index 303381f8a..f4013fd66 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/sybase/SybaseAdapter.java
@@ -111,15 +111,6 @@ public class SybaseAdapter extends JdbcAdapter {
         map.registerType(new ByteType(true));
     }
 
-    /**
-     * Creates and returns a primary key generator. Overrides superclass
-     * implementation to return an instance of SybasePkGenerator.
-     */
-    @Override
-    protected PkGenerator createPkGenerator() {
-        return new SybasePkGenerator(this);
-    }
-
     @Override
     public void bindParameter(PreparedStatement statement, ParameterBinding binding) throws Exception {
 
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/Property.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/Property.java
deleted file mode 100644
index 133209e17..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/Property.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.reflect;
-
-/**
- * Defines bean property API used by Cayenne to access object data, do faulting and graph
- * maintenance tasks.
- * 
- * @since 1.2
- * @deprecated since 4.0 renamed to PropertyDescriptor.
- * 
- */
-public interface Property extends PropertyDescriptor {
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/resource/FilesystemResourceLocator.java b/cayenne-server/src/main/java/org/apache/cayenne/resource/FilesystemResourceLocator.java
deleted file mode 100644
index 295837a6c..000000000
--- a/cayenne-server/src/main/java/org/apache/cayenne/resource/FilesystemResourceLocator.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.resource;
-
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.ConfigurationException;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * A {@link ResourceLocator} that can locate resources in the filesystem. Instances of
- * {@link FilesystemResourceLocator} are explicitly created by the user and then bound to
- * a DI registry. E.g.:
- * 
- * <pre>
- * class MyModule implements Module {
- * 
- *     public void configure(Binder binder) {
- *        File dir1 = ...
- *        File dir2 = ...
- *        binder.bind(ResourceLocator.class).
- *           toInstance(new FilesystemResourceLocator(dir1, dir2);
- *     }
- * </pre>
- * 
- * @since 3.1
- * @deprecated since 4.1. This can be implemented as a custom strategy outside Cayenne. There's no need for this object
- * to be in Cayenne.
- */
-@Deprecated
-public class FilesystemResourceLocator implements ResourceLocator {
-
-    protected File[] roots;
-
-    /**
-     * Creates a new {@link FilesystemResourceLocator}, using an array of base locations
-     * ("roots"). If a location is a file, its parent directory is used for resolving. If
-     * location is a directory, it is used as is. If no locations are specified, current
-     * application directory is used as a single base.
-     */
-    public FilesystemResourceLocator(File... roots) {
-        init(roots);
-    }
-
-    /**
-     * Creates a new {@link FilesystemResourceLocator}, using a collection of base
-     * locations. If a location is a file, its parent directory is used for resolving. If
-     * location is a directory, it is used as is. If no locations are specified, current
-     * application directory is used as a single base.
-     */
-    public FilesystemResourceLocator(Collection<File> roots) {
-        if (roots == null) {
-            throw new NullPointerException("Null roots");
-        }
-
-        init(roots.toArray(new File[roots.size()]));
-    }
-
-    private void init(File[] roots) {
-
-        if (roots == null || roots.length == 0) {
-            roots = new File[] {
-                new File(System.getProperty("user.dir"))
-            };
-        }
-
-        this.roots = new File[roots.length];
-        for (int i = 0; i < roots.length; i++) {
-            File root = roots[i].isDirectory() ? roots[i] : roots[i].getParentFile();
-            if (root == null) {
-                throw new ConfigurationException("Invalid root: %s", roots[i]);
-            }
-
-            this.roots[i] = root;
-        }
-    }
-
-    public Collection<Resource> findResources(String name) {
-        Collection<Resource> resources = new ArrayList<>(3);
-
-        for (File root : roots) {
-
-            File resourceFile = new File(root, name);
-            if (resourceFile.exists()) {
-                try {
-                    resources.add(new URLResource(resourceFile.toURI().toURL()));
-                }
-                catch (MalformedURLException e) {
-                    throw new CayenneRuntimeException(
-                            "Can't convert file to URL: %s",
-                            e,
-                            resourceFile.getAbsolutePath());
-                }
-            }
-        }
-
-        return resources;
-    }
-}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslatorIT.java
deleted file mode 100644
index 2af52dbd9..000000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/DeleteBatchTranslatorIT.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.DeleteBatchQuery;
-import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
-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.Test;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.mock;
-
-@Deprecated
-@UseServerRuntime(CayenneProjects.LOCKING_PROJECT)
-public class DeleteBatchTranslatorIT extends ServerCase {
-
-    @Inject
-    private ServerRuntime runtime;
-
-    @Inject
-    private DbAdapter adapter;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    @Test
-    public void testConstructor() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(mock(DeleteBatchQuery.class), adapter, null);
-
-        assertSame(adapter, builder.adapter);
-    }
-
-    @Test
-    public void testCreateSqlString() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ?", generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithNulls() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"),
-                entity.getAttribute("NAME"));
-
-        Collection<String> nullAttributes = Collections.singleton("NAME");
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("DELETE FROM " + entity.getName() + " WHERE LOCKING_TEST_ID = ? AND NAME IS NULL", generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-            List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
-
-            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.<String> emptySet(), 1);
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-
-            assertNotNull(generatedSql);
-            assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart
-                    + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-
-    }
-
-    @Test
-    public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-
-            List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"),
-                    entity.getAttribute("NAME"));
-
-            Collection<String> nullAttributes = Collections.singleton("NAME");
-
-            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-
-            DeleteBatchTranslator builder = new DeleteBatchTranslator(deleteQuery, adapter, null);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-            assertNotNull(generatedSql);
-
-            assertEquals("DELETE FROM " + charStart + entity.getName() + charEnd + " WHERE " + charStart
-                    + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart + "NAME" + charEnd + " IS NULL",
-                    generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-    }
-}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslatorIT.java
deleted file mode 100644
index dad5bd467..000000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/InsertBatchTranslatorIT.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.InsertBatchQuery;
-import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
-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.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.mock;
-
-@Deprecated
-@UseServerRuntime(CayenneProjects.LOCKING_PROJECT)
-public class InsertBatchTranslatorIT extends ServerCase {
-
-    @Inject
-    private ServerRuntime runtime;
-
-    @Inject
-    private DbAdapter adapter;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    @Test
-    public void testConstructor() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-
-        InsertBatchTranslator builder = new InsertBatchTranslator(mock(InsertBatchQuery.class), adapter);
-
-        assertSame(adapter, builder.adapter);
-    }
-
-    @Test
-    public void testCreateSqlString() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
-        InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("INSERT INTO " + entity.getName() + " (DESCRIPTION, INT_COLUMN_NOTNULL, INT_COLUMN_NULL, LOCKING_TEST_ID, NAME) VALUES (?, ?, ?, ?, ?)",
-                generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-
-            InsertBatchQuery insertQuery = new InsertBatchQuery(entity, 1);
-            InsertBatchTranslator builder = new InsertBatchTranslator(insertQuery, adapter);
-            String generatedSql = builder.getSql();
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-            assertNotNull(generatedSql);
-            assertEquals("INSERT INTO " + charStart + entity.getName() + charEnd
-                    + " (" + charStart + "DESCRIPTION" + charEnd + ", "
-                    + charStart + "INT_COLUMN_NOTNULL" + charEnd + ", "
-                    + charStart + "INT_COLUMN_NULL" + charEnd + ", "
-                    + charStart + "LOCKING_TEST_ID" + charEnd + ", "
-                    + charStart + "NAME" + charEnd + ") VALUES (?, ?, ?, ?, ?)", generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-    }
-}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslatorIT.java
deleted file mode 100644
index 36efd4c82..000000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/SoftDeleteBatchTranslatorIT.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.PersistenceState;
-import org.apache.cayenne.access.DataNode;
-import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.exp.Expression;
-import org.apache.cayenne.exp.ExpressionFactory;
-import org.apache.cayenne.map.DbAttribute;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.DeleteBatchQuery;
-import org.apache.cayenne.query.ObjectSelect;
-import org.apache.cayenne.query.SQLTemplate;
-import org.apache.cayenne.test.parallel.ParallelTestContainer;
-import org.apache.cayenne.testdo.soft_delete.SoftDelete;
-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.Test;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-@Deprecated
-@UseServerRuntime(CayenneProjects.SOFT_DELETE_PROJECT)
-public class SoftDeleteBatchTranslatorIT extends ServerCase {
-
-    @Inject
-    private ObjectContext context;
-
-    @Inject
-    protected DbAdapter adapter;
-
-    @Inject
-    private DataNode dataNode;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query) {
-        JdbcAdapter adapter = objectFactory.newInstance(JdbcAdapter.class, JdbcAdapter.class.getName());
-        return createTranslator(query, adapter);
-    }
-
-    private DeleteBatchTranslator createTranslator(DeleteBatchQuery query, JdbcAdapter adapter) {
-        return (DeleteBatchTranslator) new SoftDeleteTranslatorFactory().translator(query, adapter, null);
-    }
-
-    @Test
-    public void testCreateSqlString() {
-        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-
-        List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID"));
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.emptySet(), 1);
-        DeleteBatchTranslator builder = createTranslator(deleteQuery);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ?", generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithNulls() {
-        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-
-        List<DbAttribute> idAttributes = Arrays.asList(entity.getAttribute("ID"), entity.getAttribute("NAME"));
-
-        Collection<String> nullAttributes = Collections.singleton("NAME");
-
-        DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, nullAttributes, 1);
-        DeleteBatchTranslator builder = createTranslator(deleteQuery);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("UPDATE " + entity.getName() + " SET DELETED = ? WHERE ID = ? AND NAME IS NULL", generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithIdentifiersQuote() {
-        DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-
-            List<DbAttribute> idAttributes = Collections.singletonList(entity.getAttribute("ID"));
-
-            DeleteBatchQuery deleteQuery = new DeleteBatchQuery(entity, idAttributes, Collections.emptySet(), 1);
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-            DeleteBatchTranslator builder = createTranslator(deleteQuery, adapter);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-
-            assertNotNull(generatedSql);
-            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DELETED" + charEnd
-                    + " = ? WHERE " + charStart + "ID" + charEnd + " = ?", generatedSql);
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-
-    }
-
-    @Test
-    public void testUpdate() throws Exception {
-
-        final DbEntity entity = context.getEntityResolver().getObjEntity(SoftDelete.class).getDbEntity();
-
-        BatchTranslatorFactory oldFactory = dataNode.getBatchTranslatorFactory();
-        try {
-            dataNode.setBatchTranslatorFactory(new SoftDeleteTranslatorFactory());
-
-            final SoftDelete test = context.newObject(SoftDelete.class);
-            test.setName("SoftDeleteBatchQueryBuilderTest");
-            context.commitChanges();
-
-            new ParallelTestContainer() {
-
-                @Override
-                protected void assertResult() {
-                    Expression exp = ExpressionFactory.matchExp("name", test.getName());
-                    assertEquals(1, ObjectSelect.query(SoftDelete.class, exp).selectCount(context));
-
-                    exp = ExpressionFactory.matchDbExp("DELETED", true);
-                    assertEquals(0, ObjectSelect.query(SoftDelete.class, exp).selectCount(context));
-                }
-            }.runTest(200);
-
-            context.deleteObjects(test);
-            assertEquals(test.getPersistenceState(), PersistenceState.DELETED);
-            context.commitChanges();
-
-            new ParallelTestContainer() {
-
-                @Override
-                protected void assertResult() {
-                    Expression exp = ExpressionFactory.matchExp("name", test.getName());
-                    assertEquals(0, ObjectSelect.query(SoftDelete.class, exp).selectCount(context));
-
-                    SQLTemplate template = new SQLTemplate(entity, "SELECT * FROM SOFT_DELETE");
-                    template.setFetchingDataRows(true);
-                    assertEquals(1, context.performQuery(template).size());
-                }
-            }.runTest(200);
-        } finally {
-            context.performQuery(new SQLTemplate(entity, "DELETE FROM SOFT_DELETE"));
-            dataNode.setBatchTranslatorFactory(oldFactory);
-        }
-    }
-
-}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslatorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslatorIT.java
deleted file mode 100644
index 1a10261f8..000000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/batch/legacy/UpdateBatchTranslatorIT.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.access.translator.batch.legacy;
-
-import org.apache.cayenne.configuration.server.ServerRuntime;
-import org.apache.cayenne.dba.DbAdapter;
-import org.apache.cayenne.dba.JdbcAdapter;
-import org.apache.cayenne.di.AdhocObjectFactory;
-import org.apache.cayenne.di.Inject;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.query.UpdateBatchQuery;
-import org.apache.cayenne.testdo.locking.SimpleLockingTestEntity;
-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.Test;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.mockito.Mockito.mock;
-
-@Deprecated
-@UseServerRuntime(CayenneProjects.LOCKING_PROJECT)
-public class UpdateBatchTranslatorIT extends ServerCase {
-
-    @Inject
-    private ServerRuntime runtime;
-
-    @Inject
-    private DbAdapter adapter;
-
-    @Inject
-    private UnitDbAdapter unitAdapter;
-
-    @Inject
-    private AdhocObjectFactory objectFactory;
-
-    @Test
-    public void testConstructor() throws Exception {
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        UpdateBatchTranslator builder = new UpdateBatchTranslator(mock(UpdateBatchQuery.class), adapter, null);
-        assertSame(adapter, builder.adapter);
-    }
-
-    @Test
-    public void testCreateSqlString() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        List idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
-        List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
-
-        UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
-                Collections.<String> emptySet(), 1);
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-        assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ?", generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithNulls() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-
-        List idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), entity.getAttribute("NAME"));
-
-        List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
-
-        Collection nullAttributes = Collections.singleton("NAME");
-
-        UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes, nullAttributes, 1);
-
-        DbAdapter adapter = objectFactory.newInstance(DbAdapter.class, JdbcAdapter.class.getName());
-        UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
-        String generatedSql = builder.getSql();
-        assertNotNull(generatedSql);
-
-        assertEquals("UPDATE " + entity.getName() + " SET DESCRIPTION = ? WHERE LOCKING_TEST_ID = ? AND NAME IS NULL",
-                generatedSql);
-    }
-
-    @Test
-    public void testCreateSqlStringWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-            List idAttributes = Collections.singletonList(entity.getAttribute("LOCKING_TEST_ID"));
-            List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
-
-            UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
-                    Collections.<String> emptySet(), 1);
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-
-            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
-            String generatedSql = builder.getSql();
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-
-            assertNotNull(generatedSql);
-            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DESCRIPTION"
-                    + charEnd + " = ? WHERE " + charStart + "LOCKING_TEST_ID" + charEnd + " = ?", generatedSql);
-
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-    }
-
-    @Test
-    public void testCreateSqlStringWithNullsWithIdentifiersQuote() throws Exception {
-        DbEntity entity = runtime.getDataDomain().getEntityResolver().getObjEntity(SimpleLockingTestEntity.class)
-                .getDbEntity();
-        try {
-
-            entity.getDataMap().setQuotingSQLIdentifiers(true);
-            List idAttributes = Arrays.asList(entity.getAttribute("LOCKING_TEST_ID"), entity.getAttribute("NAME"));
-
-            List updatedAttributes = Collections.singletonList(entity.getAttribute("DESCRIPTION"));
-
-            Collection nullAttributes = Collections.singleton("NAME");
-
-            UpdateBatchQuery updateQuery = new UpdateBatchQuery(entity, idAttributes, updatedAttributes,
-                    nullAttributes, 1);
-            JdbcAdapter adapter = (JdbcAdapter) this.adapter;
-
-            UpdateBatchTranslator builder = new UpdateBatchTranslator(updateQuery, adapter, null);
-            String generatedSql = builder.getSql();
-            assertNotNull(generatedSql);
-
-            String charStart = unitAdapter.getIdentifiersStartQuote();
-            String charEnd = unitAdapter.getIdentifiersEndQuote();
-            assertEquals("UPDATE " + charStart + entity.getName() + charEnd + " SET " + charStart + "DESCRIPTION"
-                    + charEnd + " = ? WHERE " + charStart + "LOCKING_TEST_ID" + charEnd + " = ? AND " + charStart
-                    + "NAME" + charEnd + " IS NULL", generatedSql);
-
-        } finally {
-            entity.getDataMap().setQuotingSQLIdentifiers(false);
-        }
-    }
-
-}
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/resource/FilesystemResourceLocatorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/resource/FilesystemResourceLocatorTest.java
deleted file mode 100644
index 93b1e325d..000000000
--- a/cayenne-server/src/test/java/org/apache/cayenne/resource/FilesystemResourceLocatorTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*****************************************************************
- *   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
- *
- *    https://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.resource;
-
-import org.apache.cayenne.test.file.FileUtil;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-@Deprecated
-public class FilesystemResourceLocatorTest {
-
-	@Test
-	public void testArrayConstructor() {
-		FilesystemResourceLocator l1 = new FilesystemResourceLocator();
-		assertEquals(1, l1.roots.length);
-		assertEquals(System.getProperty("user.dir"), l1.roots[0].getPath());
-
-		File base = FileUtil.baseTestDirectory();
-		File f1 = new File(base, "f1");
-		File f2 = new File(new File(base, "f2"), "f3");
-
-		FilesystemResourceLocator l2 = new FilesystemResourceLocator(f1, f2);
-		assertEquals(2, l2.roots.length);
-		assertEquals(base, l2.roots[0]);
-		assertEquals(new File(base, "f2"), l2.roots[1]);
-	}
-
-	@Test
-	public void testCollectionConstructor() {
-		FilesystemResourceLocator l1 = new FilesystemResourceLocator(Collections.<File> emptyList());
-		assertEquals(1, l1.roots.length);
-		assertEquals(System.getProperty("user.dir"), l1.roots[0].getPath());
-
-		File base = FileUtil.baseTestDirectory();
-		File f1 = new File(base, "f1");
-		File f2 = new File(new File(base, "f2"), "f3");
-
-		FilesystemResourceLocator l2 = new FilesystemResourceLocator(Arrays.asList(f1, f2));
-		assertEquals(2, l2.roots.length);
-		assertEquals(base, l2.roots[0]);
-		assertEquals(new File(base, "f2"), l2.roots[1]);
-	}
-
-	@Test
-	public void testFindResources() throws Exception {
-
-		File base = new File(FileUtil.baseTestDirectory(), getClass().getName());
-		File root1 = new File(base, "r1");
-		File root2 = new File(base, "r2");
-
-		root1.mkdirs();
-		root2.mkdirs();
-
-		FilesystemResourceLocator locator = new FilesystemResourceLocator(root1, root2);
-		Collection<Resource> resources1 = locator.findResources("x.txt");
-		assertNotNull(resources1);
-		assertEquals(0, resources1.size());
-
-		File f1 = new File(root1, "x.txt");
-		touch(f1);
-
-		Collection<Resource> resources2 = locator.findResources("x.txt");
-		assertNotNull(resources2);
-		assertEquals(1, resources2.size());
-		assertEquals(f1.toURI().toURL(), resources2.iterator().next().getURL());
-
-		File f2 = new File(root2, "x.txt");
-		touch(f2);
-
-		Collection<Resource> resources3 = locator.findResources("x.txt");
-		assertNotNull(resources3);
-		assertEquals(2, resources3.size());
-
-		Resource[] resources3a = resources3.toArray(new Resource[2]);
-		assertEquals(f1.toURI().toURL(), resources3a[0].getURL());
-		assertEquals(f2.toURI().toURL(), resources3a[1].getURL());
-	}
-
-	private void touch(File f) throws Exception {
-		try (FileOutputStream out = new FileOutputStream(f);) {
-			out.write('a');
-		}
-	}
-}