0
カスタムCacheStore実装を使用するクライアント/サーバーテストがあります。クライアントノードではなくサーバーノード上にカスタムCacheStoreが必要ですが、Igniteはカスタム実装をクライアントにロードしようとしています。これを避ける方法はありますか?クライアントにはサーバー上で構成されたカスタムCacheStoreが必要です
Serverコード:
IgniteConfiguration igniteCfg = new IgniteConfiguration();
Ignite ignite = Ignition.start(igniteCfg);
CacheConfiguration<String, String> cacheCfg = new CacheConfiguration<>("test");
cacheCfg.setReadThrough(true);
cacheCfg.setCacheStoreFactory(new CacheStoreFactory());
IgniteCache<String, String> cache = ignite.getOrCreateCache(cacheCfg);
のCacheStore:
public class CacheStoreFactory implements Factory<CacheStore<? super String, ? super String>> {
@Override
public CacheStore<? super String, ? super String> create() {
return new CacheStoreAdapter<String, String>() {
@Override
public String load(String key) throws CacheLoaderException {
System.out.println("load: key=" + key);
return key;
}
@Override
public void write(Entry<? extends String, ? extends String> entry) throws CacheWriterException {
}
@Override
public void delete(Object key) throws CacheWriterException {
}
};
}
}
クライアント:
IgniteConfiguration igniteCfg = new IgniteConfiguration();
igniteCfg.setClientMode(true);
Ignite ignite = Ignition.start(igniteCfg);
CacheConfiguration<String, String> cacheCfg = new CacheConfiguration<>("test");
IgniteCache<String, String> cache = ignite.getOrCreateCache(cacheCfg);
String value = cache.get("someKey");
のCacheStoreがサーバー上で正しく呼び出され、クライアントが動作しているように見えますが、クライアントはこのエラーを記録します:
Caused by: java.lang.ClassNotFoundException: org.dalsing.ignite.server.test.CacheStoreFactory
私は例外が何か間違った、通常は致命的であることを示しているので、例外を無視するのは大好きではありません。おそらく警告ではありますが、例外ではありません。例外を回避する方法はありませんか?また、キャッシュをトランザクションにしたい場合、クライアントにはCacheStoreが必要です。クライアントがマイクロサービスで動作していた場合はどうなりますか? CacheStoreはクライアント上で呼び出されますか?私はそれを望んでいないだろう。 –
実際にはクライアント上ではなく、トランザクションを実行するノード(サーバーまたはクライアントのいずれか)に必要です。トランザクションの一貫性を保証するには、キャッシュトランザクションとストアトランザクションをペアにする必要があるため、すべての更新を同じノードから取得する必要があります。つまり、原子キャッシュで実行されているように、主ノード(常にサーバー)からストアを更新することはできません。 –