java - Oracle Coherence 通读配置

标签 java caching oracle-coherence

我的 Coherence tangosol-coherence-override.xml 配置部分不起作用。 我可以启动服务器,放入和获取数据,但无法通过 CacheLoader 获取数据。

谢谢。

CacheLoader 的 stub

package com.example;

import com.tangosol.net.cache.AbstractCacheLoader;
import java.util.HashMap;

public class DataLoader extends AbstractCacheLoader {

    private HashMap<String, String> hashMap;

    public DataLoader() {
        hashMap = new HashMap<String, String>();
        init();
    }

    private void init()  {
        hashMap.put("A", "a");
        hashMap.put("B", "b");
        hashMap.put("C", "c");
        hashMap.put("D", "d");
        hashMap.put("E", "f");
        hashMap.put("F", "g");
    }


    public Object load(Object key) {
        return hashMap.get(key);
    }
}

tangosol-coherence-override.xml

<coherence>
    <cluster-config>
        <member-identity>
            <cluster-name>thecluster</cluster-name>
        </member-identity>

        <multicast-listener>
            <!--<address>224.3.6.0</address>-->
            <port>9100</port>
            <time-to-live>0</time-to-live>
        </multicast-listener>

        <caching-scheme-mapping>
            <cache-mapping>
                <cache-name>ABC</cache-name>
                <scheme-name>distributed-rxwbm</scheme-name>
            </cache-mapping>
        </caching-scheme-mapping>
    </cluster-config>

    <caching-schemes>
        <distributed-scheme>
            <scheme-name>distributed-rwbm</scheme-name>
            <backing-map-scheme>
                <read-write-backing-map-scheme>

                    <internal-cache-scheme>
                        <local-scheme/>
                    </internal-cache-scheme>

                    <cachestore-scheme>
                        <class-scheme>
                            <class-name>com.example.DataLoader</class-name>
                            <init-params>
                                <init-param>
                                    <param-type>java.lang.String</param-type>
                                    <param-value>{cache-name}</param-value>
                                </init-param>
                            </init-params>
                        </class-scheme>
                    </cachestore-scheme>
                </read-write-backing-map-scheme>
            </backing-map-scheme>
        </distributed-scheme>
    </caching-schemes>
</coherence>

启动服务器

package com.example;

import com.tangosol.net.DefaultCacheServer;
import com.tangosol.net.DefaultConfigurableCacheFactory;

public class HelloWorld {

    public static void main(String[] args) {

        DefaultConfigurableCacheFactory factory;
        factory = new DefaultConfigurableCacheFactory();

        DefaultCacheServer dcs = new DefaultCacheServer(factory);
        dcs.startAndMonitor(5000);
    }
}

读取数据

package com.example;

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

public class Reader {
    public static void main(String[] args) {
        CacheFactory.ensureCluster();
        NamedCache cache = CacheFactory.getCache("ABC");

        System.out.println("Value in cache is: " + cache.get("A"));
        System.out.println("Value in cache is: " + cache.get("B"));
        System.out.println("Value in cache is: " + cache.get("C"));
        System.out.println("Value in cache is: " + cache.get("D"));
    }
}

最佳答案

  1. 您的配置错误。您不能以这种方式合并操作配置和缓存配置(至少不是没有技巧)。您应该将其拆分为两个文件:tangosol-coherence-override.xmlcoherence-cache-config.xml,如下所示:

    tangosol-coherence-override.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
        xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config coherence-operational-config.xsd">
        <cluster-config>
            <member-identity>
                <cluster-name>thecluster</cluster-name>
            </member-identity>        
            <multicast-listener>
                <!--<address>224.3.6.0</address>-->
                <port>9100</port>
                <time-to-live>0</time-to-live>
            </multicast-listener>        
        </cluster-config>        
    </coherence>
    

    coherence-cache-config.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <cache-config
        xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
        <caching-scheme-mapping>
            <cache-mapping>
                <cache-name>ABC</cache-name>
                <scheme-name>distributed-rxwbm</scheme-name>
            </cache-mapping>
        </caching-scheme-mapping>
        <caching-schemes>
            <distributed-scheme>
                <scheme-name>distributed-rxwbm</scheme-name>
                <backing-map-scheme>
                    <read-write-backing-map-scheme>
                        <internal-cache-scheme>
                            <local-scheme/>
                        </internal-cache-scheme>
                        <cachestore-scheme>
                            <class-scheme>
                                <class-name>com.example.DataLoader</class-name>
                                <init-params>
                                    <init-param>
                                        <param-type>java.lang.String</param-type>
                                        <param-value>{cache-name}</param-value>
                                    </init-param>
                                </init-params>
                            </class-scheme>
                        </cachestore-scheme>
                    </read-write-backing-map-scheme>
                </backing-map-scheme>
                <autostart>true</autostart>
            </distributed-scheme>
        </caching-schemes>
    </cache-config>
    
  2. 您的 DataLoader 缺少接受 String 参数(用于缓存名称)的构造函数,
  3. 如果我明白您的意图,您应该考虑禁用 Reader 节点上的存储,即通过设置 tangosol.coherence.distributed.localstorage=false

关于java - Oracle Coherence 通读配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663168/

相关文章:

java - 如何从 ODATA 结果集中返回计数

browser - 使用浏览器返回退出后如何停止网页 View

java - Coherence 配置默认覆盖路径

ios - 有没有办法将 map 数据与iOS应用捆绑在一起?

Jquery 缓存变量

java - 连接到 Coherence 集群的方法

java - 作为 Jcache API 的 RI 的 coherance 和 ehcache 的主要优点/缺点

java - 接口(interface)返回类型

java - jdt.core Java 模型的 JUnit 测试

java - 如何解析 log4j2 JDBC Appender 的消息