Mi proyecto está en Spring 4.3.4, Hibernate 5.2.4 y Ehcache 3.3
Estoy buscando una solución con un JSR-107 (JCache) CacheManager singular para toda la aplicación para proporcionar:
La principal preocupación aquí es Hibernate. De hecho, se trata de establecer una plantilla predeterminada para sus regiones. Después de la revisión de muchos temas, no he descubierto una solución completamente adecuada.
Entonces, si existe, pido amablemente a los expertos que lo señalen. Una forma de configuración programática es muy apreciada (ehcache.xml no es deseado).
Agregado: (en respuesta a @Anthony Dahanne): Ya he visto la solución en el proyecto que está señalando antes de publicar este tema. Más aún, este proyecto fue el punto de partida de mi investigación hace una semana.
Pero esa solución implica la declaración explícita de varias regiones de caché con nombre no solo para Spring, sino incluso para Hibernate, como podemos encontrar en el método CacheConfiguration#createCacheConfigurations .
Esto es inconveniente en un proyecto real que contiene 100500 Entidades diferentes, NaturalKeys, etc., que son administrados por Hibernate, porque para todos ellos debería crear regiones apropiadas sobre la marcha. Distingo el poder principal de RegionFactory de Hibernate como una habilidad para hacer este trabajo mágico automáticamente. Pero, ¿qué vemos en el proyecto señalado en la clase JCacheRegionFactory personalizada ? La prohibición directa para que genere nuevas regiones, que se implementa mediante una excepción incondicional que se lanzará en cualquier intento de hacerlo (incluso se indica con "... pero se asegura de que todos los cachés ya existan para evitar creación de cachés mal configurados..." comentario).
La solución ideal debe poder configurar una única "plantilla predeterminada" (en el nivel de CacheManager) tal como funciona en el caso de encache.xml (...jcache:defaults default-template="myDefaultTemplate...), . ..pero sin xml.
Hay un ejemplo de demostración de JHipster fullstack en ehcache3-samples github repo
Este ejemplo se basa en que Spring Boot configura mediante programación un caché ehcache3 , exponiéndolo como un JSR-107 CacheManager
Este caché se usa junto con Hibernate y también de forma independiente .
Nunca queremos la configuración predeterminada (también conocida como new MutableConfiguration ). Sin embargo, es aceptable establecer un valor predeterminado significativo. De hecho, en su caso, usaría un JCacheRegionFactory personalizado.
Ver este artículo al respecto.