ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在jBPM 6工作台中将特定于域的对象传递给特定于域的任务

2019-07-08 16:03:08  阅读:246  来源: 互联网

标签:java jboss wildfly jbpm


几天来我一直在努力,并没有太多运气.在jboss wildfly上运行的jBPM 6工作台中,我正在尝试调用自定义工作项处理程序并传入特定于域的对象的实例.
到目前为止,这是我的流程:

>在外部jar:datamodel.jar中定义特定于域的类acme.datamodel.UserBio.
>通过“Artifact repository” – >上传功能将“datamodel.jar”上传到jbpm-console.
>在jbpm-console中创建一个新的存储库并创建一个新的jbpm项目.
>通过项目编辑器将datamodel.jar作为依赖项添加到我的jbpm项目中.
>在jbpm项目中创建一个新进程.
>创建一个类型为acme.datamodel.UserBio的新流程变量.
>为我的特定于域的任务(Greeting.wid)创建一个新的工作项定义,如下所示:

import org.drools.core.process.core.datatype.impl.type.StringDataType;
import org.drools.core.process.core.datatype.impl.type.ObjectDataType;
[
  [
    "name" : "Greeting", 
    "parameters" : [ 
        "UserBio" : new ObjectDataType("acme.datamodel.UserBio") 
    ], 
    "results" : [ 
        "Result" : new ObjectDataType("java.util.Map") 
    ], 
    "displayName" : "Greeting", 
    "icon" : "../../../global/defaultservicenodeicon.png" 
  ]
]

>将特定于域的任务(问候)添加到我的流程工作流程.
>将步骤5中的流程变量映射为Greeting任务的输入参数.
>在外部jar(workitems.jar)中定义我的自定义工作项处理程序,如下所示:

package acme.workitem.greeting;

import java.util.Map;

import org.kie.api.runtime.process.WorkItem;
import org.kie.api.runtime.process.WorkItemManager;
import org.kie.internal.runtime.StatefulKnowledgeSession;

import acme.datamodel.UserBio;

public class GreetingWorkItemHandler implements WorkItemHandler {

        private StatefulKnowledgeSession ksession;

    public GreetingWorkItemHandler(StatefulKnowledgeSession ksession) {
            this.ksession = ksession;
        }

    public void executeWorkItem(WorkItem workItem, WorkItemManager workItemManager) {

        // Extract required parameters
        UserBio bio = (UserBio) workItem.getParameter("UserBio");

        // Do something

        // Notify manager that work item has been completed and return results
        Map<String, Object> results = new HashMap<String, Object>();
        workItemManager.completeWorkItem(workItem.getId(), results);
    }

    public void abortWorkItem(WorkItem workItem, WorkItemManager workItemManager) {
        // Can't abort a greeting work item handler
    }
}

>将workitems.jar复制到jbpm-installer / dependencies目录.
>编辑jbpm-installer / conf / META-INF / CustomWorkItemHandlers.conf并添加以下行:

"Greeting" : new acme.workitem.greeting.GreetingWorkItemHandler(ksession)

>重新安装jbpm demo(即jbpm-console)并重启jboss.
>在浏览器中加载jbpm-console,启动我的进程实例并尝试调用特定于域的任务.

毕竟,当加载特定于域的任务并调用自定义工作项处理程序时,我在jbpm-console中得到以下错误,但我的jboss日志中没有显示任何内容:

Unexpected error encountered : java.lang.NoClassDefFoundError:acme/datamodel/UserBio

自定义工作项处理程序是否未加载与调用它们的流程实例相同的类加载器?

我已经尝试将datamodel.jar添加到META-INF / lib目录下的workitems.jar中,但似乎没有改变任何东西.

我是否需要将datamodel.jar添加为Greeting.wid的依赖项?当jar文件已经上传到jbpm-console时,如何定义jar文件的位置?我是否只是将datamodel.jar复制到依赖项目录,就像我为workitems.jar所做的那样并重新安装jbpm-console?这不会导致与步骤2中上传到jbpm-console的版本发生潜在冲突吗?

这些只是我过去几天一直在努力解决的一些问题.我见过的处理自定义工作项处理程序的所有示例似乎都只传递了原语,而不是更复杂的对象.

如果有人能够解释我出错的地方或者向我指出更好的例子,我会非常感激.

解决方法:

通过部署datamodel jar和workitem jar,我能够成功调用自定义工作项处理程序.可以找到更多细节here.

标签:java,jboss,wildfly,jbpm
来源: https://codeday.me/bug/20190708/1403449.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有