Я пытаюсь написать механизм, который будет управлять моей операцией сохранения в БД.
Я отправляю серверу список объектов, он перебирает их и сохраняет каждый из них.
Теперь,если они терпят неудачу по какой-то странной причине (исключение), они сохраняют их в другом списке, который имеет таймер, который запускается каждые 5 секунд, и пытается их повторно сохранить.
У меня возникает проблема с блокировкой, которую я могу решить с помощью другого логического значения.
Моя функция, которая сохраняет потерянный объект:
private void saveLostDeals() {
synchronized (unsavedDeals) {
if (unsavedDeals.size() > 0) {
for (DealBean unsavedDeal : unsavedDeals) {
boolean successfullySaved = reportDeal(unsavedDeal,false);
if (successfullySaved) {
unsavedDeals.remove(unsavedDeal);
}
}
}
}
}
И мой reportDeal()
метод, который вызывается для регулярных отчетов и отчета о потерянных сделках:
try {
...
} catch (HibernateException e) {
...if (fallback)
synchronized (unsavedDeals) {
unsavedDeals.add(deal);
}
session.getTransaction().rollback();
} finally {
....
}
Теперь, когда потерянная сделка сохраняется - если возникает исключение - синхронизированный блок остановит его.
Что вы можете сказать об этом механизме сохранения?Есть ли лучшие шаблоны проектирования для решения этой распространенной проблемы?