在声明类类型的实例变量并在Esper中调用实例方法时未调用实例方法

时间:2018-07-12 06:01:46

标签: java complex-event-processing esper

我正在编写一个包含esper引擎的类实例的应用程序。我想使用引擎中EPL的实例方法调用读取和设置许多实例变量。我没有任何编译错误,并且代码运行。但是没有调用实例方法。

epl语句:

module myModule;
create variable com.tp.main.MyClass myClass;
select myProperty from MyEvent unidirectional, method:myClass.getMyProperty() as myProperty;

一个提示可能是,如果我不使用方法:方法调用前面的关键字,则会收到一个错误,提示找不到myClass.getMyProperty类。该文档有时使用方法:关键字,有时在示例中未使用该方法从类类型变量调用实例方法。

我也尝试过在API中使用addVariable方法获得相同的结果。

方法代码。

public Result getMyProperty() {
    Result result = new Result();
    result.setResult("propertyValue");
    logger.info("This method was called");
    return result;
}

类Result是一个POJO,具有用于字符串的getter和setter。

public class Result {
    private String result;

    public String getResult() {
        return result;
    }
    public void setResult(String str) {
        result = str;
    }
}

我想念什么?

2 个答案:

答案 0 :(得分:2)

您可以查看回归测试类。您可能要查看的特定对象是ExecFromClauseMethodVariable。也许您的代码没有为变量分配值?

Github: https://github.com/espertechinc/esper/blob/3e396d77308532b202ee452100eaaf9e7a044906/esper-regression/src/test/java/com/espertech/esper/regression/epl/fromclausemethod/ExecFromClauseMethodVariable.java

答案 1 :(得分:0)

问题解决了,我认为分享解决方案可能有用。感谢user650839,他为我指明了正确的方向。最终解决了问题。

我回到了在运行时配置API中声明变量。我发现必须注册变量类,并使用实例对象(this)对其进行初始化,最后导入该类。这是在运行时配置API中进行此配置的代码段。

Configuration configuration = new Configuration();
configuration.addVariable("myClass", com.tp.main.MyClass.class, this);
configuration.addImport(com.tp.main.MyClass.class);
epService = EPServiceProviderManager.getProvider(trade.getTradeName(), configuration);

在EPL中声明Class变量时似乎存在限制。您无法使用要使用的实例对象对其进行初始化。在运行时配置API中,我能够使用对象的“此”实例进行初始化,该实例包含我想从EPL访问的所有实例变量。

EPL语句未更改。但是,似乎确实必须使用关键字方法:在方法调用之前,否则会收到错误消息“找不到类...”