【发布时间】:2015-07-16 11:37:53
【问题描述】:
由于 Infinispan 不再维护官方的 cassandra 缓存存储,我正在尝试自己制作一个(适用于 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 来扩展 CustomStoreConfigurationBuilder
现在我得到了这个异常:
java.lang.ClassCastException: org.infinispan.configuration.cache.CustomStoreConfiguration cannot be cast to org.infinispan.persistence.cassandra.configuration.CassandraStoreConfiguration
为什么它会尝试将 CustomStoreConfiguration 强制转换为 CassandraStoreConfiguration?
是否有在某处创建自定义缓存存储的体面指南?
【问题讨论】:
-
以我的拙见,您最好使用existing Cassandra store 并更新它。有plenty of cache store implementations in the main Infinispan repository 为您提供指导,并且保证是最新的。
标签: cassandra infinispan