我的应用程序配置并部署了一个esper引擎,该引擎解析以字符串形式存储在MySQL数据库中的epl模块。一切正常,除了我尝试从epl模块调用静态方法时。在部署引擎时出现以下错误:DeploymentActionException:表达式'select ...'中模块'MyModule'的部署失败:错误的开始语句:类'MyClass'的静态方法'myMethod'的返回类型无效,需要Java类。

方法如下:

public static String myMethod() {
    String symbol = "GOOG";
    logger.info("Hello From EPL");
    return symbol;
}


这是引擎配置和模块部署:

Configuration configuration = new Configuration();
        configuration.addEventType("MyEvent", MyEvent.class);
        configuration.addImport(com.tp.main.MyClass.class);
        epService = EPServiceProviderManager.getProvider("Service", configuration);
        EPDeploymentAdmin deploymentAdmin = epService.getEPAdministrator().getDeploymentAdmin();
        Module module = deploymentAdmin.parse(epl);
        String moduleId = deploymentAdmin.add(module);
        deploymentAdmin.deploy(moduleId, null);


这是epl模块:

module MyModule; select propertyA, propertyB from MyEvent as propertyA unidirectional, method:MyClass.myMethod as propertyB


MyEvent有一个针对propertyA的吸气剂,该吸气剂返回String。

我已经阅读并重新阅读了文档的内容。看起来一切正常。我在网上找到了一些例子,进一步说明一切都很好。但是我无法克服这个错误。

我尝试将导入移动到epl模块。我尝试将POJO事件更改为Map事件,然后再返回。我尝试在epl模块中创建架构,并使用运行时API配置事件类型,然后再次返回。

如果我取消此方法调用,那么一切都将按照epl模块中的其他语句(未显示)运行。

我想念什么?

最佳答案

“字符串”不是POJO,实际上是原始类型。在从句中,它应该返回事件类型或POJO,并且基本类型不是可能的值,因为它没有任何属性。

public class Result {
  String result;
}

public static Result myMethod() {
  String symbol = "GOOG";
  logger.info("Hello From EPL");
  return symbol;
}

10-06 08:33