由于Infinispan不再维护官方的Cassandra Cache Store,我正在尝试制作自己的一个(对于Infinispan 7.1.1)。
我不确定我应该实现什么,因为我在文档中没有找到有关创建自定义缓存商店的任何内容。
这些是我所拥有的类(灵感来自最新版本的Infinispan-Cachestore-MongoDB-自从Infinispan 6.0.0:d以来,它也被弃用了:
public class CassandraCache<K, V> {
private Cluster cluster;
private Session session;
...
}
public class CassandraEntry<K, V>
public class CassandraStore<K, V> implements AdvancedLoadWriteStore<K, V> {
private InitializationContext context;
private CassandraCache<K, V> cache;
private CassandraStoreConfiguration configuration;
@Override
public void init(InitializationContext ctx) {
context = ctx;
configuration = ctx.getConfiguration();
try {
cache = new CassandraCache<K, V>(configuration);
} catch (Exception e) {
throw new PersistenceException(e);
}
}
...
}
public class CassandraStoreConfiguration extends AbstractStoreConfiguration {
private String hosts;
private String keyspace;
...
}
public class CassandraStoreConfigurationBuilder extends AbstractStoreConfigurationBuilder<CassandraStoreConfiguration, CassandraStoreConfigurationBuilder> {
private String hosts;
private String keyspace;
...
}
我试图像这样(在Scala中)设置它:
object Infinispan {
val m: EmbeddedCacheManager = new DefaultCacheManager(globalConfig, cacheConfig)
def globalConfig = {
new GlobalConfigurationBuilder()
.transport()
.defaultTransport()
.build()
}
def cacheConfig = {
new ConfigurationBuilder()
.persistence().addStore(classOf[CassandraStoreConfigurationBuilder])
.fetchPersistentState(true)
.preload(true)
.shared(true)
.hosts("localhost:9160")
.keyspace("mykeyspace")
.transaction()
.transactionMode(TransactionMode.TRANSACTIONAL)
.transactionManagerLookup(new GenericTransactionManagerLookup)
.autoCommit(false).transactionProtocol(TransactionProtocol.DEFAULT)
.lockingMode(LockingMode.PESSIMISTIC)
.build()
}
}
但是我有一个例外:
java.lang.ClassCastException: org.infinispan.persistence.cassandra.configuration.CassandraStoreConfiguration cannot be cast to org.infinispan.configuration.cache.CustomStoreConfiguration
所以我更改了cassandrastoreconfiguration,以扩展CustomStoreConfiguration和cassandrastoreconfigurationBuilder,以扩展CustomStorStoreConfigurationBuilder
现在我得到了这个例外:
java.lang.ClassCastException: org.infinispan.configuration.cache.CustomStoreConfiguration cannot be cast to org.infinispan.persistence.cassandra.configuration.CassandraStoreConfiguration
为什么要尝试将CustomStoreConfiguration施加到Cassandrastoreconfiguration?
是否有一个不错的指南来在某个地方创建自定义缓存商店?
我坚信,我们全新的Infinispan自定义高速缓存商店原型确实可以帮助您努力。
请检查一下:https://github.com/infinispan/infinispan-cachestore-archetype
readme文件包含了如何使用它的必要信息。
我只是缺少几个注释:
@BuiltBy(CassandraStoreConfigurationBuilder.class)
@ConfigurationFor(CassandraStore.class)
public class CassandraStoreConfiguration extends AbstractStoreConfiguration
@ConfiguredBy(CassandraStoreConfiguration.class)
public class CassandraStore<K, V> implements AdvancedLoadWriteStore<K, V>
添加了这些,一切都开始工作正常。