将元素序列化为自定义Hybris CacheRegion

时间:2017-01-09 13:06:47

标签: caching hybris

信息:使用Hybris 5.7

我正在尝试编写自定义CacheRegion以便将Redis用于此目的(而不是像Maps或EHCache这样提供的内存解决方案)。

按照提供的说明here似乎没有提出。

我被卡住的一点是序列化元素对象的时刻,因为我没有实现序列化,所以我无法将其序列化为json或字节数组或其他任何东西(尝试使用Jackson,Kryo,FST和java默认序列化程序)。

代码如下(跳过其他部分):

...
  @Override
  public Object getWithLoader(CacheKey cacheKey, CacheValueLoader cacheValueLoader) throws CacheValueLoadException {
    return Optional.ofNullable(get(cacheKey))
        .orElseGet(() -> {
          Object element = cacheValueLoader.load(cacheKey);

          //Can't get to serialize *element* to store it
          return element;
        });
  }
...

调试我发现Object元素实际上是 GenericBMPBean $ GenericItemEntityStateCacheUnit 的一个实例,它似乎包含很多东西(奇怪的是我找不到的实际数据除外)。 / p>

我还不了解的另一件事是EckCache实现似乎忽略了CacheKey.CacheUnitValueType的使用。即使它是 NON_SERIALIZABLE ,也会存储到EhCache中。

所以我的问题是:我应该如何设法序列化此类数据?

另外一个问题:标志 CacheUnitValueType 的所需用法是什么?

这背后的主要目标是将缓存与应用程序JVM分离,并提高HA和可伸缩性。

谢谢。

1 个答案:

答案 0 :(得分:0)

  

我遇到的问题是序列化元素对象的时刻,因为我无法对其进行序列化。

不应序列化在hybris中不实现Serializable的对象。你必须处理缓存的内容。

documentation

中说明了这一点
  

由于不具有可序列化的对象性质,因此无法在实体和类型系统区域中使用。