Esper: цепочка доступа к свойствам и вызовы методов в запросах EPL - PullRequest
1 голос
/ 08 февраля 2011

В настоящее время я пытаюсь заставить работать некоторые запросы 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 интерпретировать мой исходный запрос как задумано (то есть как доступ к свойству с последующим вызовом метода)?

1 Ответ

0 голосов
/ 15 апреля 2011

Решение на самом деле простое и понятное (но немного уродливое): используйте скобки, как и везде, когда что-то может быть неоднозначным.Поэтому, чтобы первый запрос работал, напишите его так:

select (a.center).distance(b.center) as delta
from pattern [
    every-distinct(a.id, b.id) (
        a=org.example.PositionEvent -> b=org.example.PositionEvent
    )
]

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

...