Estou usando ehcache (3.8.0) com Java (1.8.0_222) para armazenar valores na pilha que são recuperados de um banco de dados SQL. O problema que estou tendo é que os valores armazenados são listas de objetos, e esses objetos também contêm listas e, com o tempo, as referências nessas listas internas parecem estar se tornando nulas. Eu tentei recriá-lo em um programa menor sem sucesso, então acho que é algo idiota que esqueci, e não um problema com o ehcache.
O código que estou usando para configurar o cache é
final long cacheSize = 1L;
final MemoryUnit cacheUnits = MemoryUnit.GB;
ResourcePoolsBuilder resourcePools = ResourcePoolsBuilder
.newResourcePoolsBuilder()
.heap(cacheSize, cacheUnits);
CacheConfigurationBuilder<Key, List<MyInterface>> cacheConfigurationBuilder = CacheConfigurationBuilder
.newCacheConfigurationBuilder(Key.class, (Class<List<MyInterface>>)(Class<?>)List.class, resourcePools)
.withSizeOfMaxObjectGraph(Long.MAX_VALUE);
cacheManager = CacheManagerBuilder
.newCacheManagerBuilder()
.withCache(cachesName, cacheConfigurationBuilder)
.build();
cacheManager.init();
cache = cacheManager.createCache(cacheName, cacheConfigurationBuilder);
Resolveu o problema. Acontece que, se você usar a pilha, os objetos armazenados não são imutáveis. Então, o que estava acontecendo era que o programa estava pegando um objeto do cache, limpando alguns de seus campos quando terminava com ele e, quando mais tarde pegou o objeto, esses campos ainda estavam limpos.