首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ehcache钥匙..。从StoreAccessException: NullPointerException: null值中恢复

Ehcache钥匙..。从StoreAccessException: NullPointerException: null值中恢复
EN

Stack Overflow用户
提问于 2017-03-17 11:10:22
回答 1查看 1.3K关注 0票数 0

我试图使用EHCache来缓存(远程)应用程序使用的图像文件。

我以以下方式初始化了缓存:

代码语言:javascript
复制
poolsBuilder = ResourcePoolsBuilder.newResourcePoolsBuilder()
         .heap(1024, MemoryUnit.MB)
         .disk(50, MemoryUnit.GB);

      configurationBuilder = CacheConfigurationBuilder
         .newCacheConfigurationBuilder(ImageFileKey.class, BufferedImage.class, poolsBuilder)
         .withValueSerializer(new BufferedImageSerializer())
      ;

      cacheManager = (PersistentCacheManager) CacheManagerBuilder.newCacheManagerBuilder()

         .with(new CacheManagerPersistenceConfiguration(TempDirectory))
         .withCache("BufferedImageCache", configurationBuilder)
         .build(true);

      cache = cacheManager
         .getCache("BufferedImageCache", ImageFileKey.class, BufferedImage.class);

ImageFileKey包含我使用的文件名和其他图像筛选信息。

显然,缓存正在工作,但在下面的方法中

代码语言:javascript
复制
public BufferedImage getImage(ImageFileKey imageFileKey) {
      BufferedImage ans = cache.get(imageFileKey);
      if( ans == null ) {
         try {
            ans = loadImage(imageFileKey.getImageFile(), imageFileKey.getImageFilter());
            cache.put(imageFileKey, ans);
         } catch (IOException e) {
            throw new RuntimeException(e);
         }

      }
      return ans;
   }

当我运行BufferedImage ans = cache.get(imageFileKey)并返回null时,我看到控制台上的错误打印:

代码语言:javascript
复制
org.ehcache.core.spi.store.StoreAccessException: java.lang.NullPointerException: null value
    at org.ehcache.impl.internal.store.heap.OnHeapStore.resolveFault(OnHeapStore.java:810) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at org.ehcache.impl.internal.store.heap.OnHeapStore.getOrComputeIfAbsent(OnHeapStore.java:733) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at org.ehcache.impl.internal.store.tiering.TieredStore.get(TieredStore.java:99) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at org.ehcache.core.Ehcache.get(Ehcache.java:169) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at com.cireca.overlaywidget.ehcache.BufferedImageCache.getImage(BufferedImageCache.java:99) [main/:na]
    at com.cireca.overlaywidget.ehcache.BufferedImageCache.getImage(BufferedImageCache.java:113) [main/:na]
    at com.cireca.overlaywidget.piccolo2d.PCachedImage.paint(PCachedImage.java:225) [main/:na]
...
Caused by: java.lang.NullPointerException: null value
    at org.ehcache.impl.internal.store.heap.holders.CopiedOnHeapValueHolder.<init>(CopiedOnHeapValueHolder.java:57) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at org.ehcache.impl.internal.store.heap.OnHeapStore.cloneValueHolder(OnHeapStore.java:1514) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at org.ehcache.impl.internal.store.heap.OnHeapStore.importValueFromLowerTier(OnHeapStore.java:1492) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]
    at org.ehcache.impl.internal.store.heap.OnHeapStore.resolveFault(OnHeapStore.java:763) ~[ehcache-3.3.0.jar:3.3.0 fa4b4a8afb003e55eb74a2da228cacbbd2038073]

我想知道,这是出于设计行为,还是我忘了提供像复印机这样的东西?

更新

看起来,这发生在代码的一部分,负责从内部组件故障机恢复缓存。不幸的是,我既不能推断哪些组件失败,也不能禁用这些打印。

例如,我不能将LoggingRobustResilienceStrategy替换为RobustResilienceStrategy

更新2

这个值本身不是null,我已经检查过了。Null出现在更深的地方。另外,请注意,当我从缓存中读取时,该消息会发生。还要注意,它不是一个例外,它是标准输出中的打印输出。如果我将null作为一个值,我将得到异常。

更新3

我后来的反转(尚未完成)表明,这个问题可能与层间的复制有关。此外,它还导致一些键永远不可能写入缓存(缓存在put之后似乎不立即包含它们)。如果禁用磁盘层,问题就会消失。

EN

回答 1

Stack Overflow用户

发布于 2017-03-22 15:42:21

基于Caused by: java.lang.NullPointerException: null value,看起来您试图在缓存中添加的值是null.?loadImage(imageFileKey.getImageFile(), imageFileKey.getImageFilter());能返回null吗?

这能修好吗?if (ans != null) cache.put(imageFileKey, ans);

还是你真的需要隐藏缺少的东西?如果是这样的话,我认为您必须使用一个专用的魔术值(除了null)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42855969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档