带有 Optaplanner 的 Quarkus Native 无法使用 EasyScoreCalculator 启动

问题描述 投票:0回答:1

我们的 Quarkus/OptaPlanner 应用程序在 JVM 模式下工作正常,但是当编译为 Native 可执行文件时,它在初始化时抛出异常。 ..... 原生(由 Quarkus 2.16.12.Final 提供支持)

2023-12-20T15:18:32.848536120Z Caused by: java.lang.IllegalStateException: If there is no scoreDrl (null), scoreDrlFile (null) or constraintProviderClass (null) with DROOLS impl type (null), there can be no droolsAlphaNetworkCompilationEnabled (false) either.
    at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.validateNoDroolsAlphaNetworkCompilation(ScoreDirectorFactoryFactory.java:217)
2023-12-20T15:18:32.848550921Z  at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:133)
    at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:40)
    at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:166)
2023-12-20T15:18:32.848563806Z  at org.optaplanner.core.impl.solver.DefaultSolverFactory.<init>(DefaultSolverFactory.java:71)
2023-12-20T15:18:32.848567567Z  at org.optaplanner.core.api.solver.SolverFactory.create(SolverFactory.java:106)
2023-12-20T15:18:32.848570521Z  at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider.solverFactory(DefaultOptaPlannerBeanProvider.java:46)
    at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_3b1fa4ff0a3de7781ba3e1239701086bba97ef14_Bean.create(Unknown Source)

我们尝试在资源文件夹中创建一个solverConfig.xml,设置我们的类,并按如下方式注册它,但没有帮助 应用程序属性: quarkus.native.resources.includes=solverConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">

  <scoreDirectorFactory>
<easyScoreCalculatorClass>com.blah.planner.OptimizationConstraintProvider</easyScoreCalculatorClass>
</scoreDirectorFactory>

<!-- Configure the optimization algorithms (optional) -->
  <termination>
  </termination>
  <constructionHeuristic>

  </constructionHeuristic>
  <localSearch>

  </localSearch>
</solver>

我们的目标是使用 JDK17 编译器的 Java 11。

此时,我们可以尝试转换为与其他服务中的 Native Compile 配合使用的流提供程序,或者尝试升级到 Quarkus 3.x。 关于此配置是否有效或者我是否需要额外设置有什么建议吗?

optaplanner quarkus-native
1个回答
0
投票

这是 OptaPlanner 中的错误,而不是 Quarkus 中的错误。 Timefold Solver 不会遇到此错误,但我们不再支持 0.8 版本(与 OptaPlanner 8 完全兼容)。当前版本 Timefold Solver 1.5.0 与 OptaPlanner 9(以及 Quarkus 3)完全兼容。

我在这里看到几个选项:

  • 解决问题的一种方法是切换到约束流。这样,您就可以继续使用 OptaPlanner 8。无论如何,您都不应该在生产中使用

    Easy

  • 切换到 Timefold Solver 1.x(和 Quarkus 3),这将允许您在本机模式下使用

    EasyScoreCalculator
    。您还将受益于 OptaPlanner 中未提供的许多功能、修复和性能改进。

  • 等待 OptaPlanner 项目是否/何时修复该问题。

© www.soinside.com 2019 - 2024. All rights reserved.