我知道您可以使用Esper的語句對象模型使用CreateExpressionClause
和ExpressionDeclaration
創建全局表達式,但我不完全確定您如何能夠引用他們的別名在爲模式構建EPStatementObjectModel
時。例如,假設我有這樣一個規律:使用EPStatementObjectModel(Esper)引用事件過濾器中的命名全局表達式
every (a=Event(fizz = 3 and buzz = 5) -> b=Event(fizz = 3 and buzz = 5 and foo = 1 and bar = 2))
我想聲明fizz = 3 and buzz = 5
作爲一個全球性的表達,例如:
create expression fizzbuzz alias for {fizz = 3 and buzz = 5}
因此,EPL我能成功地簡化了模式的以下:
every (a=Event(fizzbuzz) -> b=Event(fizzbuzz and foo = 1 and bar = 2))
我似乎無法找到任何類的com.espertech.esper.client.soda
的方法中,我可以參照全球表達式別名爲我打造語句對象。轉換Statement對象EPL時會涉及Expressions.property(alias)
我能想到的最好的事情會給我一個有效的模式,但我得到以下錯誤,當我完整的語句對象添加到艾斯波引擎:
Failed to validate filter expression 'fizzbuzz': Property named 'fizzbuzz' is not valid in any stream [every (a=Event(fizzbuzz) -> b=Event(fizzbuzz and foo = 1 and bar = 2))]
注意a)全局表達式已經在這個時候聲明瞭,b)如果我把包含全局表達式的模式以EPL形式添加到Esper引擎,它就可以工作。
任何想法?雖然這是一個選項,但我寧願不要將EPStatementObjectModel
轉換爲EPL字符串,每次我在引擎中添加一個新模式。