OptaPlanner 8.25.0集成WildFly 23.0.2的正确方式咨询
问题分析与解决方案
1. 修复XML属性accessExternalDTD异常
WildFly 23自带的JAXP实现与OptaPlanner 8.x的XML处理逻辑存在冲突,导致抛出该异常。不建议强制指定com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl,应通过调整WildFly配置解决:
- 打开WildFly安装目录下的
standalone/configuration/standalone.xml(集群环境用domain.xml) - 在
<subsystem xmlns="urn:jboss:domain:ee:5.0">节点内添加:<global-modules> <module name="javax.xml.bind.api" slot="main"/> <module name="com.sun.xml.bind" slot="main"/> </global-modules> - 同时在该subsystem下补充XML绑定配置:
<default-bindings> <xml-binding-factory resource="META-INF/services/javax.xml.bind.JAXBContext"/> </default-bindings>
重启WildFly后,即可使用兼容的XML处理实现,避免后续依赖冲突。
2. 解决Drools相关包缺失问题
OptaPlanner 8.x重构了依赖结构,optaplanner-core不再默认包含Drools规则引擎依赖。若你的项目使用.drl文件定义约束,需显式引入对应依赖:
Maven配置
<dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-core</artifactId> <version>8.25.0.Final</version> </dependency> <!-- 引入Drools规则支持 --> <dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-core-drools</artifactId> <version>8.25.0.Final</version> </dependency>
Gradle配置
implementation 'org.optaplanner:optaplanner-core:8.25.0.Final' // 引入Drools规则支持 implementation 'org.optaplanner:optaplanner-core-drools:8.25.0.Final'
3. 修复Constraint Streams依赖缺失异常
若项目通过ConstraintProviderClass使用Constraint Streams API,需引入对应的实现依赖,禁止直接引入optaplanner-core-impl(该包为内部实现,不对外提供API支持):
Maven配置
<dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-core</artifactId> <version>8.25.0.Final</version> </dependency> <!-- 引入Constraint Streams默认实现 --> <dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-core-constraint-streams</artifactId> <version>8.25.0.Final</version> </dependency>
Gradle配置
implementation 'org.optaplanner:optaplanner-core:8.25.0.Final' // 引入Constraint Streams默认实现 implementation 'org.optaplanner:optaplanner-core-constraint-streams:8.25.0.Final'
完整集成步骤
- 删除手动设置的
-Djavax.xml.parsers.DocumentBuilderFactory系统属性,按上述方法调整WildFly的EE子系统配置。 - 根据约束定义方式选择依赖组合:
- 使用Constraint Streams:
optaplanner-core+optaplanner-core-constraint-streams - 使用Drools规则:
optaplanner-core+optaplanner-core-drools
- 使用Constraint Streams:
- 重启WildFly,验证应用启动正常。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

