当前位置: 首页 > 知识库问答 >
问题:

在AWS Lambda中运行OptaPlanner会导致AlphaNetworkCompilation相关错误

孟鸿德
2023-03-14

我试图在AWS Lambda中运行Optaplanner(8.20.0)求解器,上传到具有所有依赖项的胖罐中。运行解决方案时(或更具体地说,在SolverFactory.create()上创建求解器时),我遇到以下错误:

  [ ... snip - large list of "Cannot find symbol" / "Cannot find package" errors ... ]
  location: class org.drools.ancompiler.CompiledPACKAGE_LOCATION_domain_ParticipationNetwork41408373267, org/drools/ancompiler/CompiledPACKAGE_LOCATION_domain_ParticipationNetwork41408373267.java (95:16) : cannot find symbol
  symbol:   variable objectTypeNode
  location: class org.drools.ancompiler.CompiledPACKAGE_LOCATION_domain_ParticipationNetwork41408373267, org/drools/ancompiler/CompiledPACKAGE_LOCATION_domain_ParticipationNetwork41408373267.java (99:16) : cannot find symbol
  symbol:   variable objectTypeNode
  location: class org.drools.ancompiler.CompiledPACKAGE_LOCATION_domain_ParticipationNetwork41408373267]
    at org.kie.memorycompiler.KieMemoryCompiler.compileNoLoad(KieMemoryCompiler.java:136)
    at org.kie.memorycompiler.KieMemoryCompiler.compileNoLoad(KieMemoryCompiler.java:104)
    at org.kie.memorycompiler.KieMemoryCompiler.compile(KieMemoryCompiler.java:56)
    at org.kie.memorycompiler.KieMemoryCompiler.compile(KieMemoryCompiler.java:42)
    at org.drools.ancompiler.KieBaseUpdaterANC.inMemoryUpdate(KieBaseUpdaterANC.java:66)
    at org.drools.ancompiler.KieBaseUpdaterANC.run(KieBaseUpdaterANC.java:52)
    at org.drools.ancompiler.KieBaseUpdaterANC.generateAndSetInMemoryANC(KieBaseUpdaterANC.java:99)
    at org.optaplanner.core.impl.score.director.stream.DroolsConstraintStreamScoreDirectorFactory.buildKieBaseFromModel(DroolsConstraintStreamScoreDirectorFactory.java:115)
    at org.optaplanner.core.impl.score.director.stream.DroolsConstraintStreamScoreDirectorFactory.buildKieBase(DroolsConstraintStreamScoreDirectorFactory.java:104)
    at org.optaplanner.core.impl.score.director.stream.DroolsConstraintStreamScoreDirectorFactory.<init>(DroolsConstraintStreamScoreDirectorFactory.java:71)
    at org.optaplanner.core.impl.score.director.stream.ConstraintStreamsScoreDirectorFactoryService.lambda$buildScoreDirectorFactory$0(ConstraintStreamsScoreDirectorFactoryService.java:50)
    at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:115)
    at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:52)
    at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:168)
    at org.optaplanner.core.impl.solver.DefaultSolverFactory.<init>(DefaultSolverFactory.java:78)
    at org.optaplanner.core.api.solver.SolverFactory.create(SolverFactory.java:122)
[ ... snip - trace of my code before calling SolverFactory.create() ... ]

我似乎已经将问题追溯到Drools中存在的内存中Alpha网络编译器。具体来说,按照这个答案中的建议禁用DroolsAlphaNetworkCompilationEnable可以解决我的问题。但是,问题似乎不是AWS Lambda不提供Java编译器。首先,链接问题中的错误是不同的,其次,这个问题(与optaplanner无关)似乎表明AWS Lambda函数能够编译具有一些运行时类路径hack的类。

我的问题是:

  1. 将DroolsAlphaNetworkCompilationEnabled设置为false(目前解决了我的问题)对性能有什么影响

共有1个答案

司徒宇
2023-03-14

Wrt。1:性能影响可能相当大。我们已经看到性能下降了50%,但YMMV。这在很大程度上取决于正在解决的问题。

对。2:您已经能够通过解算器配置禁用ANC。这是一个官方支持的选项,您不需要寻找任何其他选项。

Wrt。3:我看不出有什么方法可以通过上面提到的那种黑客手段连接到我们自己的ANC。也许使用Quarkus可以解决你的问题,Quarkus可以在项目构建时而不是运行时进行编译?

尽管如此,这个错误一开始就不应该出现。让我们看看Drools的人对此有什么要说的。

 类似资料:
  • 我正在学习Elasticsearch,我在Windows提示符下运行以下内容: 这是executing_an_aggregation.json的内容 但是,我得到了以下信息: {“take”:2,“timed\u out”:false,“\u shards”:{“total”:5,“successful”:5,“failed”:0},“hits”:{“total”:980,“max\u score

  • 我有一个抽象的泛型“Foo”解决方案类,我的特定实现继承了它。此类是泛型的,允许实现类定义其特定的规划实体,该实体扩展了“Bar” 这会扼杀 optaplanner,这会吐出如下错误: solutionProperty(列表)未按预期克隆。FieldAccessingSolutionCloner无法识别该属性的字段,可能是因为其字段名不同。 我已经尝试用特定的实现类替换“EntityType ”,

  • 在新的laravel 5.4安装上运行会导致以下错误。需要帮助想办法度过难关。

  • 我有两个对象,分别是和。它们都正确地映射了条令注释和Adresa是一对一的关联。 我可以使用实体管理器分别加载Osoba和Adresa。只要Osoba没有填充属性Adresa,它就可以正常工作。但当我用属性Adresa保存Osoba并试图从数据库检索对象时,抛出了一个错误。 这就是我试图获取对象Osoba的方式。数据库中id为13的Osoba包含指向Adresa表的id。 抛出的错误是 这是我的O

  • 我把一些文件移到了新包中,这样事情就会变得更有意义,但这导致了我的依赖关系变得混乱。 这些行给出了“无法解析符号'springframework'”的建议,并建议添加一个maven依赖项。如果我这样做,那么pom.xml文件中没有任何变化。此外,pom还有“spring-boot-starter-frontdata-jpa”和“org.springframework.frontdata”的错误,表