2

我是 Oracle Coherence 的新手。我阅读了文档并使用命令提示符进行了动手操作。我在理解上没有问题。然后我用oracle coherence工具下载了eclipse。我为 oracle coherence 创建了应用程序客户端,如下所示 http://docs.oracle.com/cd/E18686_01/coh.37/e18692/installjdev.htm

我也是这样跑的。它工作正常,就像我在控制台应用程序中所做的那样。然后我在同一个工作区创建了一个新项目,创建了一个访问命名缓存的主类,使用下面的代码放置和检索了一些值,

package coherenceClient;

import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;

public class Main {
    public static void main(String[] args) {

        NamedCache cache = CacheFactory.getCache("myCache");

        cache.put("MyFirstCacheObject", "This is my first Cache Object");

        System.out.println(cache.get("MyFirstCacheObject"));
    }
}

我重新获得了相同的价值。然后我创建了另一个类,尝试检索相同的值,但它返回 null。代码中是否有任何错误?

package coherenceClient;

import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;

public class Recevier {
public static void main(String[] args) {

    NamedCache cache = CacheFactory.getCache("myCache");
    System.out.println(cache.get("MyFirstCacheObject"));
}
}
4

3 回答 3

3

如果一致性缓存驻留在 JVM 中(它不是作为独立服务器运行),那么在您的程序完成后所有数据都会被丢弃(您使用内存存储)。试着把 Thread.sleep(200000); 到第一个程序结束,然后在超时内运行第二个实例。

于 2012-08-22T14:37:05.520 回答
1

在命令提示符下,您已经启动了服务器(作为独立的)并且客户端已加入服务器。因此,缓存中的所有数据都将可用,直到服务器停止,即使将数据插入缓存的客户端离开服务器会话也是如此。
但在上述情况下,一致性缓存驻留在 JVM(Eclipse) 本身中,而不是作为独立服务器。因此,当程序存在时,您将获得空值。

于 2012-08-23T07:56:06.070 回答
0

当您运行第二个 JVM 时,检查原始一致性缓存服务器节点 stdout 以查看您是否真的看到新成员加入集群(检查 MemberSet)。您可能只是在运行两个完全不知道彼此的独立 JVM;因此 CacheFactory.getCache("myCache") 在每个 JVM 中创建缓存。

解决这个问题的方法是使用 cache-server.cmd 启动一致性缓存服务器,然后使用分布式/分区或复制方案运行 eclipse 程序。这样,即使您的程序退出,实际数据也会保存在一致性缓存服务器中,供第二个 JVM 在加入“同一集群”时检索。

于 2013-07-17T12:27:55.253 回答