有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在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;
    }
}

我错过了什么


共 (2) 个答案

  1. # 1 楼答案

    问题解决了,我认为分享解决方案可能有用。感谢用户650839为我指明了正确的方向。以下是最终解决问题的方法

    我恢复到在运行时配置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中声明类变量时似乎有一个限制。无法使用要使用的实例对象初始化它。在运行时配置API中,我能够使用对象的“this”实例对其进行初始化,该实例包含我希望从EPL访问的所有实例变量

    EPL声明没有改变。然而,似乎您必须使用关键字method:在方法调用之前,否则您会得到一个错误“找不到类…”