Retrieving the number of tasks assigned to an owner in TaskLifeCycleEventListener
akoskm Dec 3, 2014 5:06 AMI already asked this on #jbpm but so far I have no idea how to implement this.
I want to retrieve the number of tasks assigned to an owner, _after_ the task data is persisted.
For this purpose I implemented the TaskLifeCycleEventListener interface and the afterTaskAddedEvent method like:
@Override public void afterTaskAddedEvent(TaskEvent event) { PeopleAssignments ppa = event.getTask().getPeopleAssignments(); if (ppa != null) { for (OrganizationalEntity oe : ppa.getPotentialOwners()) { Long taskCount = kbManager.getTaskCountByPotentialOwner(oe.getId()); // do something with taskCount } } }
I guess the problem is that I'm executing my query in a new transaction, because the tasks list is always empty . Here is the method I'm calling in from the listener:
public long getTaskCountByPotentialOwner(String owner) { Query q = this.em.createNamedQuery("NewTasksAssignedAsPotentialOwner"); List<Status> newStatus = new ArrayList(); newStatus.add(Status.Ready); newStatus.add(Status.InProgress); newStatus.add(Status.Reserved); q.setParameter("userId", owner); q.setParameter("status", newStatus); q.setParameter("groupIds", GROUP_ID); Collection<AuditTaskImpl> tasks = q.getResultList(); if (tasks == null || tasks.size() == 0) { return 0; } return tasks.size(); }
Note that the this.em I'm using here is created from the same EntityManagerFactory which is used to create my RuntimeEnvironment:
RuntimeEnvironment environment = RuntimeEnvironmentBuilder.getDefault() .persistence(true) .entityManagerFactory(emf) .userGroupCallback(this.getUsersAndGroups()) .knowledgeBase(kbase) .registerableItemsFactory(new DefaultRegisterableItemsFactory() { @Override public List<TaskLifeCycleEventListener> getTaskListeners() { List<TaskLifeCycleEventListener> defaultListeners = new ArrayList<>(); defaultListeners.add(new JPATaskLifeCycleEventListener()); // add any custom listeners defaultListeners.addAll(super.getTaskListeners()); // add listeners from deployment descriptor defaultListeners.addAll(getTaskListenersFromDescriptor()); defaultListeners.add(new MyTaskLifeCycleEventListener()); return defaultListeners; } }) .get();