Cómo establecer la limitación en el tamaño de la caché de EntityManager (JPA) L1 o L2
-
25-09-2019 - |
Pregunta
Cómo establecer la limitación del tamaño de la memoria caché L1 o L2. Me refiero a aumentar el tamaño del caché. Una forma es definir el tiempo de espera para el caché, pero quiero saber, ¿es posible hacer una restricción por el tamaño de la memoria caché o no?
RGDS Navid
Solución
Cómo establecer la limitación del tamaño del caché L1
No puedes. La única opción es clear
El contexto de persistencia manualmente a intervalos regulares si desea "controlar" (en realidad, clear
es muy agresivo, elimina Todas las entidades) su tamaño.
Cómo establecer la limitación del tamaño de caché L2
Esto depende del proveedor de caché subyacente. En otras palabras, esto se hace configurando la implementación de caché L2. Por ejemplo, Ehcache tiene un maxElementInMemory
parámetro.
¿Qué pasa en L1? ¿Cuántas entidades estarán en la memoria a medida que pase el tiempo? ¿Sin alguna restricción?!
Por mucho que lo pongas, hasta un eventual OutOfMemoryError
, de ahí la necesidad de clear
explícitamente:
- en trabajos de lotes grandes (incluso si ocurren en una sola transacción)
- Si una larga vida
EntityManager
se usa
Pero el patrón habitual es usar un de corta duración EntityManager
Y la mayoría de los casos de uso no son trabajos por lotes, por lo que esto no es una preocupación.
Ver también
- Libro de Wiki JPA