как лучше передать множественные Exceptions наверх
От: Antei США  
Дата: 23.01.18 03:49
Оценка:
Привет, форум!
Нужен совет

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() ?

Спасибо!
Отредактировано 23.01.2018 3:53 Antei . Предыдущая версия .
Re: как лучше передать множественные Exceptions наверх
От: Qulac Россия  
Дата: 23.01.18 08:41
Оценка: +2
Здравствуйте, 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
Программа – это мысли спрессованные в код
Отредактировано 23.01.2018 8:48 Qulac . Предыдущая версия .
Re: как лучше передать множественные Exceptions наверх
От: kov_serg Россия  
Дата: 23.01.18 09:40
Оценка: 9 (1) +1
Здравствуйте, Antei, Вы писали:


A>Как лучше и красивее передать множественные ошибки из MyService.update(items) в вызывающий ParentService.flow() ?

Заведи клас задания в котором будет список заданий на выполнение с состоянием задачи и доп информацией для анализа отказов.
Потом только его преобразуешь и всё. Убрать выполненные, не выполненные отметить для повторного выполнения и т.п.
Другой вариант потоки java streams, rxjava
Re: как лучше передать множественные Exceptions наверх
От: vsb Казахстан  
Дата: 04.02.18 20:40
Оценка: 24 (2)
Ещё вариант — использовать Exception.addSuppressed. Т.е. первое исключение берём как есть, все последующие добавляем как supressed. Но всё же лучше для ясности свой класс исключения с отдельным списком.
Re[2]: как лучше передать множественные Exceptions наверх
От: Antei США  
Дата: 24.11.18 03:38
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Ещё вариант — использовать Exception.addSuppressed. Т.е. первое исключение берём как есть, все последующие добавляем как supressed. Но всё же лучше для ясности свой класс исключения с отдельным списком.

Кстати, отличная оказалась идея, как я сам не сообразил!
Сорри, сразу плюсов не поставил, пароль потерял.
Re: как лучше передать множественные Exceptions наверх
От: GarryIV  
Дата: 25.11.18 11:48
Оценка: +1
Здравствуйте, Antei, Вы писали:

A>Внимание, вопрос!

A>Как лучше и красивее передать множественные ошибки из MyService.update(items) в вызывающий ParentService.flow() ?

kov_serg дело говорит, возвращай список "заданий" со статусом и прочими необходимыми данными. Бросать исключение в данном случае не стоит.
WBR, Igor Evgrafov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.