JBPM6 Service task to execute java code

前端 未结 3 1969
猫巷女王i
猫巷女王i 2020-12-10 16:35

I am new in JBPM6. My scenario is like this that i want to execute some java code using JBPM service task.From documentation i am not able to understand how to use domain sp

相关标签:
3条回答
  • 2020-12-10 17:10

    Here is how to add a handler inside a Eclipse maven project. I call it the Awesome handler, but your should pick a more specific name.

    1) First create a work item definition file in src/main/resources/WorkItemDefinitions.wid. My icon file is located in 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) Create a Work Item Handler Config file in src/main/resources/META-INF/CustomWorkItemHandlers.conf

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

    3) Create a drools session config file: src/main/resources/META-INF/drools.session.conf

    drools.workItemHandlers = CustomWorkItemHandlers.conf
    

    4) Create your Handler so that it matches the class you defined in step 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) After you establish the handler, you must register it with your session.

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

    At this point you should restart eclipse. When eclipse opens, there should be a 'Custom Tasks' tab in the palette. It should contain an entry labeled 'Awesome' with the specified icon.

    0 讨论(0)
  • 2020-12-10 17:13

    Apart from the (excellent) example provided by Mike, if your only goal is to execute some Java code, you can consider using a Script task instead (and just embed the Java code in your process) or reuse the already existing Service Task that can invoke an operation on a Java class.

    0 讨论(0)
  • 2020-12-10 17:15

    I know the question is already answered, but I wanted to do the same (execute java code in service task) without creating work item definition (I did't want to use a custom task but a service task as it is). This is how I solved it:

    here I read about the ServiceTaskHandler but I couldn't find very good info about the usage.

    I read the ServiceTaskHandler code, it uses reflection to run your java code.

    I found this (it says jbpm5-samples but I tested with jbpm 6.3), it uses a service task, the service task executes method "hello" from a Class (HelloService) you create:

    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;
        }
    
    }
    

    The ServiceTaskHandler is registered the same way as the step (5) in the answer marked correct:

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

    After that I associated the service task with the java class (HelloService - method hello). To do that I used the eclipse bpmn modeler but I didn't find it very intuitive, so I opened the sample's bpmn file (BPMN2-ServiceProcess.bpmn2) with the modeler and filled my service task with the same stuff I read there.

    0 讨论(0)
提交回复
热议问题