Astyanax/Cassandra InstantiationException при чтении столбца/списка столбцов (Scala)

Застрял на этом часами! Большое спасибо за любое понимание :)

  • Скала 2.9.2
  • Astyanax 1.0.6 (также пробовал 1.0.5)
  • Кассандра 1.1.4
  • Использование CompositeRowKey, CompositeColumnName
  • Нет проблем вставить в Cassandra
  • Может прочитать строку, ColumnList.size() возвращает правильное количество, однако любая попытка доступа к ColumnList (т.е. итерация, доступ к итерации ColumnList, getColumnByIndex(), getColumnByName() и т. д.) вызовет следующее исключение:

Исключение:

java.lang.RuntimeException: java.lang.InstantiationException

соответствующая трассировка стека:

java.lang.RuntimeException: java.lang.InstantiationException: shops.integration.db.scalaquery.ReportingDao$MetricsLogFileCompositeColumn
        at com.netflix.astyanax.serializers.AnnotatedCompositeSerializer.fromByteBuffer(AnnotatedCompositeSerializer.java:136)
        at com.netflix.astyanax.serializers.AbstractSerializer.fromBytes(AbstractSerializer.java:40)
        at com.netflix.astyanax.thrift.model.ThriftColumnOrSuperColumnListImpl.constructMap(ThriftColumnOrSuperColumnListImpl.java:201)
        at com.netflix.astyanax.thrift.model.ThriftColumnOrSuperColumnListImpl.getColumn(ThriftColumnOrSuperColumnListImpl.java:189)
        at com.netflix.astyanax.thrift.model.ThriftColumnOrSuperColumnListImpl.getColumnByName(ThriftColumnOrSuperColumnListImpl.java:103)

Конкретно:

at java.lang.Class.newInstance0(Class.java:357)
at java.lang.Class.newInstance(Class.java:325)
at com.netflix.astyanax.serializers.AnnotatedCompositeSerializer.createContents(AnnotatedCompositeSerializer.java:167)

Соответствующий пример кода:

class TestCompositeColumn(@(Component @field) var logFileId: Long, @(Component @field) var dt: String, @(Component @field) var dk: String) extends Ordered[TestCompositeColumn] {
    def this() = this(0l, "", "")
    //equals, hashCode, compare all implemented
}

Я также пробовал этот вариант в классе:

class TestCompositeColumn(idIn: Long, key1In: String, key2In: String) extends Ordered[TestCompositeColumn] {
    @Component(ordinal = 0) var id: Long = idIn
    @Component(ordinal = 1) var key1: String = key1In
    @Component(ordinal = 2) var key2: String = key2In

    def this() = this(0, null, null)
    //equals, hashCode, compare all implemented
}

val TEST_COLUMN_FAMILY = new ColumnFamily[TestRowKey, TestCompositeColumn](
    "test_column_family",
    new AnnotatedCompositeSerializer[TestRowKey](classOf[TestRowKey]),
    new AnnotatedCompositeSerializer[TestCompositeColumn](classOf[TestCompositeColumn]),
    BytesArraySerializer.get());

var columnList = keyspace.prepareQuery(TEST_COLUMN_FAMILY)
    .getKey(TestRowKey(1l, 2012090100))
    .execute().getResult()

    // OK - will return 6 for example, also verified via cassandra-cli
    println(columnList.size())         

    // ERROR - will throw exception above.  Iterating, or any type of access will also throw same exception
    println(columnList.getColumnByIndex(0).getStringValue())  

person user1661898    schedule 11.09.2012    source источник


Ответы (1)


Оказывается, TestCompositeColumn нельзя определить как внутренний класс.

person user1661898    schedule 16.09.2012