Есть ли способ смешать в черты DoFn
, которые могут свободно определять свое собственное состояние и таймеры, не прибегая к макросам?
Для иллюстрации:
class Transform extends DoFn[I, O] with FeatureOne with FeatureTwo {
@ProcessElement
def processElement(@StateId ..., @TimerId ...): Unit {
doFeatureOne([feature one states and timers])
doFeatureTwo([feature two states and timers])
}
}
trait FeatureOne {
@DoFn.StateId(...)
val stateSpecOne: StateSpec[ValueState[One]] = ...
def doFeatureOne([feature one states and timers]): Unit = ...
}
trait FeatureTwo {
@DoFn.StateId(...)
val stateSpecTwo: StateSpec[ValueState[Two]] = ...
def doFeatureTwo([feature two states and timers]): Unit = ...
}
Похоже, что камнем преткновения этой попытки здесь является то, что processElement
необходимо знать состояние / таймеры FeatureOne
и FeatureTwo
. Невозможно поменять местами различные реализации FeatureOne
или FeatureTwo
.