У меня есть optaplanner, который работает правильно с правилами слюни. «Внезапно», после некоторых изменений, которые я сделал, Optaplanner больше не помещает мои факты в слюнки kSession.Рабочая память Drools Optaplanner пуста
я ставлю некоторое протоколирование, и я вижу, что optaplanner называет getProblemFacts() метод на моем решении, и этот метод возвращает список с размером> 0.
Я написал правило DRL просто сосчитать факты и запишите эти подсчеты (это правило проверено на единицу и хорошо работает, когда я сам помещаю объекты в ksession). Я также убежден, что optaplanner не помещает факты в рабочую память.
Фаза ConstructionHeuristics прекращается хорошо (и делает это задание, так как мои PlaningVariables больше не нуль после этой фазы). Я получил свою проблему только при начале LocalSearch.
Не знаю, как и где искать дальше, чтобы понять проблему. Есть идеи?
У меня есть совет: Я использую <scanAnnotatedClasses/>
и у вас есть эта проблема. Если я ставлю два класса «вручную» с помощью <solutionClass/>
и <entityClass/>
тогда я получаю ошибку отражения:
Exception in thread "Solver" java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.optaplanner.core.impl.domain.common.accessor.BeanPropertyMemberAccessor.executeGetter(BeanPropertyMemberAccessor.java:67)
at org.optaplanner.core.impl.domain.solution.descriptor.SolutionDescriptor.extractEntityCollection(SolutionDescriptor.java:626)
at org.optaplanner.core.impl.domain.solution.descriptor.SolutionDescriptor.getEntityCount(SolutionDescriptor.java:489)
at org.optaplanner.core.impl.domain.solution.cloner.FieldAccessingSolutionCloner$FieldAccessingSolutionClonerRun.cloneSolution(FieldAccessingSolutionCloner.java:200)
at org.optaplanner.core.impl.domain.solution.cloner.FieldAccessingSolutionCloner.cloneSolution(FieldAccessingSolutionCloner.java:70)
at org.optaplanner.core.impl.score.director.AbstractScoreDirector.cloneSolution(AbstractScoreDirector.java:147)
at org.optaplanner.core.impl.solver.scope.DefaultSolverScope.setWorkingSolutionFromBestSolution(DefaultSolverScope.java:197)
at org.optaplanner.core.impl.solver.DefaultSolver.solvingStarted(DefaultSolver.java:195)
at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:175)
at ****.services.impl.SolverServiceImpl.lambda$0(SolverServiceImpl.java:169)
Это последнее исключение очень странно. Поместите контрольную точку в 'BeanPropertyMemberAccessor.executeGetter()' и распечатайте 'propertyType' и' bean.getClass() 'здесь, я хочу лучше понять эту неверную конфигурацию, чтобы optaplanner мог получить более приятное сообщение об ошибке. –
Что касается вашей первоначальной проблемы, поставьте точку останова отладки в DroolsScoreDirector # resetKieSession и следуйте по пути getWorkingFacts (который является getProblemFacts() и объектами планирования). –
Вы выполняете любую магию загрузки классов, такую как OSGi? –