Infinispan-创建自定义缓存商店



由于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>

添加了这些,一切都开始工作正常。

最新更新