2015-09-24 5 views
0

Я знаю, что вы можете создавать глобальные выражения с помощью Object Object Model с использованием 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, в которых я могу сослаться на глобальное выражения псевдоним, как я построить . Самое лучшее, что я мог думать, что бы дать мне правильный шаблон при преобразовании объекта оператора для EPL будет включать Expressions.property(alias), но я получаю следующее сообщение об ошибке, когда я добавить полный объект оператора к двигателю Esper:

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

Обратите внимание, что а) глобальные выражения уже были объявлены в этот момент, б) Если я добавлю шаблон, содержащий глобальные псевдонимы выражения в форме EPL для механизма Esper, он работает.

Любые идеи? Хотя это вариант, я бы предпочел не конвертировать из EPStatementObjectModel в строку EPL каждый раз, когда добавляю новый шаблон в движок.

ответ

1

Вы можете проверить созданную объектную модель в отладчике, чтобы узнать. Итак, чтобы сгенерировать один, вы могли бы назвать «epadmin.compile (« some epl with the expression ») и посмотреть, что вернется.

0

Следуя советам пользователя650839, я нашел через отладку, что путь, к названным глобальным выражениям необходимо включить DotExpression в ваше дерево объектов-оператора как таковое:

DotExpression globalExpression = new DotExpression(); 
globalExpression.add("fizzbuzz", new ArrayList<Expression>(), true); 

 Смежные вопросы

  • Нет связанных вопросов^_^