EN · DE · RU · FR · ES

#825: AddressImageCache.kt

projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressImageCache.kt @Component — Caché a nivel de aplicación, projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressImageCache.kt 102 líneas · 54 código · 38 comentarios · 10 en blanco
Caché en memoria que asigna IDs de direcciones a metadatos de AddressImageDO (excluyendo datos binarios de imagen). Proporciona una búsqueda rápida para saber si una dirección tiene una imagen y cuál es su tipo.

Arquitectura

AddressImageCache extiende AbstractCache, la clase base de ProjectForge para cachés actualizables. El framework llama a refresh() periódicamente o bajo demanda, sincronizado para evitar modificaciones concurrentes.

Modelo de datos

El caché almacena un Map<Long, AddressImageDO> donde cada valor es un AddressImageDO ligero que contiene solo:

Los datos binarios están excluidos — no se cargan los arreglos de bytes de preview ni de image. Esto mantiene el caché eficiente en memoria mientras sigue respondiendo instantáneamente a la pregunta "¿la dirección X tiene una imagen?".

Estrategia de actualización

refresh() se ejecuta dentro de un contexto de persistencia aislado de solo lectura (para límites de transacción limpios). Utiliza una consulta JPQL seleccionando addressId, lastUpdate e imageType como una proyección Tuple, reconstruyendo todo el mapa de forma atómica para evitar problemas de lectura concurrente.

Uso

getImage(addressId) es la única API pública. Llama a checkRefresh() (heredado de AbstractCache) para garantizar la frescura antes de buscar en el mapa. Un retorno nulo significa que no existe ninguna imagen para esa dirección.

Acceso singleton

El objeto complementario contiene un lateinit var instance establecido en @PostConstruct, permitiendo el acceso estático desde código que no puede usar inyección de Spring.

Historial de Git

868d6abb7 2025 -> 2026
63081666f Encabezados de archivos fuente: 2024 -> 2025.
943947aaa Direcciones: soporte de gif y jpeg
0ceceb28f Todas las actualizaciones de caché ahora se ejecutan en transacciones aisladas
5989b32fd BaseDao: mecanismo de onChangeLister refactorizado.
1b50060c3 BaseDao: renombrado: get -> find, save -> insert, getList -> select, load -> select