是否可以订阅epl模块的句子?

时间:2014-04-28 15:15:28

标签: esper

我已经使用代码部署了一个epl模块:

 
      InputStream inputFile = this.getClass().getClassLoader().getResourceAsStream("Temperature.epl");
        if (inputFile == null) {
            inputFile = this.getClass().getClassLoader().getResourceAsStream("etc/Temperature.epl");
        }
        if (inputFile == null) {
            throw new RuntimeException("Failed to find file 'Temperature.epl' in classpath or relative to classpath");
        }

        try {
            epService.getEPAdministrator().getDeploymentAdmin().readDeploy(inputFile, null, null, null);
            // subscribers Ok, tested before whith epService.getEPAdministrator().createEPL ()
            // sentences ok, printed
            EPStatement statement;
            statement = epService.getEPAdministrator().getStatement("Monitor");
            System.out.println(statement.getText() + ";");
            statement.setSubscriber(new MonitorEventSubscriber());
            statement = epService.getEPAdministrator().getStatement("Warning");
            System.out.println(statement.getText() + ";");
            statement.setSubscriber(new WarningEventSubscriber());
            statement = epService.getEPAdministrator().getStatement("Error");
            System.out.println(statement.getText() + ";");
            statement.setSubscriber(new ErrorEventSubscriber());

        }
        catch (Exception e) {
            throw new RuntimeException("Error deploying EPL from 'Temperature.epl': " + e.getMessage(), e);
        }

我可以通过statement.getText()获取句子,但订阅者不会被激活。这有什么不对? 我正在使用Esper 5.0.0

1 个答案:

答案 0 :(得分:0)

看到您的代码使用当前的类加载器,您需要确保类加载器与其他引擎实例相同。

此外,您的代码实际上会发送一个事件,以查看它是否匹配,因为此代码不会发送事件。