当前位置: 首页 > 知识库问答 >
问题:

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

陆宇航
2023-03-14

我已经为此挣扎了几天,但运气不佳。在jboss Wildfly上运行的jBPM 6工作台中,我正在尝试调用自定义工作项处理程序并传入特定于域的对象的实例。

以下是我目前的流程:

>

  • 定义特定于域的类acme。数据模型。外部jar中的UserBio:datamodel。罐子

    通过“工件库”将“datamodel.jar”上传到jbpm控制台-

    在jbpm控制台中创建一个新的存储库,并创建一个新的jbpm项目。

    添加数据模型。jar作为通过项目编辑器对我的jbpm项目的依赖项。

    在jbpm项目中创建新流程。

    创建UserBio类型acme.datamodel.新过程变量。

    为我的领域特定任务(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中的流程变量映射为问候任务的输入参数。

    在外部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-安装程序/依赖项目录。

    编辑jbpm-install er/conf/META-INF/CustomWorkItemHandlers.conf并添加以下行:

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

    重新安装jbpm demo(即jbpm控制台)并重新启动jboss。

    在浏览器中加载jbpm控制台,启动我的流程实例并尝试调用特定于域的任务。

    在所有这些之后,当加载特定于域的任务并调用自定义工作项处理程序时,我在jbpm控制台中得到以下错误,但在我的jbosshtml" target="_blank">日志中没有显示任何内容:

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

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

    我尝试添加数据模型。挤进我的工作项目。META-INF/lib目录下的jar,但这似乎没有改变任何东西。

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

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

    如果有人能解释我哪里做错了,或者给我举个更好的例子,我将不胜感激。

  • 共有1个答案

    燕实
    2023-03-14

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

     类似资料:
    • 我试图爬过craiglist的论坛类别。组织机构(https://forums.craigslist.org/).我的蜘蛛: 我通过错误回调收到以下消息: [失败实例:Traceback:: /usr/local/lib/python2.7/site-packages/twisted/internet/defer.py: 455:回调 /usr/local/lib/python2.7/site-p

    • 我已经在ado板上创建了一个自定义字段,现在我想用REST API传递值给它,pls让我知道如果这是可能的?如果是,如何?请看下面的屏幕截图中的一个例子 如何通过REST API将值传递到屏幕快照中突出显示的自定义域

    • 我正在进行性能测试,为此我有以下加特林脚本- 在中,我有用户电子邮件和密码。我必须为feeder中的每封电子邮件生成一个令牌,并将其添加到中的header中。 有人能指导我如何发送相同的

    • 在,它表示可以向方法传递一个rect来更新部分屏幕。然而,我看到的所有示例都只是从程序中的图像或形状传递现有的rect。我如何告诉它直接更新屏幕上的某个区域?例如,在绘制矩形时,我可以使用rect参数。这将绘制一个矩形,顶部为200,左侧为100,宽度为30,高度为40。如何将类似的参数传递到?我尝试了,但这会更新整个窗口。

    • 我对Redux有相当的了解。 我想知道的一件事是,在一个大型应用程序中,会有多个操作和减缩器。 我的问题是 > reducer中是否存在重复操作? 即使当我查看redux流时,我也不理解这些问题 请澄清我的困惑。

    • 我正在使用PostgreSQL 9.5和jOOQ 3.8.4进行一些测试。 具体来说,我想创建一个如下的域名: 然后我想创建一个类型,如下所示: 最后,我有一个表,其中的类型作为字段,例如: 我看到jOOQ 3.8.4将字段映射为(在表记录和POJO中都有)。我期待的是,因为域使用的是。 我错了吗?如果没有,有没有办法克服这个问题? 也许我可以使用和来注册转换器,但我不确定它是否适用于用户定义的类