我正在编写一个包含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;
}
}
我想念什么?
答案 0 :(得分:2)
您可以查看回归测试类。您可能要查看的特定对象是ExecFromClauseMethodVariable。也许您的代码没有为变量分配值?
答案 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语句未更改。但是,似乎确实必须使用关键字方法:在方法调用之前,否则会收到错误消息“找不到类...”