Tenemos una aplicación de middleware Java (J2SE) de alto rendimiento donde la latencia es de suma importancia. Utiliza algunos datos permanentes almacenados en una base de datos heredada, donde una aplicación heredada puede ocasionalmente modificar los datos. Debido al requisito de latencia, estamos planeando almacenar en caché los datos permanentes, utilizando JPA con Hibernate y tal vez un proveedor de caché como Ehcache.Actualización del caché de fondo JPA
Sin embargo, cuando los datos permanentes se actualizan (por la aplicación heredada) necesitamos ser notificados de esto tan pronto como sea posible. Estaba pensando en establecer un vencimiento en la memoria caché, pero luego la memoria caché no se actualizará hasta que la aplicación solicite la siguiente solicitud de datos; en ese momento, la latencia se verá afectada debido a que la base de datos volverá a leerse.
Lo ideal es que necesitemos que el caché devuelva un valor obsoleto, y en el fondo el caché se actualiza/actualiza con el último valor de la base de datos a intervalos regulares.
¿Es esto posible con Ehcache? He visto SelfPopulatingCache y CacheLoader, pero parece que estoy haciendo un montón de trabajo (tendré que escribir el código a mano para cada entidad). Además, ¿alguien tiene un ejemplo de implementación de CacheLoader? Esperaba una opción de actualización asíncrona en Query Cache.
¿Existen otras tecnologías que puedan ofrecer una solución? No estamos obligados por el proveedor de JPA o el proveedor de caché.
¿Podría Spring @Cacheable proporcionar una solución? He visto spring ehcache cachable menciona self-populating-cache-scope, pero no está claro para mí lo que esto significa.
Gracias de antemano.
¿Cuáles son las opciones de integración disponibles en la aplicación heredada? – Santosh