В настоящее время я использую GridGain/Ignite в своем проекте и столкнулся с некоторыми проблемами:
Как вы, возможно, знаете, GridGain может хранить в кэше любой сериализуемый объект, например:
val mycache = ignite.getOrCreateCache[String,MyClass]("MyName")
Это означает, что мы можем определить наш класс и расширить его динамическим свойством - это нормально.
Если мы установим аннотацию Ignite (@QuerySqlField) в определенном поле класса, Ignite сможет использовать sql-запросы с вашими классами следующим образом:
val sql = select * from MyClass
mycache.query(new SqlFieldsQuers(sql))
А теперь мой вопрос: Как я могу установить Ignite-аннотации с динамическими полями в динамических классах в Scala? Я прикрепил определение своего динамического класса и надеюсь на помощь.
class DynamicType extends Dynamic with Serializable
{
private val fields = mutable.Map.empty[String,Any].withDefault{key=>throw new NoSuchFieldError(key)}
def selectDynamic(key: String) = fields(key)
def updateDynamic(key: String)(value: Any) = fields(key) = value
def applyDynamic(key: String)(args: Any*) = fields(key)
}