首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行java代码的JBPM6服务任务

执行java代码的JBPM6服务任务
EN

Stack Overflow用户
提问于 2015-03-03 06:22:56
回答 4查看 9K关注 0票数 7

我是JBPM6的新手。我的场景是这样的,我想使用JBPM服务task.From文档执行一些java代码,我无法理解如何在这种代码中使用特定于域的进程和工作项处理程序。如果有人有它的示例,请share.That将是非常有用的。

提前谢谢你。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-03 13:21:06

下面是如何在Eclipse项目中添加处理程序。我称它为“可怕的处理程序”,但您应该选择一个更具体的名称。

1)首先在src/main/resources/WorkItemDefinitions.wid中创建一个工作项定义文件。我的图标文件位于src/main/resources中。

代码语言:javascript
复制
import org.drools.core.process.core.datatype.impl.type.StringDataType;

[
  [
    "name" : "Awesome",
    "parameters" : [
      "Message1" : new StringDataType(),
       "Message2" : new StringDataType()
     ],
    "displayName" : "Awesome",
    "icon" : "icon-info.gif"
  ]
]

2)在src/main/resources/META-INF/CustomWorkItemHandlers.conf中创建工作项Handler Config文件

代码语言:javascript
复制
[
  "Awesome": new org.jbpm.examples.util.handler.AwesomeHandler()
]

3)创建drools会话配置文件: src/main/resources/META-INF/drools.session.conf

代码语言:javascript
复制
drools.workItemHandlers = CustomWorkItemHandlers.conf

4)创建您的Handler,以便它与您在步骤2中定义的类相匹配

代码语言:javascript
复制
public class AwesomeHandler implements WorkItemHandler {

    public AwesomeHandler() {
        super();
    }

    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
        System.out.println("Executing Awesome handler");
        manager.completeWorkItem(workItem.getId(), null);
    }

    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
        System.out.println("Aborting");
    }
}

5)在建立处理程序之后,必须向会话注册它。

代码语言:javascript
复制
//Get session
KieSession ksession = runtime.getKieSession();

//Register handlers
ksession.getWorkItemManager().registerWorkItemHandler("Awesome", new AwesomeHandler());

此时,您应该重新启动eclipse。eclipse打开时,调色板中应该有一个“自定义任务”选项卡。它应该包含一个带有指定图标的标有“Awesome”的条目。

票数 8
EN

Stack Overflow用户

发布于 2016-05-08 21:37:42

我知道这个问题已经回答了,但是我想做同样的事情(在服务任务中执行java代码),而不创建工作项定义(我不想使用自定义任务,而是使用服务任务)。我就是这样解决的:

这里,我读过关于ServiceTaskHandler的文章,但是我找不到关于使用的很好的信息。

我读取了ServiceTaskHandler代码,它使用反射来运行您的java代码。

我找到了 (它说jbpm 5-样例,但我用jbpm 6.3进行了测试),它使用一个服务任务,服务任务从您创建的一个类(HelloService)中执行"hello“方法:

代码语言:javascript
复制
package com.test;

import java.util.HashMap;
import java.util.Map;

public class HelloService {

    public DataOutput hello(com.test.DataInput name) {
        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("s", "Hello " + name.getDataMap().get("s") + "!");
        DataOutput output = new DataOutput(dataMap);
        return output;
    }

}

ServiceTaskHandler的注册方式与标记为正确的答案中的步骤(5)相同:

代码语言:javascript
复制
//Get session
KieSession ksession = runtime.getKieSession();

//Register handlers
ksession.getWorkItemManager().registerWorkItemHandler("Service Task",        new ServiceTaskHandler());

之后,我将服务任务与java类(HelloService - method hello)关联起来。为此,我使用了eclipse建模器,但我发现它不是很直观,所以我用modeler打开了示例的bpmn文件(BPMN2-ServiceProcess.bpmn2),并用我在那里看到的内容填充了我的服务任务。

票数 1
EN

Stack Overflow用户

发布于 2021-04-27 15:56:08

迈克,我真的希望你能看到我的评论,并愿意帮助我。所以我遵循了你提到的每一个步骤,但我仍然没有看到我的定制任务。

在这里输入图像描述

这是我的项目目录,我认为一切都是正确的,但是为了确保我只在这里发布代码

WorkItemDefinitions.wid:

代码语言:javascript
复制
import org.drools.core.process.core.datatype.impl.type.StringDataType;

    [
      [
        "name" : "Awesome",
        "parameters" : [
          "Message1" : new StringDataType(),
           "Message2" : new StringDataType()
         ],
        "displayName" : "Awesome",
        "icon" : "ezgif.com-apng-to-gif.gif"
      ]
    ]

drools.session.conf:

drools.workItemHandlers = CustomWorkItemHandlers.conf

CustomWorkItemHandlers.conf:

代码语言:javascript
复制
[
  "Awesome": new com.sample.AwesomeHandler()
]

AwsomeHandler.java:

代码语言:javascript
复制
package com.sample;

import org.kie.api.runtime.process.WorkItem;
import org.kie.api.runtime.process.WorkItemHandler;
import org.kie.api.runtime.process.WorkItemManager;

public class AwesomeHandler implements WorkItemHandler{
    
    public AwesomeHandler() {
        super();
    }


    @Override
    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
        // TODO Auto-generated method stub
        System.out.println("Executing Awesome handler");
        manager.completeWorkItem(workItem.getId(), null);
    }

    @Override
    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
        // TODO Auto-generated method stub
        System.out.println("Aborting");
    }

}

主要是:

代码语言:javascript
复制
TaskService taskService = engine.getTaskService();
ksession.getWorkItemManager().registerWorkItemHandler("Awesome", new AwesomeHandler());

我真的不知道我做错了什么,我需要这个作为我的罪魁祸首。我真的希望我能得到回复,祝你今天过得很好;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28825365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档