我目前正在努力让Esper EPL查询工作。查询看起来像这样:
select a.center.distance(b.center) as delta
from pattern [
every-distinct(a.id, b.id) (
a=org.example.PositionEvent -> b=org.example.PositionEvent
)
]
当我尝试通过EPLStatement
将其编译为EPAdministrator.createEPL()
时,会抛出以下异常:
com.espertech.esper.client.EPStatementException:启动语句错误:无法按名称'a.center'加载类,请检查导入
如果我修改事件类并且查询要像这样读取
select a.distance(b) as delta
from pattern [
every-distinct(a.id, b.id) (
a=org.example.PositionEvent -> b=org.example.PositionEvent
)
]
它编译得很好。 Esper似乎将a.center.distance(...)
解释为类名后跟静态方法调用,而它将a.distance(...)
解释为对象a
上的方法调用。
如何让Esper按原意解释我的原始查询(即作为属性访问后跟方法调用)?
答案 0 :(得分:0)
解决方案实际上简单明了(但有点难看):使用括号,就像你在其他任何地方做的那些模糊不清一样。因此,要使第一个查询起作用,请按以下方式编写:
select (a.center).distance(b.center) as delta
from pattern [
every-distinct(a.id, b.id) (
a=org.example.PositionEvent -> b=org.example.PositionEvent
)
]
在这种情况下,添加的括号实际上看起来更具可读性。