Компилятор учитывает только первый оператор EPL - PullRequest
0 голосов
/ 22 декабря 2018

В настоящее время я пытаюсь объединить несколько операторов EPL с Esper CEP 8 в Java.Когда я читаю отдельные EPL в EPCompile, все они работают так, как будто они включены.Например:

String EPL1 ="@name('EPA12') select * from IEvent where j>3;\n";

Но когда я пытаюсь прочитать несколько EPL-операций одновременно, рассматривается только первая.Например, если я попробую следующее утверждение, оно только проверяет j> 3 и CEP печатает все события для него.Но i> 4 (EPA13) не проверяется.

String EPLnotworking ="@name('EPA12') insert into EPA12 select * from IEvent where j>3;\n"+
"@name('EPA13') select * from EPA12 where i> 4;";

Компиляция на Java работает без проблем.Возможно ли, что я смоделировал мою проблему неправильно?

Configuration configuration = new Configuration();
configuration.getCommon().addEventType(IEvent.class);

String EPLnotworking ="@name('EPA12') insert into EPA12 select * from IEvent where j>3;\n"+
    "@name('EPA13') select * from EPA12 where i> 4;";

EPCompiled compiled = EPCompilerProvider.getCompiler().compile(EPLnotworking, new     CompilerArguments(configuration));

runtime = EPRuntimeProvider.getDefaultRuntime(configuration);
DeploymentOptions deploymentOptions = new     DeploymentOptions().setDeploymentId("IEvent");

EPStatement stmt = runtime.getDeploymentService().deploy(compiled, deploymentOptions).getStatements()[0];

stmt.addListener(new UpdateListener() {
public void update(EventBean[] newEvents, EventBean[] oldEvents, EPStatement statement, EPRuntime runtime) {
    if (newEvents == null) {
        return;
    }
    for (EventBean event : newEvents) {

        System.out.println(event.get("i"));
        System.out.println(event.get("j"));

    }
  }
});

public void run() {
//recieve Events
IEvent test = new IEvent();
// test.setI(received);
runtime.getEventService().sendEventBean(test, "IEvent");
}

Я заметил, что CEP генерирует вывод даже со значениями i = <4.</p>

Кто-нибудь знает, где проблема?Заранее спасибо

1 Ответ

0 голосов
/ 22 декабря 2018

Вы не указываете, что "не работает".Означает ли «не работает» отсутствие выходных событий?Возможно, это связано с тем, что код присоединяет слушателя только к первому оператору и игнорирует второе.Вы можете прикрепить слушателя ко всем операторам.

EPStatement[] stmts = runtime.getDeploymentService().deploy(compiled, deploymentOptions).getStatements();

for (EPStatement stmt : stmts) {
  stmt.addListener(new UpdateListener() {
    public void update(EventBean[] newEvents, EventBean[] oldEvents, EPStatement statement, EPRuntime runtime) {
    if (newEvents == null) {
        return;
    }
    for (EventBean event : newEvents) {

        System.out.println(event.get("i"));

    }
  }
  });
}
...