2011-02-08 2 views
1

В настоящее время я изо всех сил пытаюсь получить некоторые запросы EPS Eper. Запросы ищут так:Эспер: доступ к цепочке доступа и вызовы методов в запросах 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.

Как я могу заставить Эспер интерпретировать мой первоначальный запрос как предназначенный (т. Е. Как доступ к ресурсу, за которым следует вызов метода)?

ответ

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 
    ) 
] 

В этом случае, он на самом деле выглядит даже немного более удобным для чтения с добавлением скобок.