Cómo almacenar en caché la información en un DAO de una manera segura para subprocesos

A menudo necesito implementar DAO para algunos datos de referencia que no cambian muy a menudo. A veces guardo esto en el campo de recopilación en el DAO, de modo que solo se carga una vez y se actualiza explícitamente cuando es necesario.

Sin embargo, esto conlleva muchos problemas de concurrencia: ¿qué sucede si otra hebra intenta acceder a los datos mientras se está cargando o se está actualizando?

Obviamente, esto puede manejarse haciendo que tanto los captadores como los definidores de los datos estén sincronizados, pero para una aplicación web grande, esto es bastante costoso.

He incluido un ejemplo trivial defectuoso de lo que necesito como un hombre de paja. Por favor, sugiera formas alternativas para implementar esto.

<code>public class LocationDAOImpl implements LocationDAO {

private List<Location> locations = null;

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

Para más información, estoy usando Hibernate y Spring, pero este requisito se aplicaría a muchas tecnologías.

Algunos pensamientos adicionales:

¿No debería manejarse esto en el código? En lugar de eso, ehcache o similar lo manejan? ¿Hay un patrón común para esto que me estoy perdiendo? Obviamente, hay muchas formas de lograrlo, pero nunca he encontrado un patrón que sea simple y fácil de mantener.

¡Gracias por adelantado!

Respuestas a la pregunta(6)

Su respuesta a la pregunta