在实际应用的BPM流程中经常需要日志记录某些信息,jBPM5中的Log Service Tasks可以完成这一任务。Logging流程示意图如下:
如图Logging流程就包括一个Service Tasks节点Log,用来记录日志输出,在设计流程时我们设计日志输出消息为#{msg},即输出流程中的msg变量。
package org.jbpm.quickstarts.logging; import java.util.HashMap; import java.util.Map; import org.drools.runtime.StatefulKnowledgeSession; import org.jbpm.quickstarts.QuickStartBase; public class LoggingStart extends QuickStartBase{ public void test() { StatefulKnowledgeSession ksession = createKnowledgeSession("quickstarts/logging.bpmn"); ksession.getWorkItemManager().registerWorkItemHandler("Log", new LoggingWorkItemHandler()); Map<String, Object> params = new HashMap<String, Object>(); params.put("msg", "Test Logging Message"); ksession.startProcess("org.jbpm.quickstarts.logging", params); } public static void main(String[] args) { new LoggingStart().test(); } }
package org.jbpm.quickstarts.logging; import java.util.logging.Logger; import org.drools.process.instance.WorkItemHandler; import org.drools.runtime.process.WorkItem; import org.drools.runtime.process.WorkItemManager; public class LoggingWorkItemHandler implements WorkItemHandler { private static final Logger logger = Logger.getLogger(LoggingWorkItemHandler.class.getName()); public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { logger.info(workItem.toString()); manager.completeWorkItem(workItem.getId(), null); } public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { manager.abortWorkItem(workItem.getId()); } }
Oct 29, 2013 2:29:10 PM org.jbpm.quickstarts.logging.LoggingWorkItemHandler executeWorkItem INFO: WorkItem 1 [name=Log, state=0, processInstanceId=1, parameters{Message=Test Logging Message}]