在Esper中声明Classtype实例变量并调用实例方法时未调用java实例方法
我正在编写一个应用程序,它有一个包含esper引擎的类的实例。我希望使用引擎中EPL的实例方法调用来读取和设置许多实例变量。我没有得到任何编译错误和代码运行。但是实例方法没有被调用
epl声明:
module myModule;
create variable com.tp.main.MyClass myClass;
select myProperty from MyEvent unidirectional, method:myClass.getMyProperty() as myProperty;
一个提示可能是,如果我不在方法调用前使用method:keyword,我会得到一个错误,该错误会导致myClass。找不到getMyProperty类。文档有时使用method:key,有时不在示例中使用method从类类型变量调用实例方法
我还尝试在API中使用addVariable方法,得到了相同的结果
方法的代码
public Result getMyProperty() {
Result result = new Result();
result.setResult("propertyValue");
logger.info("This method was called");
return result;
}
类结果是一个POJO,其中包含字符串的getter和setter
public class Result {
private String result;
public String getResult() {
return result;
}
public void setResult(String str) {
result = str;
}
}
我错过了什么
# 1 楼答案
问题解决了,我认为分享解决方案可能有用。感谢用户650839为我指明了正确的方向。以下是最终解决问题的方法
我恢复到在运行时配置API中声明变量。我发现我必须注册变量类,用实例对象(this)初始化它,最后导入该类。下面是在运行时配置API中执行此配置的代码片段
在EPL中声明类变量时似乎有一个限制。无法使用要使用的实例对象初始化它。在运行时配置API中,我能够使用对象的“this”实例对其进行初始化,该实例包含我希望从EPL访问的所有实例变量
EPL声明没有改变。然而,似乎您必须使用关键字method:在方法调用之前,否则您会得到一个错误“找不到类…”
# 2 楼答案
您可以查看回归测试类。您可能要查看的具体选项是ExecFromClauseMethodVariable。也许你的代码没有给变量赋值
Github: https://github.com/espertechinc/esper/blob/3e396d77308532b202ee452100eaaf9e7a044906/esper-regression/src/test/java/com/espertech/esper/regression/epl/fromclausemethod/ExecFromClauseMethodVariable.java