如何解决Wildfly 18 - drools 7.39.0-Final:部署应用程序并获取 java.lang.NoClassDefFoundError:无法初始化类
一直在尝试将应用程序迁移到 WF 18.0 和drools 7.39.0-Final。 Drools 7.39.0-Final 是 WF18 的最后一个版本。
我们的一个应用程序使用了 drools/kie。
我在尝试部署时遇到如下错误。
"jboss.deployment.subunit.\"policy-ear.ear\".\"policy-beans.jar\".component.CepRuleEngineHolder.START" => "java.lang.IllegalStateException: WFLYEE0042: 构建组件实例失败 引起:java.lang.IllegalStateException:WFLYEE0042:构建组件实例失败 引起:javax.ejb.EJBException:WFLYEJB0442:意外错误 引起:java.lang.NoClassDefFoundError:无法初始化类org.drools.dynamic.DynamicServiceRegistrysupplier$LazyHolder"
通过搜索我发现这可能是由静态内容/构造函数失败引起的。 所以我下载了源代码,并作为一个实验改变了如下内容。这修复了它。 下面的这个例子展示了我为 KieServices 类所做的事情。
请注意,上面的错误是针对 DynamicServiceRegistrysupplier 类的,我尝试将更改应用于该类,但它是一个巨大的构建并且存在一些其他问题。在我追逐之前,我想问一下是否有更好的方法来做到这一点?看来我根本不需要这样做,这是 WF18 最新发布的流口水。
对于 KieServices,我改变了这个:
/**
* A Factory for this KieServices
*/
class Factory {
static class LazyHolder {
private static KieServices INSTANCE = ServiceRegistry.getInstance().get(KieServices.class);
}
/**
* Returns a reference to the KieServices singleton
*/
public static KieServices get() {
return LazyHolder.INSTANCE;
}
}
到:
/**
* A Factory for this KieServices
*/
class Factory {
static private KieServices instance = null;
public static class LazyHolder {
public LazyHolder() {
}
}
/**
* Returns a reference to the KieServices singleton
*/
public static KieServices get() {
if ( instance == null) {
instance = ServiceRegistry.getInstance().get(KieServices.class);
}
return instance;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。