Esper - 在模式中的过滤器表达式中使用用户定义的函数

时间:2015-11-06 14:23:56

标签: java filter esper complex-event-processing

我不明白为什么我无法做到这一点:

select * from pattern [every A = EventA -> EventB(myFunction(A.property))]

来自Esper文档:“所有表达式都可以在过滤器中使用,包括返回布尔值的静态方法调用”。

如果我不尝试引用第一个匹配事件(EventA)中的属性,而只是尝试将属性从EventB传递给myFunction,它可以正常工作。

我得到的错误是:

com.espertech.esper.client.EPException: java.lang.ArrayIndexOutOfBoundsException: 1
at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:464)
at com.espertech.esper.core.service.EPRuntimeImpl.processEvent(EPRuntimeImpl.java:437)
at com.espertech.esper.core.service.EPRuntimeImpl.sendEvent(EPRuntimeImpl.java:196)
.................
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at com.espertech.esper.epl.expression.ExprIdentNodeEvaluatorImpl.evaluate(ExprIdentNodeEvaluatorImpl.java:30)
at com.espertech.esper.epl.expression.ExprDotEvalStaticMethod.get(ExprDotEvalStaticMethod.java:133)
at com.espertech.esper.filter.FilterParamIndexEquals.matchEvent(FilterParamIndexEquals.java:28)
at com.espertech.esper.filter.FilterParamIndexEquals.matchEvent(FilterParamIndexEquals.java:51)
at com.espertech.esper.filter.FilterHandleSetNode.matchEvent(FilterHandleSetNode.java:97)
at com.espertech.esper.filter.EventTypeIndex.matchType(EventTypeIndex.java:171)
at com.espertech.esper.filter.EventTypeIndex.matchEvent(EventTypeIndex.java:109)
at com.espertech.esper.filter.FilterServiceImpl.evaluate(FilterServiceImpl.java:75)
at com.espertech.esper.core.service.EPRuntimeImpl.processMatches(EPRuntimeImpl.java:911)
at com.espertech.esper.core.service.EPRuntimeImpl.processWrappedEvent(EPRuntimeImpl.java:459)
... 30 more

1 个答案:

答案 0 :(得分:0)

可能EventA的事件类型信息与实际事件对象不匹配,因此Esper无法检索属性值。尝试比较类型信息和发送的实际对象。