EN · DE · RU · FR · ES

#825: AddressImageCache.kt

projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressImageCache.kt @Component — Cache au niveau application, projectforge-business/src/main/kotlin/org/projectforge/business/address/AddressImageCache.kt 102 lignes · 54 code · 38 commentaires · 10 vides
Cache en mémoire associant les identifiants d'adresse aux métadonnées AddressImageDO (à l'exclusion des données binaires de l'image). Fournit une recherche rapide pour savoir si une adresse possède une image et quel est son type.

Architecture

AddressImageCache étend AbstractCache, la classe de base de ProjectForge pour les caches actualisables. Le framework appelle refresh() périodiquement ou à la demande, synchronisé pour éviter les modifications concurrentes.

Modèle de données

Le cache stocke une Map<Long, AddressImageDO> où chaque valeur est un AddressImageDO léger contenant uniquement :

Les données binaires sont exclues — ni les tableaux d'octets preview ni image ne sont chargés. Cela maintient le cache économe en mémoire tout en répondant instantanément à la question « l'adresse X a-t-elle une image ? ».

Stratégie d'actualisation

refresh() s'exécute dans un contexte de persistance isolé en lecture seule (pour des limites de transaction propres). Il utilise une requête JPQL sélectionnant addressId, lastUpdate et imageType comme projection Tuple, reconstruisant l'intégralité de la carte de manière atomique pour éviter les problèmes de lecture concurrente.

Utilisation

getImage(addressId) est la seule API publique. Elle appelle checkRefresh() (hérité de AbstractCache) pour garantir la fraîcheur avant de consulter la carte. Un retour nul signifie qu'aucune image n'existe pour cette adresse.

Accès singleton

L'objet compagnon contient une lateinit var instance définie dans @PostConstruct, permettant un accès statique depuis du code ne pouvant pas utiliser l'injection Spring.

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
943947aaa Adresses : support du gif et du jpeg
0ceceb28f Toutes les actualisations de cache s'exécutent désormais dans des transactions isolées
5989b32fd BaseDao : mécanisme de onChangeListener refactorisé.
1b50060c3 BaseDao : renommé : get -> find, save -> insert, getList -> select, load -> select