Мне часто нужно применять DAO для некоторых справочных данных, которые меняются не очень часто. Я иногда кеширую это в поле сбора данных на DAO - так, чтобы оно загружалось только один раз и явно обновлялось при необходимости.
Однако это приводит ко многим проблемам параллелизма - что делать, если другой поток пытается получить доступ к данным во время загрузки или обновления.
Очевидно, что это можно сделать, синхронизировав как получатели, так и установщики данных, но для большого веб-приложения это довольно непросто.
Я включил тривиальный некорректный пример того, что мне нужно как соломенный. Пожалуйста, предложите альтернативные способы реализации этого.
public class LocationDAOImpl implements LocationDAO {
private List<Location> locations = null;
public List<Location> getAllLocations() {
if(locations == null) {
loadAllLocations();
}
return locations;
}
Для получения дополнительной информации я использую Hibernate и Spring, но это требование будет применяться ко многим технологиям.
Некоторые дальнейшие мысли:
Разве это не должно быть обработано в коде вообще - вместо этого пусть ehcache или подобное обрабатывает это?
Есть ли общий шаблон для этого, который я пропускаю?
Очевидно, есть много способов, которыми это может быть достигнуто, но я никогда не находил шаблон, который был бы простым и обслуживаемым.
Заранее спасибо!