java - Esper 部署错误:静态方法的返回类型无效,需要 Java 类
问题描述
我的应用程序配置并部署了一个 esper 引擎,该引擎将一个 epl 模块解析为一个字符串,该模块存储在 MySQL 数据库中。除非我尝试从 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 有一个用于返回 String 的 propertyA 的 getter。
我已经来回阅读并重新阅读了文档。看起来一切都应该工作。我在网上找到了进一步表明一切都很好的例子。但我无法克服这个错误。
我已经尝试将导入移动到 epl 模块。我尝试从 POJO 事件更改为 Map 事件,然后再返回。我尝试在 epl 模块中创建模式并使用运行时 API 配置事件类型并再次返回。
如果我取出这个方法调用,一切都会与 epl 模块中的其他语句(未显示)一样工作。
我错过了什么?
解决方案
“字符串”不是 POJO,它实际上是一种原始类型。在 from 子句中,它应该返回一个事件类型或 POJO,而原始类型不是可能的值,因为它没有任何属性。
public class Result {
String result;
}
public static Result myMethod() {
String symbol = "GOOG";
logger.info("Hello From EPL");
return symbol;
}
推荐阅读
- sql - 在三个不同条件下加入同一张表
- list - 如何从列表中删除“项目列表”?
- javascript - 为什么 vue-cookies 在一个视图中工作,而不是另一个?
- javascript - 如何获取原生格式的 HTML?
- arrays - 按子元素选取列表的元素
- python - 如何在 Python 中使用 Scipy 从层次集群中推断集群解决方案的准确性?
- mysql - 将数据库列转换为表列 Laravel Blade
- git - VS Code Source Control 上的通知出乎意料
- javascript - 从javascript中的嵌套数组中选择
- javascript - 从 Binance Data 中的 json 打开、关闭