
Я использую ehcache (3.8.0) с Java (1.8.0_222) для хранения значений в куче, которые извлекаются из базы данных SQL. Проблема, с которой я столкнулся, заключается в том, что хранимые значения представляют собой списки объектов, и эти объекты также содержат списки, и со временем ссылки в этих самых внутренних списках, похоже, становятся нулевыми. Я пытался воссоздать это в меньшей программе, но безуспешно, поэтому предполагаю, что это какая-то глупость, которую я упустил из виду, а не проблема с ehcache.
Код, который я использую для настройки кэша, следующий:
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);
решение1
Решил проблему. Оказалось, что если использовать кучу, то хранимые объекты не являются неизменяемыми. Так что происходило следующее: программа извлекала объект из кэша, очищала некоторые его поля, когда заканчивала с ним работать, а затем, когда она позже извлекала объект, эти поля все еще были очищены.