来自 KieSession.startProcess 的 UnsupportedOperationException
UnsupportedOperationException from KieSession.startProcess
我正在尝试将我们的项目从 Drools 6.5.0.CR2 切换到 7.7.0.Final。 (别问我生产环境用CR版的想法是谁想出来的)
我在更改我的依赖项时没有遇到任何问题(没有编译错误),但我现在遇到问题 运行 我的 drools 网络。我现在从 KieSession.startProcess
.
得到一个 UnnsupportedOperationException
java.lang.UnsupportedOperationException
at org.drools.core.impl.StatefulKnowledgeSessionImpl$DummyInternalProcessRuntime.startProcess(StatefulKnowledgeSessionImpl.java:2166)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:1839)
我在 KieHelper class 中创建我的 kie 会话,我们使用以下构造函数和 getter:
创建
public KieHelper(Collection<File> resources) throws ResolverException {
this();
KieFileSystem kfs = this.services.newKieFileSystem();
for(File f : resources) {
System.out.println(f.getPath());
try{
FileInputStream fis = new FileInputStream(f);
kfs.write(
f.getPath(),
this.services.getResources().newInputStreamResource(fis));
}catch (Exception e) {
throw new ResolverException(e);
}
}
KieBuilder kieBuilder = this.services.newKieBuilder(kfs).buildAll();
if (kieBuilder.getResults().hasMessages(Level.ERROR)) {
List<Message> errors = kieBuilder.getResults().getMessages(Level.ERROR);
StringBuilder sb = new StringBuilder("Errors:");
for (Message msg : errors) {
sb.append("\n " + prettyBuildMessage(msg));
}
throw new ResolverException(sb.toString());
}
KieContainer container = services.newKieContainer(services.getRepository().getDefaultReleaseId());
this.base = container.getKieBase();
}
public KieSession newKieSession() {
return this.base.newKieSession();
}
然后我尝试在使用 KieHelper 的 class 中像这样启动会话:
KieSession wm = this.kieHelper.newKieSession();
//insert facts into the session
wm.startProcess(this.getRuleId()); //this is throwing the exception
在 Drools 6 中这工作正常。在 drools 7 中没有。我希望有人知道发生了什么事。
编辑 1:
根据 Tibor 的回答,我仔细检查了 class 路径。我们还从仅使用 ant 的构建系统切换,在该系统中,我们使用 class 路径上的 Drools Engine 分发 zip 将所有 jar 文件手动放置在二进制文件文件夹中到 Maven。我按照文档 here.
的描述将依赖项添加到我们的 pm
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-bom</artifactId>
<type>pom</type>
<version>7.7.0.Final</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
</dependencies>
但是从 maven 查看依赖项,列表要小得多:
来自行家:
antlr-runtime-3.5.2.jar
commons-codec-1.10.jar
drools-compiler-7.7.0.Final.jar
drools-core-7.7.0.Final.jar
ecj-4.4.2.jar
kie-api-7.7.0.Final.jar
kie-internal-7.7.0.Final.jar
kie-soup-commons-7.7.0.Final.jar
kie-soup-maven-support-7.7.0.Final.jar
kie-soup-project-datamodel-api-7.7.0.Final.jar
kie-soup-project-datamodel-commons-7.7.0.Final.jar
mvel2-2.4.0.Final.jar
protobuf-java-2.6.0.jar
slf4j-api-1.7.25.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.10.jar
来自 Drools 引擎分发 Zip
activation-1.1.1.jar
aether-api-1.1.0.jar
aether-connector-basic-1.1.0.jar
aether-impl-1.1.0.jar
aether-spi-1.1.0.jar
aether-transport-file-1.1.0.jar
aether-transport-http-1.1.0.jar
aether-transport-wagon-1.1.0.jar
aether-util-1.1.0.jar
ant-1.8.4.jar
ant-launcher-1.8.4.jar
antlr-runtime-3.5.2.jar
aopalliance-1.0.jar
cdi-api-1.2.jar
commons-codec-1.10.jar
commons-collections4-4.1.jar
commons-lang3-3.4.jar
curvesapi-1.04.jar
drools-beliefs-7.7.0.Final.jar
drools-compiler-7.7.0.Final.jar
drools-core-7.7.0.Final.jar
drools-decisiontables-7.7.0.Final.jar
drools-persistence-api-7.7.0.Final.jar
drools-persistence-jpa-7.7.0.Final.jar
drools-pmml-7.7.0.Final.jar
drools-scorecards-7.7.0.Final.jar
drools-templates-7.7.0.Final.jar
drools-verifier-7.7.0.Final.jar
ecj-4.4.2.jar
guava-20.0.jar
guice-4.0-no_aop.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
httpclient-4.5.3.jar
httpcore-4.4.6.jar
itext-2.1.7.jar
javassist-3.20.0-GA.jar
javax.inject-1.jar
javax.interceptor-api-1.2.jar
jaxb-core-2.2.11.jar
jaxb-impl-2.2.11.jar
jboss-jaxb-api_2.2_spec-1.0.4.Final.jar
jboss-transaction-api_1.2_spec-1.0.1.Final.jar
jcl-over-slf4j-1.7.25.jar
jsoup-1.8.3.jar
kie-api-7.7.0.Final.jar
kie-ci-7.7.0.Final.jar
kie-internal-7.7.0.Final.jar
kie-soup-commons-7.7.0.Final.jar
kie-soup-maven-integration-7.7.0.Final.jar
kie-soup-maven-support-7.7.0.Final.jar
kie-soup-project-datamodel-api-7.7.0.Final.jar
kie-soup-project-datamodel-commons-7.7.0.Final.jar
maven-aether-provider-3.3.9.jar
maven-artifact-3.3.9.jar
maven-builder-support-3.3.9.jar
maven-compat-3.3.9.jar
maven-core-3.3.9.jar
maven-model-3.3.9.jar
maven-model-builder-3.3.9.jar
maven-plugin-api-3.3.9.jar
maven-repository-metadata-3.3.9.jar
maven-settings-3.3.9.jar
maven-settings-builder-3.3.9.jar
mvel2-2.4.0.Final.jar
org.eclipse.sisu.inject-0.3.2.jar
org.eclipse.sisu.plexus-0.3.2.jar
plexus-cipher-1.7.jar
plexus-classworlds-2.5.2.jar
plexus-component-annotations-1.6.jar
plexus-interpolation-1.21.jar
plexus-sec-dispatcher-1.3.jar
plexus-utils-3.0.22.jar
poi-3.15.jar
poi-ooxml-3.15.jar
poi-ooxml-schemas-3.15.jar
protobuf-java-2.6.0.jar
slf4j-api-1.7.25.jar
stax-api-1.0-2.jar
wagon-http-3.0.0.jar
wagon-http-shared-3.0.0.jar
wagon-provider-api-3.0.0.jar
xmlbeans-2.6.0.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.10.jar
我一定是遗漏了文档中没有的 Maven 依赖项。
EDIT2
所以作为测试,我回到了我们旧的 ant only 风格,并将所有 jar 从 drools 引擎分发 zip 添加到依赖项和运行时 classpath 但我仍然得到相同的错误...
查看列表虽然从外观上看都不包含来自 jBPM 的任何内容。查看我们的旧源代码控制系统,我们确实有 6.5.0 的 jbpm jar。我猜这些是分开分发的吗?
(该死的,直到我有 15 个代表我才能发表评论。)
可能是您的项目中没有 jBPM 依赖项。在这种情况下,我认为 Drools 为没有功能的进程使用虚拟提供程序。但我不是 100% 确定这一点。
我正在尝试将我们的项目从 Drools 6.5.0.CR2 切换到 7.7.0.Final。 (别问我生产环境用CR版的想法是谁想出来的)
我在更改我的依赖项时没有遇到任何问题(没有编译错误),但我现在遇到问题 运行 我的 drools 网络。我现在从 KieSession.startProcess
.
UnnsupportedOperationException
java.lang.UnsupportedOperationException
at org.drools.core.impl.StatefulKnowledgeSessionImpl$DummyInternalProcessRuntime.startProcess(StatefulKnowledgeSessionImpl.java:2166)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:1839)
我在 KieHelper class 中创建我的 kie 会话,我们使用以下构造函数和 getter:
创建public KieHelper(Collection<File> resources) throws ResolverException {
this();
KieFileSystem kfs = this.services.newKieFileSystem();
for(File f : resources) {
System.out.println(f.getPath());
try{
FileInputStream fis = new FileInputStream(f);
kfs.write(
f.getPath(),
this.services.getResources().newInputStreamResource(fis));
}catch (Exception e) {
throw new ResolverException(e);
}
}
KieBuilder kieBuilder = this.services.newKieBuilder(kfs).buildAll();
if (kieBuilder.getResults().hasMessages(Level.ERROR)) {
List<Message> errors = kieBuilder.getResults().getMessages(Level.ERROR);
StringBuilder sb = new StringBuilder("Errors:");
for (Message msg : errors) {
sb.append("\n " + prettyBuildMessage(msg));
}
throw new ResolverException(sb.toString());
}
KieContainer container = services.newKieContainer(services.getRepository().getDefaultReleaseId());
this.base = container.getKieBase();
}
public KieSession newKieSession() {
return this.base.newKieSession();
}
然后我尝试在使用 KieHelper 的 class 中像这样启动会话:
KieSession wm = this.kieHelper.newKieSession();
//insert facts into the session
wm.startProcess(this.getRuleId()); //this is throwing the exception
在 Drools 6 中这工作正常。在 drools 7 中没有。我希望有人知道发生了什么事。
编辑 1:
根据 Tibor 的回答,我仔细检查了 class 路径。我们还从仅使用 ant 的构建系统切换,在该系统中,我们使用 class 路径上的 Drools Engine 分发 zip 将所有 jar 文件手动放置在二进制文件文件夹中到 Maven。我按照文档 here.
的描述将依赖项添加到我们的 pm<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-bom</artifactId>
<type>pom</type>
<version>7.7.0.Final</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
</dependencies>
但是从 maven 查看依赖项,列表要小得多:
来自行家:
antlr-runtime-3.5.2.jar
commons-codec-1.10.jar
drools-compiler-7.7.0.Final.jar
drools-core-7.7.0.Final.jar
ecj-4.4.2.jar
kie-api-7.7.0.Final.jar
kie-internal-7.7.0.Final.jar
kie-soup-commons-7.7.0.Final.jar
kie-soup-maven-support-7.7.0.Final.jar
kie-soup-project-datamodel-api-7.7.0.Final.jar
kie-soup-project-datamodel-commons-7.7.0.Final.jar
mvel2-2.4.0.Final.jar
protobuf-java-2.6.0.jar
slf4j-api-1.7.25.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.10.jar
来自 Drools 引擎分发 Zip
activation-1.1.1.jar
aether-api-1.1.0.jar
aether-connector-basic-1.1.0.jar
aether-impl-1.1.0.jar
aether-spi-1.1.0.jar
aether-transport-file-1.1.0.jar
aether-transport-http-1.1.0.jar
aether-transport-wagon-1.1.0.jar
aether-util-1.1.0.jar
ant-1.8.4.jar
ant-launcher-1.8.4.jar
antlr-runtime-3.5.2.jar
aopalliance-1.0.jar
cdi-api-1.2.jar
commons-codec-1.10.jar
commons-collections4-4.1.jar
commons-lang3-3.4.jar
curvesapi-1.04.jar
drools-beliefs-7.7.0.Final.jar
drools-compiler-7.7.0.Final.jar
drools-core-7.7.0.Final.jar
drools-decisiontables-7.7.0.Final.jar
drools-persistence-api-7.7.0.Final.jar
drools-persistence-jpa-7.7.0.Final.jar
drools-pmml-7.7.0.Final.jar
drools-scorecards-7.7.0.Final.jar
drools-templates-7.7.0.Final.jar
drools-verifier-7.7.0.Final.jar
ecj-4.4.2.jar
guava-20.0.jar
guice-4.0-no_aop.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
httpclient-4.5.3.jar
httpcore-4.4.6.jar
itext-2.1.7.jar
javassist-3.20.0-GA.jar
javax.inject-1.jar
javax.interceptor-api-1.2.jar
jaxb-core-2.2.11.jar
jaxb-impl-2.2.11.jar
jboss-jaxb-api_2.2_spec-1.0.4.Final.jar
jboss-transaction-api_1.2_spec-1.0.1.Final.jar
jcl-over-slf4j-1.7.25.jar
jsoup-1.8.3.jar
kie-api-7.7.0.Final.jar
kie-ci-7.7.0.Final.jar
kie-internal-7.7.0.Final.jar
kie-soup-commons-7.7.0.Final.jar
kie-soup-maven-integration-7.7.0.Final.jar
kie-soup-maven-support-7.7.0.Final.jar
kie-soup-project-datamodel-api-7.7.0.Final.jar
kie-soup-project-datamodel-commons-7.7.0.Final.jar
maven-aether-provider-3.3.9.jar
maven-artifact-3.3.9.jar
maven-builder-support-3.3.9.jar
maven-compat-3.3.9.jar
maven-core-3.3.9.jar
maven-model-3.3.9.jar
maven-model-builder-3.3.9.jar
maven-plugin-api-3.3.9.jar
maven-repository-metadata-3.3.9.jar
maven-settings-3.3.9.jar
maven-settings-builder-3.3.9.jar
mvel2-2.4.0.Final.jar
org.eclipse.sisu.inject-0.3.2.jar
org.eclipse.sisu.plexus-0.3.2.jar
plexus-cipher-1.7.jar
plexus-classworlds-2.5.2.jar
plexus-component-annotations-1.6.jar
plexus-interpolation-1.21.jar
plexus-sec-dispatcher-1.3.jar
plexus-utils-3.0.22.jar
poi-3.15.jar
poi-ooxml-3.15.jar
poi-ooxml-schemas-3.15.jar
protobuf-java-2.6.0.jar
slf4j-api-1.7.25.jar
stax-api-1.0-2.jar
wagon-http-3.0.0.jar
wagon-http-shared-3.0.0.jar
wagon-provider-api-3.0.0.jar
xmlbeans-2.6.0.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.10.jar
我一定是遗漏了文档中没有的 Maven 依赖项。
EDIT2
所以作为测试,我回到了我们旧的 ant only 风格,并将所有 jar 从 drools 引擎分发 zip 添加到依赖项和运行时 classpath 但我仍然得到相同的错误...
查看列表虽然从外观上看都不包含来自 jBPM 的任何内容。查看我们的旧源代码控制系统,我们确实有 6.5.0 的 jbpm jar。我猜这些是分开分发的吗?
(该死的,直到我有 15 个代表我才能发表评论。)
可能是您的项目中没有 jBPM 依赖项。在这种情况下,我认为 Drools 为没有功能的进程使用虚拟提供程序。但我不是 100% 确定这一点。