JBPM6服务任务执行java代码

我是JBPM6的新手。 我的场景是这样的,我想使用JBPM服务任务执行一些Java代码。从文档中我无法理解如何在这种类型的代码中使用特定于域的进程和工作项处理程序。 如果有人有示例,请分享。这将非常有帮助。

先谢谢你。

以下是如何在Eclipse maven项目中添加处理程序。 我把它称为Awesome处理程序,但你应该选择一个更具体的名称。

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

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中创建工作项处理程序配置文件

 [ "Awesome": new org.jbpm.examples.util.handler.AwesomeHandler() ] 

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

 drools.workItemHandlers = CustomWorkItemHandlers.conf 

4)创建您的处理程序,使其与您在步骤2中定义的类匹配

 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)建立处理程序后,必须在会话中注册它。

 //Get session KieSession ksession = runtime.getKieSession(); //Register handlers ksession.getWorkItemManager().registerWorkItemHandler("Awesome", new AwesomeHandler()); 

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

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

在这里我读到了ServiceTaskHandler但我找不到关于用法的非常好的信息。

我读了ServiceTaskHandler代码,它使用reflection来运行你的java代码。

我发现了这个 (它说jbpm5-samples,但是我用jbpm 6.3测试过),它使用服务任务,服务任务从你创建的类(HelloService)执行方法“hello”:

 package com.test; import java.util.HashMap; import java.util.Map; public class HelloService { public DataOutput hello(com.test.DataInput name) { Map dataMap = new HashMap(); dataMap.put("s", "Hello " + name.getDataMap().get("s") + "!"); DataOutput output = new DataOutput(dataMap); return output; } } 

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

 //Get session KieSession ksession = runtime.getKieSession(); //Register handlers ksession.getWorkItemManager().registerWorkItemHandler("Service Task", new ServiceTaskHandler()); 

之后,我将服务任务与java类(HelloService – 方法hello)相关联。 为此,我使用了eclipse bpmn建模器,但我没有发现它非常直观,因此我使用建模器打开了样本的bpmn文件(BPMN2-ServiceProcess.bpmn2),并用我在那里阅读的相同内容填充了我的服务任务。

除了Mike提供的(优秀)示例之外,如果您的唯一目标是执行某些Java代码,则可以考虑使用脚本任务(并在您的流程中嵌入Java代码)或重用已经存在的服务任务在Java类上调用操作。