我是Oracle Coherence的新手。我阅读了文档,并使用命令提示符完成了动手操作。我理解上没有问题。然后我用oracle coherence工具下载了eclipse。我为oracle一致性创建了应用程序客户端,如下所示 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"));
}
}
答案 0 :(得分:3)
如果coherence缓存驻留在JVM中(它不作为独立服务器运行),则在程序完成后(使用内存存储)将丢弃所有数据。尝试放入Thread.sleep(200000);到第一个程序的末尾,然后在超时内运行第二个实例。
答案 1 :(得分:1)
在命令提示符下,您已启动服务器(作为独立服务器),并且客户端已加入服务器。因此,即使将数据插入缓存的客户端离开服务器会话,缓存中的所有数据也将一直可用,直到服务器停止。 但在上面的例子中,coherence缓存驻留在JVM(Eclipse)本身而不是作为独立服务器。因此,当程序存在时,您将获得空值。
答案 2 :(得分:0)
当您运行第二个JVM时,请检查原始的一致性缓存服务器节点标准输出以查看您是否确实看到新成员加入集群(请检查MemberSet)。您可能只是运行两个完全没有意识到彼此的JVM;因此,CacheFactory.getCache(“myCache”)正在每个JVM中创建缓存。
解决这个问题的方法是使用cache-server.cmd启动一致性缓存服务器,然后使用分布式/分区或复制方案运行eclipse程序。这样,即使您的程序退出,实际数据也将存在于一致性缓存服务器中,以便第二个JVM在加入“相同群集”时进行检索。