第一次尝试调用 jBPM API

Posted

技术标签:

【中文标题】第一次尝试调用 jBPM API【英文标题】:Very 1st attempt to make a call to a jBPM API Throws 【发布时间】:2013-09-21 09:29:37 【问题描述】:

我正在尝试将 jBPM 5.4 集成到现有的 servlet 中。

servlet 在JBoss 7.1 下运行良好,但是当我添加一个与 jBPM 相关的 API 时它会失败并抛出异常。 (我使用来自jbpm-5.4.0.Final-installer-full.zip 安装的评估示例作为模板。)我添加到 servlet 的 doPost():

KnowledgeBuilder kbuilder = KnowledgeBuilderFactor.newKnowledgeBuilder()

一旦我们执行此语句,就会抛出以下异常

20:51:06,394 错误 [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/myservlet].[myservlet]] (http-localhost-127.0.0.1-8080-2) Servlet.service() 用于 servlet myservlet 抛出异常:java.lang.NoClassDefFoundError: org/drools/builder/KnowledgeBuilderFactory 在 com.mycompany.myservlet.doPost(myservlet.java:413) [classes:] at com.mycompany.myservlet.doGet(myservlet.java:120) [classes:] at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:847) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] 在 org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] 在 java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11]

我们还有:

import org.drools.KnowledgeBase;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.jbpm.process.workitem.wsht.HornetQHTWorkItemHandler;

谁能解释一下这里出了什么问题?

谢谢。 铝

【问题讨论】:

【参考方案1】:

您需要确保以下类:org/drools/builder/KnowledgeBuilderFactory 位于您的项目类路径(包含它的整个 jar 文件)中,并且它也在您的 WEB-INF/lib 目录中对应的 jar 文件中. 这样做会使其工作,这似乎根本不是 Drools 或 jBPM 问题。一般来说,它与 Web 应用程序更相关。

【讨论】:

嗨 Salaboy - 感谢您的快速回复。我遇到的问题是我不知道要在类路径上放置什么 .jar 文件,也找不到可以告诉我的资源。你能告诉我去哪里学习我需要的 .jars 吗?谢谢。 好的,我终于想通了。由于某种原因,由 jbpm-5.4.0.Final-installer-full.zip 创建的 .\runtime\lib 中的 .jar 文件在移动到我的 WEB-INF\lib 时并未消除此错误。但是,我能够从jboss.org/drools/downloads 下载 drools-distribution-5.5.0.Final.zip,当我将这些 .jar 放入我的 .\lib 时,错误被消除,我能够执行第一个“jBPM 测试语句“来自我的 servlet。你能告诉我为什么 jBPM Installer .\lib .jar 文件不起作用吗?谢谢。

以上是关于第一次尝试调用 jBPM API的主要内容,如果未能解决你的问题,请参考以下文章

python调用Java代码,完毕JBPM工作流application

BPM流程版本控制方案设计

Android Google Maps API OnLocationChanged 仅调用一次

Struts2+Spring+Hibernate+Jbpm技术实现Oa(Office Automation)办公系统第一天框架搭建

使用 RxSwift 只执行一次 API 调用

使用 laravel 一次调用多个 API 资源