问题描述
我正在使用Spring Boot从Optaplanner Web应用程序获取核心转储,并显示以下消息:
============== DEBUG MESSAGE: illegal bytecode sequence - method not verified ================
#
# A Fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_PRIV_INSTRUCTION (0xc0000096) at pc=0x00000251502459dd,pid=15424,tid=0x0000000000004250
#
# JRE version: Java(TM) SE Runtime Environment (8.0_261-b12) (build 1.8.0_261-b12)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# j ConditionEvaluator504f0cef2aeb46d49c660e07bfa907fd.evaluate(Lorg/drools/core/common/InternalFactHandle;Lorg/drools/core/common/InternalWorkingMemory;Lorg/drools/core/spi/Tuple;)Z+9
#
It looks like something to do with class loading,but I tried removing spring-boot-devtools from the pom file and it didn't help.
我正在使用: Optaplanner版本:7.40.0.Final
Spring Boot:2.2.7.RELEASE
解决方法
尝试做mvn dependency:tree
或找到另一种方法来列出类路径中的所有jar。
所有以optaplanner,drools和kie开头的依赖项/罐都应为同一版本(7.40.0。以您的情况为最终版本)。
,仅当我在drl中使用某些规则解决NurseRostering类型的计划问题时,才发生崩溃。
此规则版本会导致崩溃:
rule "selfScheduleOnly"
when
$assignment : ShiftAssignmentO(
employee != null,$employee : employee,employee.isSelfScheduled(),$shift : shift)
not $shiftOnRequest : ShiftRequestO(employee == $employee,shift == $shift )
then
scoreHolder.addHardConstraintMatch(kcontext,-1);
end
此版本不:
rule "selfScheduleOnly"
when
$employee : EmployeeO(isSelfScheduled())
$assignment : ShiftAssignmentO(
$employee == employee,-1);
end
我回想起曾经读过,分数损坏可能是由于引用指向事实的属性而不是直接引用事实引起的,因此这是有道理的。我并没有尝试所有的组合,但是似乎只有在检查的属性是布尔值时才会发生。