I decided to use the start event because so I can use a TaskQuery instead of HistoryTaskQuery. I just want to gain access to the properties of the task the transition originates from.
process definition: | <?xml version="1.0" encoding="UTF-8"?> | | <process name="process" xmlns="http://jbpm.org/4.0/jpdl" key="process" version="1"> | <start name="start1" g="74,95,48,48"> | <transition name="to task1" to="task1" g="1,-23"/> | </start> | <end name="end1" g="73,270,48,48"/> | <task name="task1" g="215,141,92,52" assignee="alex"> | <on event="start"> | <event-listener class="listeners.TaskEventListener" /> | </on> | <transition name="to task2" to="task2" g="-50,-21"/> | </task> | <task name="task2" g="214,270,92,52" assignee="mike"> | <transition name="to end1" to="end1" g="-48,-21"/> | </task> | </process> | EventListener: | package listeners; | | import java.util.Set; | | import org.jbpm.api.Configuration; | import org.jbpm.api.ProcessEngine; | import org.jbpm.api.TaskService; | import org.jbpm.api.listener.EventListener; | import org.jbpm.api.listener.EventListenerExecution; | import org.jbpm.api.task.Task; | | public class TaskEventListener implements EventListener { | | private static final long serialVersionUID = 1L; | private ProcessEngine processEngine; | private TaskService taskService; | | public TaskEventListener() { | processEngine = Configuration.getProcessEngine(); | taskService = processEngine.getTaskService(); | } | | @Override | public void notify(EventListenerExecution execution) throws Exception { | Set<String> activities = execution.findActiveActivityNames(); | String activityName = activities.iterator().next(); | // this works: task1 (= the name of the activity is shown) | System.out.println(activityName); | // this does not work, getting null here | Task task = taskService.createTaskQuery().activityName(activityName).uniqueResult(); | System.out.println(task); | } | | } | Unit test: | package tests; | | | import java.util.List; | | import org.jbpm.api.Configuration; | import org.jbpm.api.ProcessEngine; | import org.jbpm.api.ProcessInstance; | import org.jbpm.api.task.Task; | import org.jbpm.test.JbpmTestCase; | | public class TaskEventListenerTest extends JbpmTestCase { | | String deploymentId; | | protected void setUp() throws Exception { | super.setUp(); | ProcessEngine engine = Configuration.getProcessEngine(); | deploymentId = engine.getRepositoryService().createDeployment().addResourceFromClasspath("process.jpdl.xml").deploy(); | } | | public void testTaskEventListener() { | ProcessInstance processInstance = executionService.startProcessInstanceByKey("process"); | List<Task> tasks = taskService.findPersonalTasks("alex"); | taskService.completeTask(tasks.get(0).getId()); | tasks = taskService.findPersonalTasks("mike"); | taskService.completeTask(tasks.get(0).getId()); | } | | protected void tearDown() throws Exception { | repositoryService.deleteDeploymentCascade(deploymentId); | super.tearDown(); | } | | } | Why is the task not found using the TaskQuery? My second question would be: Why is there a citeria called processInstanceId although as far as I recall the class Task has a member variable called executionId and so is associated with its execution and not with its process instance, right? http://docs.jboss.com/jbpm/v4/javadocs/org/jbpm/api/task/Task.html Anyway the activityName is a better criteria because I might have several tasks active at the same time. View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4264017#4264017 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4264017 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user