Доступ к свойствам нового потока в Esper

Я запускаю новый поток, используя оператор: вставить в middleLayerStream выберите идентификатор, «ответ» как ограничение из[...]

После этого я запускаю SELECT-запрос к middleLayerStream. В функции обновления моего middleLayerStream я хочу распечатать свойства потока.

Это моя функция обновления:

public class MiddleLayerListener impplement UpdateListener{
   public void update(EventBean[] newEvents, EventBean[] oldEvents){
      EventBeant[] event = newEvents[0];
      System.out.println(event.getUnderlying());
   }
}

Когда вызывается функция обновления, я получаю не свойства, а вместо этого:

{a=MapEventBean eventType=com.espertech.esper.event.map.MapEventType@52500920, b=MapEventBean eventType=com.espertech.esper.event.map.MapEventType@52500920}

Как получить доступ к свойствам?

Я только что узнал, что это событие не просто EventBean, а MapEventBean. Возможно, это связано с тем, что в поток вставляются события двух разных типов (но с одинаковыми свойствами). Но как я могу обработать MapEventBean и получить от него свойства?

Большое спасибо за Вашу помощь.


person n.muc.ruh    schedule 11.12.2020    source источник
comment
Ваш пост неверен. То, что вы вырезали и вставили, — это вывод System.out.println(event), а не System.out.println(event.getUnderlying()).   -  person user650839    schedule 11.12.2020
comment
Это именно то, что я получаю, когда вызываю event.getUnderlying(). И я понятия не имею, почему, потому что обычно .getUnderlying() возвращает список свойств, но это не так.   -  person n.muc.ruh    schedule 11.12.2020
comment
На второй взгляд да, свойства событий сами по себе могут быть экземплярами EventBean.   -  person user650839    schedule 11.12.2020
comment
И как мне получить доступ к свойствам Eventbeans?   -  person n.muc.ruh    schedule 11.12.2020
comment
обновил ответ.   -  person user650839    schedule 11.12.2020


Ответы (2)


Интерфейс EventBean предлагает метод get, который возвращает значение свойства события по имени.

public void update(EventBean[] newEvents, EventBean[] oldEvents){
  for (EventBean event : newEvents) {
    System.out.println(event.get("id"));
  }
}

Вы пропустили в своем посте, чтобы было невозможно увидеть, что было выбрано. Я предполагаю, что у вас есть шаблон в форме, такой как a=A -> b=B.

В случае шаблона, возвращающего вложенное событие event.get("a.id") или event.get("a") или event.getFragment("a") или select a.id as id from [...], подойдет.

person user650839    schedule 11.12.2020
comment
Да, я использую это в других моих слушателях, и это работает совершенно нормально, но когда я делаю это в этом слушателе, я просто не получаю никакого вывода. Ничего не произошло. - person n.muc.ruh; 11.12.2020
comment
Что значит ничего не происходит...? - person user650839; 11.12.2020
comment
Ошибок не возникает, двигатель продолжает работать. - person n.muc.ruh; 11.12.2020
comment
Когда прослушиватель выдает исключение, и поскольку среда выполнения вызывает прослушиватель, убедитесь, что вы ведете журнал или кодируете свой прослушиватель, чтобы у него не было исключения. - person user650839; 11.12.2020

Хорошо, я понял.. В моем запросе SELECT, который запускает функцию обновления MiddleLayerListener, я выбрал * как

SELECT * from pattern[every a=.... -> b=...]

Итак, конечно, в MapEventBean есть оба события (a и b). Указав запрос SELECT, например:

SELECT a.id as id from pattern...

Теперь в моем потоке есть только нужные свойства, и я могу получить к ним доступ как обычно.

Вау... это заняло у меня целый день отчаяния :D

Большое спасибо за вашу помощь :)

person n.muc.ruh    schedule 11.12.2020
comment
Чтение документов может помочь. Первый пример находится в 7.2.2. Паттерны в EPL - person user650839; 11.12.2020