2012-07-28 43 views
2

我是Oracle Coherence的新手。我阅读文档,并使用命令提示符完成实践。我没有理解的问题。然后我用oracle一致性工具下载了eclipse。我为下面给出的oracle一致性创建了应用程序客户端 http://docs.oracle.com/cd/E18686_01/coh.37/e18692/installjdev.htmOracle Coherence

我跑的是一样的。它在我的控制台应用程序中正常工作。然后,我创建了同一个工作区一个新的项目,创建一个主类访问指定的高速缓存,并把使用下面的代码检索一些值,

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")); 
    } 
} 

我retieved相同的值。然后我创建了另一个类尝试检索相同的值,但它返回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")); 
} 
} 

回答

3

如果一致性缓存驻留在JVM(它不跑了作为独立的服务器),那么所有的数据让你的程序结束后丢弃(使用内存存储)。尝试把Thread.sleep(200000);到第一个程序的末尾,然后在超时时间内运行第二个实例。

+0

谢谢Flavius。 – vvekselva 2012-08-23 07:57:01

1

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

0

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

解决方法是使用cache-server.cmd启动coherence缓存服务器,然后使用分布式/分区或复制方案运行eclipse程序。这样,即使您的程序退出,实际数据仍会存在于连贯性缓存服务器中,以便第二个JVM在连接“相同群集”时进行检索。