Здравствуйте, tavr, Вы писали:
T>Здравствуйте, cudu, Вы писали:
C>>Допустим, есть некая последовательность выполнения методов
C>>Object Class.method1();
C>>Object Class.method2();
C>>Object Class.method3();
C>>Object Class.method4();
C>>Каждый из методов может возвращать набор достаточно "сырых" данных(файлы, collection) достаточно приличным объемом.
C>>Есть задача, если по каким либо причинам при выполнении одного из методов программа "упала", после запуска программы была возможность начать работу с упавшего метода.
C>>Кто нить красиво это решал в standalone приложениях без всяких haxa транзакций?
C>>самое просто решение это вести лог выполения и кэшировать на hdd полученные данные.
C>>После сбоя искать лог не завершенный и пытаться поднять кэш.
C>>Очевидные проблемы с невозможностью порой сериализовать "чужие" сущности и тд...вообщем давайте обсудим)
T>для этого вам придется сохранять в постоянное хранилище (файловая система, DB, ...) весь тот большой объем данных после вызова каждого метода.
T>Будет ли это оправдано в плане производительности? При небольшой вероятности сбоев может оказаться быстрее пересчитать заново несколько методов.
данные приходят от стороннего сервиса и на 1 get система может потратить час времени.
При условии, что мы не хотим разбираться: это сетевые проблемы, либо стороннего сервиса, требуется таки данные пока что кэшировать и после сбоя поднимать.
Самый простой метод использовать ehCache с кэширование на диск с валидным временем кэша , допустим 2 часа.
Но вдруг кто то красивеее решал? Проблема еще в том, что требуются сериализованные данные. Что иногда — довольно затратно по времени(я имею ввиду кодирование из за получения чужих сущностей несериализуемых)