package com.sample; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ejb.Stateless; import javax.persistence.EntityManagerFactory; import javax.persistence.PersistenceUnit; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.SystemEventListenerFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; import org.drools.persistence.jpa.JPAKnowledgeService; import org.drools.runtime.Environment; import org.drools.runtime.EnvironmentName; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.process.ProcessInstance; import org.jbpm.process.audit.JPAWorkingMemoryDbLogger; import org.jbpm.process.workitem.wsht.SyncWSHumanTaskHandler; import org.jbpm.task.TaskService; import org.jbpm.task.query.TaskSummary; import org.jbpm.task.service.local.LocalTaskService; import org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl; @Stateless public class HelloBean implements HelloLocal { private static KnowledgeBase kbase; @PersistenceUnit(unitName = "org.jbpm.persistence.jpa") private EntityManagerFactory emf; private static long pid; public long startProcess() throws Exception { // load up the knowledge base kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = createKnowledgeSession(); TaskService localTaskService = getTaskService(ksession); // start a new process instance Map<String, Object> params = new HashMap<String, Object>(); params.put("employee", "krisv"); ProcessInstance processInstance = ksession .startProcess("com.sample.bpmn.hello", params); long processInstanceId = processInstance.getId(); System.out.println("Process started ... : processInstanceId = " + processInstanceId); pid = processInstanceId; return processInstanceId; } public String retrieveTaskByJohn() { StatefulKnowledgeSession ksession = createKnowledgeSession(); TaskService localTaskService = getTaskService(ksession); WorkflowProcessInstanceImpl processInstance = (WorkflowProcessInstanceImpl)ksession.getProcessInstance(pid); String value = (String)processInstance.getVariable("employee"); System.out.println("Process Variable : employee = " + value); processInstance.setVariable("employee", "krisv2"); List<TaskSummary> list = localTaskService .getTasksAssignedAsPotentialOwner("john", "en-UK"); for (TaskSummary task : list) { System.out.println("task.getId() = " + task.getId()); System.out.println("task.getProcessInstanceId() = " + task.getProcessInstanceId()); System.out.println("John is executing task " + task.getName()); localTaskService.start(task.getId(), "john"); localTaskService.complete(task.getId(), "john", null); } return "Done!"; } public String retrieveTaskByMary() { StatefulKnowledgeSession ksession = createKnowledgeSession(); TaskService localTaskService = getTaskService(ksession); WorkflowProcessInstanceImpl processInstance = (WorkflowProcessInstanceImpl)ksession.getProcessInstance(pid); String value = (String)processInstance.getVariable("employee"); System.out.println("Process Variable : employee = " + value); processInstance.setVariable("employee", "krisv3"); List<TaskSummary> list = localTaskService .getTasksAssignedAsPotentialOwner("mary", "en-UK"); for (TaskSummary task : list) { System.out.println("task.getId() = " + task.getId()); System.out.println("task.getProcessInstanceId() = " + task.getProcessInstanceId()); System.out.println("Mary is executing task " + task.getName()); localTaskService.start(task.getId(), "mary"); localTaskService.complete(task.getId(), "mary", null); } return "Done!"; } private StatefulKnowledgeSession createKnowledgeSession() { Environment env = KnowledgeBaseFactory.newEnvironment(); env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf); StatefulKnowledgeSession ksession = JPAKnowledgeService .newStatefulKnowledgeSession(kbase, null, env); new JPAWorkingMemoryDbLogger(ksession); return ksession; } public TaskService getTaskService(StatefulKnowledgeSession ksession) { org.jbpm.task.service.TaskService taskService = new org.jbpm.task.service.TaskService( emf, SystemEventListenerFactory.getSystemEventListener()); LocalTaskService localTaskService = new LocalTaskService(taskService); SyncWSHumanTaskHandler humanTaskHandler = new SyncWSHumanTaskHandler( localTaskService, ksession); humanTaskHandler.setLocal(true); humanTaskHandler.connect(); ksession.getWorkItemManager().registerWorkItemHandler("Human Task", humanTaskHandler); return localTaskService; } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("sample.bpmn"), ResourceType.BPMN2); return kbuilder.newKnowledgeBase(); } }