Jak buforować informacje w DAO w sposób wątkowy

Często muszę implementować DAO dla niektórych danych referencyjnych, które nie zmieniają się zbyt często. Czasami buforuję to w polu kolekcji DAO - tak, że jest ładowane tylko raz i jawnie aktualizowane, gdy jest to wymagane.

Jednak powoduje to wiele problemów związanych z współbieżnością - co, jeśli inny wątek próbuje uzyskać dostęp do danych podczas ładowania lub aktualizacji.

Oczywiście można to zrobić poprzez zsynchronizowanie zarówno pobierających, jak i ustawiających dane - ale w przypadku dużych aplikacji internetowych jest to dość kosztowne.

Włączyłem trywialny przykład tego, czego potrzebuję jako słomianego człowieka. Proszę zaproponować alternatywne sposoby wdrożenia tego.

<code>public class LocationDAOImpl implements LocationDAO {

private List<Location> locations = null;

public List<Location> getAllLocations() {
    if(locations == null) {
        loadAllLocations();
    }
    return locations;
}
</code>

W celu uzyskania dalszych informacji korzystam z Hibernate i Spring, ale to wymaganie będzie miało zastosowanie w wielu technologiach.

Kilka dalszych myśli:

Czy w ogóle nie powinno to być obsługiwane w kodzie - zamiast tego pozwól, aby ehcache lub podobny dział obsługiwał? Czy istnieje wspólny wzór tego, czego mi brakuje? Oczywiście można to osiągnąć na wiele sposobów, ale nigdy nie znalazłem wzoru, który byłby prosty i możliwy do utrzymania.

Z góry dziękuję!

questionAnswers(6)

yourAnswerToTheQuestion