2016-01-26 7 views
0

Я хотел бы настроить распределенный кеш с помощью Apache Ignite с помощью JCache API (JSR107, javax.cache). Это возможно?Могу ли я использовать JCache API для распределенных кешей в Apache Ignite?

В примерах я нашел либо создание локального кеша с API JCache, либо создание распределенного кеша (или datagrid) с использованием API Apache Ignite.

ответ

2

JCache позволяет предоставлять конфигурацию конкретного поставщика при создании кеша. Т.е., Вы можете сделать это:

// Get or create a cache manager. 
CacheManager cacheMgr = Caching.getCachingProvider().getCacheManager(); 

// This is an Ignite configuration object (org.apache.ignite.configuration.CacheConfiguration). 
CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>(); 

// Specify cache mode and/or any other Ignite-specific configuration properties. 
cfg.setCacheMode(CacheMode.PARTITIONED); 

// Create a cache based on configuration create above. 
Cache<Integer, String> cache = cacheMgr.createCache("a", cfg); 

отметить также, что разделенная режим фактически по умолчанию один в Ignite, так что вы не обязаны указывать его в явном виде.

UPD. Кроме того, метод CachingProvider.getCacheManager(..) принимает специфический для провайдера URI, который в случае Ignite должен указывать на файл конфигурации XML. Там могут быть обнаружены обнаружение, связь и другие параметры.

+0

Я знаю, что вы можете использовать конфигурацию, зависящую от Ignite, при создании кеша через JCache, но я не вижу, как вы можете настроить соответствующие материалы, такие как сетка и SPI обнаружения. Короче говоря, мне не удалось создать кеш JCache, который существует в нескольких узлах. – PeakCode

+0

@PeakCode Получил это. Я обновил свой ответ. –

0

Обратите внимание, что в спецификации JCache не указаны все конфигурации, которые применяются к отдельным поставщикам кэша, с точки зрения настройки через CacheManager для создания Grid. Требование создания CacheManager является стандартным, но не все, что связано с настройкой самого менеджера.

После кода будет показано, как создать сетку с помощью Apache Воспламенение в SpringBoot

@Bean 
@SuppressWarnings("unchecked") 
public org.apache.ignite.cache.spring.SpringCacheManager cacheManager() { 
    IgniteConfiguration igniteConfiguration = new IgniteConfiguration(); 
    igniteConfiguration.setGridName("petclinic-ignite-grid"); 
    //igniteConfiguration.setClassLoader(dynamicClassLoaderWrapper()); 

    igniteConfiguration.setCacheConfiguration(this.createDefaultCache("petclinic"), 
      this.createDefaultCache("org.hibernate.cache.spi.UpdateTimestampsCache"), 
      this.createDefaultCache("org.hibernate.cache.internal.StandardQueryCache")); 

    SpringCacheManager springCacheManager = new SpringCacheManager(); 
    springCacheManager.setConfiguration(igniteConfiguration); 
    springCacheManager.setDynamicCacheConfiguration(this.createDefaultCache(null)); 
    return springCacheManager; 
} 

private org.apache.ignite.configuration.CacheConfiguration createDefaultCache(String name) { 

    org.apache.ignite.configuration.CacheConfiguration cacheConfiguration = new org.apache.ignite.configuration.CacheConfiguration(); 
    cacheConfiguration.setName(name); 
    cacheConfiguration.setCacheMode(CacheMode.PARTITIONED); 
    cacheConfiguration.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL); 
    cacheConfiguration.setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC); 
    cacheConfiguration.setStatisticsEnabled(true); 
    cacheConfiguration.setEvictSynchronized(true); 
    return cacheConfiguration; 
} 
} 

Если бы мы должны были создать еще один экземпляр этой службы и иметь его зарегистрировать в той же сетке, как igniteConfiguration.setGridName ("petclinic -ignite-grid "), будет создан IMDG. Обратите внимание, что 2 экземпляра службы с этой версией разделенного, встроенного распределенного кеша должны иметь возможность разговаривать друг с другом через необходимые ПОРТЫ. Пожалуйста, обратитесь к Apache Ignite - Data Grid за более подробной информацией.

Надеюсь, это поможет.