2012-03-21 4 views
1

У меня есть несколько кластеров Oracle Coherence, и в каждом кластере у меня одинаковый набор кэшей с одинаковыми именами кешей. Как я могу получить доступ к одному кешу (скажем, «Cache1») из каждого кластера в моем приложении? Например, я могу проверить счетчик «Cache1» во всех средах для отображения пользователю.Как получить доступ к кешу Coherence с тем же именем в нескольких кластерах?

Кластеры настроены с использованием Coherence Extend, и я настроил кеш-конфигурацию на стороне клиента с отдельными сопоставлениями кэш-памяти и схемами удаленного кэша для каждого кластера. Однако, если я установил элемент кеша «Cache1» для каждого кластера, он будет извлекать данные только из первого кластера, указанного в xml. Если я установил его на что-то еще (например, «Cache1-Dev1»), я получаю Tangosol.IO.Pof.PortableException с сообщением «Нет схемы для кеша:« 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, хотя вам нужно, по крайней мере, одно сопоставление кеша, содержащее имя кеша и имя схемы для обеспечения согласованности, даже если оно не используется.

+0

, где мы должны хранить эти xml-файлы ... Я не могу узнать, где это ожидалось, и как читать от них, я использую java-среду – Varun