1. Есть класс/метод Dao.update(Item item) которое апдейтит строчку в БД.
В силу ряда причин оно может выкинуть эксэпшн, т.е. ожидаемо.
2. Есть сервис MyService.update(List<Item> items), который должен сделать следующее:
— в цикле попытаться проапдейтить все items: dao.update(item)
— если апдейт какого-то item выкинул эксэпшн запомнить, но продолжать цикл до конца
— после окончания цикла сообщить вызывающему методу о всех накопленных ошибках
3. Есть верхний вызывающий класс/метод ParentService.flow(), который вызывает myService.update(items), затем анализирует результат и принимает решение что делать дальше.
То есть бывает ситуация что из 10 items 4 вызвали эксэпшн в dao.update() а 6 прошли нормально.
Логика в ParentService.flow() должна проанализировать и решить что делать дальше.
Внимание, вопрос!
Как лучше и красивее передать множественные ошибки из MyService.update(items) в вызывающий ParentService.flow() ?
Здравствуйте, Antei, Вы писали:
A>Привет, форум! A>Нужен совет
A>1. Есть класс/метод Dao.update(Item item) которое апдейтит строчку в БД. A>В силу ряда причин оно может выкинуть эксэпшн, т.е. ожидаемо.
A>2. Есть сервис MyService.update(List<Item> items), который должен сделать следующее: A>- в цикле попытаться проапдейтить все items: dao.update(item) A>- если апдейт какого-то item выкинул эксэпшн запомнить, но продолжать цикл до конца A>- после окончания цикла сообщить вызывающему методу о всех накопленных ошибках
A>3. Есть верхний вызывающий класс/метод ParentService.flow(), который вызывает myService.update(items), затем анализирует результат и принимает решение что делать дальше. A>То есть бывает ситуация что из 10 items 4 вызвали эксэпшн в dao.update() а 6 прошли нормально. A>Логика в ParentService.flow() должна проанализировать и решить что делать дальше.
A>Внимание, вопрос! A>Как лучше и красивее передать множественные ошибки из MyService.update(items) в вызывающий ParentService.flow() ?
A>Спасибо!
В exception передать error list или просто один error list
A>Как лучше и красивее передать множественные ошибки из MyService.update(items) в вызывающий ParentService.flow() ?
Заведи клас задания в котором будет список заданий на выполнение с состоянием задачи и доп информацией для анализа отказов.
Потом только его преобразуешь и всё. Убрать выполненные, не выполненные отметить для повторного выполнения и т.п.
Другой вариант потоки java streams, rxjava
Re: как лучше передать множественные Exceptions наверх
Ещё вариант — использовать Exception.addSuppressed. Т.е. первое исключение берём как есть, все последующие добавляем как supressed. Но всё же лучше для ясности свой класс исключения с отдельным списком.
Re[2]: как лучше передать множественные Exceptions наверх
Здравствуйте, vsb, Вы писали:
vsb>Ещё вариант — использовать Exception.addSuppressed. Т.е. первое исключение берём как есть, все последующие добавляем как supressed. Но всё же лучше для ясности свой класс исключения с отдельным списком.
Кстати, отличная оказалась идея, как я сам не сообразил!
Сорри, сразу плюсов не поставил, пароль потерял.
Re: как лучше передать множественные Exceptions наверх
Здравствуйте, Antei, Вы писали:
A>Внимание, вопрос! A>Как лучше и красивее передать множественные ошибки из MyService.update(items) в вызывающий ParentService.flow() ?
kov_serg дело говорит, возвращай список "заданий" со статусом и прочими необходимыми данными. Бросать исключение в данном случае не стоит.