【问题标题】:Oracle Coherence甲骨文一致性
【发布时间】:2012-07-27 02:45:49
【问题描述】:

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

【问题讨论】:

    标签: oracle-coherence


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-05
          • 2011-07-19
          • 2014-09-11
          • 2011-06-15
          相关资源
          最近更新 更多