GridGain节点停止后为什么基于类的缓存条目消失了?

时间:2014-07-05 00:44:18

标签: caching gridgain jcache

Code:

public static class Oya {
    String name;

    public Oya(String name) {
        super();
        this.name = name;
    }

    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "Oya [name=" + name + "]";
    }

}

public static void main(String[] args) throws GridException {
    try (Grid grid = GridGain.start(
            System.getProperty("user.home") + "/gridgain-platform-os-6.1.9-nix/examples/config/example-cache.xml")) {
        GridCache<Integer, Oya> cache = grid.cache("partitioned");
        boolean success2 = cache.putxIfAbsent(3, new Oya("3"));
        log.info("Current 3 value = {}", cache.get(3));
        cache.transform(3, (it) -> new Oya(it.name + "-transformed"));
        log.info("Transformed 3 value = {}", cache.get(3));
    }
}
  1. 启动另一个GridGain节点。
  2. 运行代码。它应该打印:3-transformed
  3. 评论putxIfAbsent()代码。
  4. 运行代码。我希望它能打印出来:3-transformed但是null取而代之的是
  5. 如果我将缓存值更改为String(如GridGain Basic Operations video)或Java内置值,而不是我自己的自定义类,则代码将起作用。

1 个答案:

答案 0 :(得分:1)

数据网格的对等部署是一项仅限开发的功能。 SHARED模式的契约是每当具有原始类定义的最后一个节点离开时,所有类都将被取消部署。对于数据网格,它意味着将清除缓存。这对于更改类定义的情况很有用。

在CONTINUOUS模式下,缓存类永远不会被取消部署,但在这种情况下,必须注意不要在不重新启动网格节点的情况下更改类的定义。

有关详细信息,请参阅Deployment Modes文档。