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