Когда пытался в ExecutorDAO.update добавить код
if (SystemExecutors.PROCESS_STARTER_NAME.equals(oldExecutor.getName())) {
throw new AuthorizationException(oldExecutor.getName() + " can not be updated");
}
, то с удивлением обнаружил что объект из кеша совпадает с пришедшим аргументом (в аттаче).
Т.е. T oldExecutor = (T) getExecutor(newExecutor.getId()); не имеет смысла
и действительно зависимый от него код дальше не отрабатывает, в т.ч.:
вместо понятной ExecutorAlreadyExistsException получаем ORA-00001: нарушено ограничение уникальности (RUNAWFE.SYS_C0012384) при попытке переименовать в исполнителя с существующим логином (в аттаче)
можно завести пользователей с одинаковыми кодами
Может быть раньше объекты проходили через сериалтизацию/десериализацию и были соответственно разными объектами, а сейчас через уровень делегатов отдаётся тот же объект, что вернул кеш
Сделал клонирование в кеше исполнителей.
Проверил одинаковые коды при создании и изменении пользователей.
В версии 4.2.1, это было разрешено.
В текущей версии - запрещено.