2012-03-21 60 views
1

我有几个Oracle Coherence集群,并且在每个集群上都拥有相同缓存名称的同一组缓存。如何从应用程序中的每个集群访问单个缓存(称为“Cache1”)?例如,我可能想要检查所有环境中“Cache1”的计数以显示给用户。如何跨多个群集访问具有相同名称的Coherence缓存?

使用Coherence Extend设置群集,我为每个群集设置了单独的缓存映射和远程缓存配置的客户端缓存配置。但是,如果为每个群集将cache-name元素设置为“Cache1”,则它只会从xml中列出的第一个群集中检索数据。如果将其设置为其他内容(例如“Cache1-Dev1”),则会收到一条Tangosol.IO.Pof.PortableException异常,并显示'No scheme for cache:'Cache1-Dev1''。

<cache-config xmlns="http://schemas.tangosol.com/cache"> 
    <caching-scheme-mapping> 
    <cache-mapping> 
     <cache-name>Cache1-Dev1</cache-name> 
     <scheme-name>extend-direct-dev1</scheme-name> 
    </cache-mapping> 
    <cache-mapping> 
     <cache-name>Cache1-Dev2</cache-name> 
     <scheme-name>extend-direct-dev2</scheme-name> 
    </cache-mapping> 
    </cache-scheme-mapping> 
<caching-schemes> 
<remote-cache-scheme> 
    <scheme-name>extend-direct-dev1</scheme-name> 
    <service-name>ExtendTcpCacheService-dev1</service-name> 
    <initiator-config> 
    <tcp-initiator> 
     <remote-addresses> 
     <socket-address> 
      <address>dev1-address</address> 
      <port>9500</port> 
     </socket-address> 
     </remote-addresses> 
    </tcp-initiator> 
    <outgoing-message-handler> 
     <request-timeout>60s</request-timeout> 
    </outgoing-message-handler> 
    </initiator-config> 
</remote-cache-scheme> 
<remote-cache-scheme> 
    <scheme-name>extend-direct-dev2</scheme-name> 
    <service-name>ExtendTcpCacheService-dev2</service-name> 
    <initiator-config> 
    <tcp-initiator> 
     <remote-addresses> 
     <socket-address> 
      <address>dev2-address</address> 
      <port>9500</port> 
     </socket-address> 
     </remote-addresses> 
    </tcp-initiator> 
    <outgoing-message-handler> 
     <request-timeout>60s</request-timeout> 
    </outgoing-message-handler> 
    </initiator-config> 
</remote-cache-scheme> 
</cache-config> 

回答

3

在别处找到答案。

首先,获取代理服务实例,并将其转换为CacheService。 然后,您应该能够从该服务实例获取缓存。

Java实现:

Service service = CacheFactory.getService("ExtendTcpCacheService-dev1"); 
CacheService cacheService = (CacheService) service; 
NamedCache cache = cacheService.ensureCache("Cache1"); 

的代码是C#几乎相同:

var service = CacheFactory.GetService("ExtendTcpCacheService-dev1"); 
var cacheService = (ICacheService)service; 
var cache = cacheService.EnsureCache("Cache1"); 

这也意味着你不再需要列出缓存在你的cache缓存映射部分config xml文件,尽管至少需要一个包含cache-name和scheme-name的缓存映射才能运行,即使它没有被使用。

+0

我们在哪里需要保留这些XML文件...我无法知道那里预期的位置以及如何从它们读取,我使用Java环境 – Varun 2013-06-04 07:10:21

相关问题