Как создать собственный CacheStore с Ignite для хранения значения в двоичном режиме (setStoreKeepBinary (true)) - PullRequest
0 голосов
/ 06 августа 2020

Я хотел бы создать свой собственный CacheStore с помощью Slick для хранения значения данных в BinaryMode в Postgres DB. Я прочитал do c, относящийся к Binary Marshaller на веб-сайте Ignite. Меня вдохновил приведенный здесь код https://github.com/gastonlucero/ignite-persistence/blob/master/src/main/scala/test/db/CachePostgresSlickStore.scala

Итак, я создал этот код:

val myCacheCfg = new CacheConfiguration[String, MySpecialCustomObject]("MYCACHE")
myCacheCfg.setStoreKeepBinary(true)
myCacheCfg.setCacheStoreFactory(FactoryBuilder.factoryOf(classOf[myCacheSlickStore]))
myCacheCfg.setBackups(1)
myCacheCfg.setCacheMode(CacheMode.LOCAL)
myCacheCfg.setReadThrough(true)
myCacheCfg.setWriteThrough(true)

.......

class myCacheSlickStore extends CacheStoreAdapter[String, MySpecialCustomObject] with PostgresSlickConnection with Serializable {.....}

......

trait PostgresSlickConnection extends PostgresSlickParameters {

  val tableName: String
}

Но у меня такая ошибка: "несоответствие типов ; " для строки, относящейся к setCacheStoreFactory

Есть ли у вас какая-нибудь идея или пример для создания собственного CacheStore с setStoreKeepBinary (true)?

Here a complete example to illustrate :

final case class myObject(
  parameters_1: Map[String, Set[String]],
  parameters_2: Map[String, Set[String]]
)

class CacheSlickStore extends CacheStoreAdapter[String, BinaryObject] {}


val JdbcPersistence =
      "myJdbcPersistence" 
val cacheCfg =
      new CacheConfiguration[String, myObject](JdbcPersistence)
cacheCfg.setStoreKeepBinary(true) 
cacheCfg.setCacheStoreFactory(
      FactoryBuilder.factoryOf(classOf[CacheSlickStore])
)
cacheCfg.setBackups(1)
cacheCfg.setCacheMode(CacheMode.LOCAL)
cacheCfg.setReadThrough(true)
cacheCfg.setWriteThrough(true)

var cache: IgniteCache[String, myObject] = _

val config = new IgniteConfiguration()

ignition = Ignition.getOrStart(config)

cache = ignition.getOrCreateCache[String, myObject](JdbcPersistence)
ignition.addCacheConfiguration(cacheCfg)

Если я использую CacheConfiguration, он компилируется, но не запускается.

1 Ответ

0 голосов
/ 25 августа 2020

Наконец, решение состоит в том, чтобы преобразовать scala в Any, а не в BinaryObject. Вы можете найти решение здесь Проект Github

...