Uploaded image for project: 'OptaPlanner'
  1. OptaPlanner
  2. PLANNER-2724

Quarkus misleading error message for <constraintProviderClass>does.NotExist</>

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Major
    • None
    • None
    • optaplanner-quarkus
    • None
    • NEW
    • NEW

    Description

      The error message is a very misleading: "IllegalArgumentException: The scoreDirectorFactory lacks a configuration for an easyScoreCalculatorClass or an incrementalScoreCalculatorClass."

      It should be: "The constraintProviderClass (does.NotExist) does not exist.". It should fail-fast, before the multi score director check. It should fail fast when a non existing class is configured as a class.

      To reproduce:

      • Take the school-timetabling quarkus quickstart
      • Create a file src/main/resources/solverConfig.xml with this content:
      <?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>
          <constraintProviderClass>does.NotExist</constraintProviderClass>
        </scoreDirectorFactory>
      </solver>
      

      Result:

      2022-05-20 09:14:43,438 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus
              at io.quarkus.dev.appstate.ApplicationStateNotification.waitForApplicationStart(ApplicationStateNotification.java:51)
              at io.quarkus.runner.bootstrap.StartupActionImpl.runMainClass(StartupActionImpl.java:122)
              at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:144)
              at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:455)
              at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:66)
              at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:140)
              at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:96)
              at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:132)
              at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
      Caused by: java.lang.RuntimeException: Failed to start quarkus
              at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
              at io.quarkus.runtime.Application.start(Application.java:101)
              at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:103)
              at io.quarkus.runtime.Quarkus.run(Quarkus.java:67)
              at io.quarkus.runtime.Quarkus.run(Quarkus.java:41)
              at io.quarkus.runtime.Quarkus.run(Quarkus.java:120)
              at io.quarkus.runner.GeneratedMain.main(Unknown Source)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
              at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
              at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.base/java.lang.reflect.Method.invoke(Method.java:566)
              at io.quarkus.runner.bootstrap.StartupActionImpl$1.run(StartupActionImpl.java:103)
              at java.base/java.lang.Thread.run(Thread.java:829)
      Caused by: java.lang.IllegalArgumentException: The scoreDirectorFactory lacks a configuration for an easyScoreCalculatorClass or an incrementalScoreCalculatorClass.
              at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:148)
              at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:55)
              at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:177)
              at org.optaplanner.core.impl.solver.DefaultSolverFactory.<init>(DefaultSolverFactory.java:87)
              at org.optaplanner.core.api.solver.SolverFactory.create(SolverFactory.java:122)
              at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider.solverFactory(DefaultOptaPlannerBeanProvider.java:50)
              at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.create(Unknown Source)
              at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.create(Unknown Source)
              at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:101)
              at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:29)
              at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:26)
              at io.quarkus.arc.impl.LazyValue.get(LazyValue.java:26)
              at io.quarkus.arc.impl.ComputingCache.computeIfAbsent(ComputingCache.java:69)
              at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:26)
              at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.get(Unknown Source)
              at org.optaplanner.quarkus.bean.DefaultOptaPlannerBeanProvider_ProducerMethod_solverFactory_0b7f23015d253edbbe46501de32d0e76875e5fe6_Bean.get(Unknown Source)
              at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:428)
              at io.quarkus.arc.impl.ArcContainerImpl.beanInstanceHandle(ArcContainerImpl.java:441)
              at io.quarkus.arc.impl.ArcContainerImpl.instanceHandle(ArcContainerImpl.java:412)
              at io.quarkus.arc.impl.ArcContainerImpl.instance(ArcContainerImpl.java:229)
              at org.optaplanner.quarkus.devui.OptaPlannerDevUIPropertiesSupplier.getModelInfo(OptaPlannerDevUIPropertiesSupplier.java:82)
              at org.optaplanner.quarkus.devui.OptaPlannerDevUIPropertiesSupplier.get(OptaPlannerDevUIPropertiesSupplier.java:68)
              at org.optaplanner.quarkus.devui.OptaPlannerDevUIPropertiesSupplier.get(OptaPlannerDevUIPropertiesSupplier.java:41)
              at io.quarkus.vertx.http.runtime.devmode.DevConsoleRecorder.addInfo(DevConsoleRecorder.java:33)
              at io.quarkus.deployment.steps.DevConsoleProcessor$runtimeTemplates308161071.deploy_0(Unknown Source)
              at io.quarkus.deployment.steps.DevConsoleProcessor$runtimeTemplates308161071.deploy(Unknown Source)
              ... 13 more
      

      Check spring too. Check use of invalid classes/resources etc for other solver properties too.

      Attachments

        Activity

          People

            cchianel Christopher Chianelli
            gdesmet@redhat.com Geoffrey De Smet (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: