JCache API (JSR107、javax.cache) を使用して、Apache Ignite で分散キャッシュを構成したいと考えています。これは可能ですか?
私が見つけた例では、JCache API を使用してローカル キャッシュを作成するか、Apache Ignite API を使用して分散キャッシュ (またはデータグリッド) を作成しています。
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 のデフォルト モードであるため、明示的に指定する必要はありません。
アップデート。さらに、CachingProvider.getCacheManager(..)
メソッドはプロバイダー固有の URI を受け入れます。Ignite の場合、この URI は XML 構成ファイルを指す必要があります。そこでは、検出、通信、およびその他のパラメータを提供できます。
JCache 仕様は、グリッドを作成するための CacheManager を介した構成に関して、個々のキャッシュ プロバイダーに適用されるすべての構成を指定しているわけではないことに注意してください。CacheManager を作成するための要件は標準ですが、マネージャー自体の構成方法に関連するすべてではありません。
次のコードは、SpringBoot で Apache Ignite を使用してグリッドを作成する方法を示しています。
@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 - データ グリッドを参照してください。
お役に立てれば。