我是JBPM6的新手。我的场景是这样的,我想使用JBPM服务task.From文档执行一些java代码,我无法理解如何在这种代码中使用特定于域的进程和工作项处理程序。如果有人有它的示例,请share.That将是非常有用的。
提前谢谢你。
发布于 2015-03-03 13:21:06
下面是如何在Eclipse项目中添加处理程序。我称它为“可怕的处理程序”,但您应该选择一个更具体的名称。
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中创建工作项Handler Config文件
[
"Awesome": new org.jbpm.examples.util.handler.AwesomeHandler()
]3)创建drools会话配置文件: src/main/resources/META-INF/drools.session.conf
drools.workItemHandlers = CustomWorkItemHandlers.conf4)创建您的Handler,以便它与您在步骤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”的条目。
发布于 2016-05-08 21:37:42
我知道这个问题已经回答了,但是我想做同样的事情(在服务任务中执行java代码),而不创建工作项定义(我不想使用自定义任务,而是使用服务任务)。我就是这样解决的:
这里,我读过关于ServiceTaskHandler的文章,但是我找不到关于使用的很好的信息。
我读取了ServiceTaskHandler代码,它使用反射来运行您的java代码。
我找到了这 (它说jbpm 5-样例,但我用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<String, Object> dataMap = new HashMap<String, Object>();
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 - method hello)关联起来。为此,我使用了eclipse建模器,但我发现它不是很直观,所以我用modeler打开了示例的bpmn文件(BPMN2-ServiceProcess.bpmn2),并用我在那里看到的内容填充了我的服务任务。
发布于 2021-04-27 15:56:08
迈克,我真的希望你能看到我的评论,并愿意帮助我。所以我遵循了你提到的每一个步骤,但我仍然没有看到我的定制任务。
这是我的项目目录,我认为一切都是正确的,但是为了确保我只在这里发布代码
WorkItemDefinitions.wid:
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:
[
"Awesome": new com.sample.AwesomeHandler()
]AwsomeHandler.java:
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");
}
}主要是:
TaskService taskService = engine.getTaskService();
ksession.getWorkItemManager().registerWorkItemHandler("Awesome", new AwesomeHandler());我真的不知道我做错了什么,我需要这个作为我的罪魁祸首。我真的希望我能得到回复,祝你今天过得很好;)
https://stackoverflow.com/questions/28825365
复制相似问题