我正在使用optaplanner解决计划问题。我想从AWS Lambda调用调度代码(我知道Lambda的最大执行时间是5分钟,对于这个应用程序来说还可以)
要实现这一点,我构建了一个带有两个模块的maven项目: 模块1:调度优化代码 module-2:aws lambda处理程序(从module-1调用调度代码)
当我在IntelliJ Idea中对模块1(具有optaplanner代码)运行测试时,它运行良好。
当我调用lambda函数时,出现以下异常:
java.lang.ExceptionInInitializerError:
java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
at org.kie.api.internal.utils.ServiceRegistry.getInstance(ServiceRegistry.java:27)
...
Caused by: java.lang.RuntimeException: Child services [org.kie.api.internal.assembler.KieAssemblers] have no parent
at org.kie.api.internal.utils.ServiceDiscoveryImpl.buildMap(ServiceDiscoveryImpl.java:191)
at org.kie.api.internal.utils.ServiceDiscoveryImpl.getServices(ServiceDiscoveryImpl.java:97)
...
我在maven文件中包括以下依赖项:org.optaplanner optaplanner-core 7.7.0.Final
还检查了jar文件是否包含drools-core,kee-api,kei-internal和drools-compiler。有谁知道可能是什么问题?
答案 0 :(得分:1)
在受限环境(例如AWS-lambda)中运行时,听起来像流口水中的bug。请create a JIRA并在此处链接。
答案 1 :(得分:0)
我在运行包含示例OptaPlanner项目的胖罐时遇到相同的错误。进行一些调试后发现,调用services
时问题ServiceDiscoveryImpl::buildMap
是空的;我在构建中使用的是第一个META-INF/kie.conf
,因此该文件中缺少服务。自然,您的测试将正常运行,因为类路径将包含所有依赖项(即几个不同的META-INF/kie.conf
文件),而不是您尝试在lambda上执行的程序集。
串联这些文件(在程序集中使用适当的合并策略)可以解决此问题,并且在给定ServiceDiscoveryImpl
如何加载这些文件的情况下显得很合适。更新后的JAR可以作为AWS lambda正常运行。
注意:我使用的是scoreDrl
Cloud Balancing示例中的默认v7.12.0.Final
。