在 Esper 中声明 Class 类型的实例变量并调用实例方法时不调用实例方法
Instance method not called when declaring a Class-type instance variable and call an instance method in Esper
我正在编写一个包含 esper 引擎的 class 实例的应用程序。我想使用来自引擎中 EPL 的实例方法调用来读取和设置许多实例变量。我没有收到任何编译错误并且代码运行。但是没有调用实例方法。
epl 语句:
module myModule;
create variable com.tp.main.MyClass myClass;
select myProperty from MyEvent unidirectional, method:myClass.getMyProperty() as myProperty;
一个提示可能是,如果我不使用 method: 方法调用前面的关键字,我会得到一个错误,即无法找到 myClass.getMyProperty class。文档有时使用 method: 关键字,有时不在示例中用于从 Class 类型变量调用实例方法。
我也试过在 API 中使用 addVariable 方法得到相同的结果。
方法代码。
public Result getMyProperty() {
Result result = new Result();
result.setResult("propertyValue");
logger.info("This method was called");
return result;
}
class 结果是一个带有 getter 和 setter 字符串的 POJO。
public class Result {
private String result;
public String getResult() {
return result;
}
public void setResult(String str) {
result = str;
}
}
我错过了什么?
您可以查看回归测试 class。您可能想要查看的具体一个是 ExecFromClauseMethodVariable。也许你的代码没有给变量赋值?
问题已解决,我认为分享解决方案可能会有用。感谢 user650839 为我指明了正确的方向。这是最终解决问题的方法。
我恢复到在运行时配置中声明变量 API。我发现我必须注册变量 class,用实例对象 (this) 初始化它,最后导入 class。这是在运行时配置 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 访问的所有实例变量的对象的 "this" 实例对其进行初始化。
EPL 声明没有改变。但是,似乎您必须在方法调用前使用关键字 method: 否则会出现错误 "cannot find class..."
我正在编写一个包含 esper 引擎的 class 实例的应用程序。我想使用来自引擎中 EPL 的实例方法调用来读取和设置许多实例变量。我没有收到任何编译错误并且代码运行。但是没有调用实例方法。
epl 语句:
module myModule;
create variable com.tp.main.MyClass myClass;
select myProperty from MyEvent unidirectional, method:myClass.getMyProperty() as myProperty;
一个提示可能是,如果我不使用 method: 方法调用前面的关键字,我会得到一个错误,即无法找到 myClass.getMyProperty class。文档有时使用 method: 关键字,有时不在示例中用于从 Class 类型变量调用实例方法。
我也试过在 API 中使用 addVariable 方法得到相同的结果。
方法代码。
public Result getMyProperty() {
Result result = new Result();
result.setResult("propertyValue");
logger.info("This method was called");
return result;
}
class 结果是一个带有 getter 和 setter 字符串的 POJO。
public class Result {
private String result;
public String getResult() {
return result;
}
public void setResult(String str) {
result = str;
}
}
我错过了什么?
您可以查看回归测试 class。您可能想要查看的具体一个是 ExecFromClauseMethodVariable。也许你的代码没有给变量赋值?
问题已解决,我认为分享解决方案可能会有用。感谢 user650839 为我指明了正确的方向。这是最终解决问题的方法。
我恢复到在运行时配置中声明变量 API。我发现我必须注册变量 class,用实例对象 (this) 初始化它,最后导入 class。这是在运行时配置 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 访问的所有实例变量的对象的 "this" 实例对其进行初始化。
EPL 声明没有改变。但是,似乎您必须在方法调用前使用关键字 method: 否则会出现错误 "cannot find class..."