Ошибки, исключения и отладка

Карта раздела:

try {
    return repository.load(id);
} catch (SQLException error) {
    throw new StorageException("Cannot load record " + id, error);
}

Исключение переводится на границе слоя, но исходная причина сохраняется. Нельзя одновременно залогировать одну ошибку во всех слоях: это создаёт дубли без нового контекста.

Быстрая проверка

Когда ловить исключение? Когда здесь можно восстановиться, добавить контекст или перевести контракт.

Почему нельзя делать пустой catch? Система продолжает работу с потерянной причиной и, возможно, неверным состоянием.

Что закрывает несколько ресурсов в try-with-resources? В обратном порядке; дополнительные ошибки становятся suppressed.