Как кэшировать информацию в 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 или подобное обрабатывает это? Есть ли общий шаблон для этого, который я пропускаю? Очевидно, что это может быть достигнуто многими способами, но я никогда не находил шаблон, который был бы простым и обслуживаемым.

Заранее спасибо!

Ответы на вопрос(6)

Ваш ответ на вопрос