Skip to content

Commit

Permalink
JBPM-4852 TaskService.complete() throws NullPointerException without …
Browse files Browse the repository at this point in the history
…a meaningful message when a RuntimeManager with the deploymentId is not registered

resolved #350
  • Loading branch information
tkobayas authored and mswiderski committed Nov 27, 2015
1 parent a147312 commit e68026e
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 1 deletion.
Expand Up @@ -113,7 +113,11 @@ public void afterTaskCompletedEvent(TaskEvent event) {
if (processInstanceId <= 0) {
return;
}
RuntimeEngine runtime = getManager(task).getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId));
RuntimeManager manager = getManager(task);
if (manager == null) {
throw new RuntimeException("No RuntimeManager registered with identifier: " + task.getTaskData().getDeploymentId());
}
RuntimeEngine runtime = manager.getRuntimeEngine(ProcessInstanceIdContext.get(processInstanceId));
KieSession session = runtime.getKieSession();
if (session != null) {
logger.debug(">> I've recieved an event for a known session (" + task.getTaskData().getProcessSessionId()+")");
Expand Down
Expand Up @@ -52,7 +52,10 @@
import org.kie.api.runtime.manager.audit.NodeInstanceLog;
import org.kie.api.runtime.manager.audit.ProcessInstanceLog;
import org.kie.api.runtime.process.ProcessInstance;
import org.kie.api.task.TaskService;
import org.kie.api.task.UserGroupCallback;
import org.kie.api.task.model.Task;
import org.kie.api.task.model.TaskSummary;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.manager.context.EmptyContext;
import org.kie.internal.runtime.manager.context.ProcessInstanceIdContext;
Expand Down Expand Up @@ -470,4 +473,48 @@ public void testSignalEventViaRuntimeManager() {
// close manager which will close session maintained by the manager
manager.close();
}

@Test
public void testNonexistentDeploymentId() {
// JBPM-4852
RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get()
.newDefaultBuilder()
.userGroupCallback(userGroupCallback)
.addAsset(ResourceFactory.newClassPathResource("BPMN2-UserTask.bpmn2"), ResourceType.BPMN2)
.get();

RuntimeManager manager1 = RuntimeManagerFactory.Factory.get().newPerRequestRuntimeManager(environment, "id-1");
RuntimeEngine runtime1 = manager1.getRuntimeEngine(EmptyContext.get());
KieSession ksession1 = runtime1.getKieSession();

ProcessInstance processInstance = ksession1.startProcess("UserTask");

manager1.disposeRuntimeEngine(runtime1);
manager1.close(); // simulating server reboot

RuntimeManager manager2 = RuntimeManagerFactory.Factory.get().newPerRequestRuntimeManager(environment, "id-2");
RuntimeEngine runtime2 = manager2.getRuntimeEngine(EmptyContext.get());
TaskService taskService2 = runtime2.getTaskService();

List<TaskSummary> taskList = taskService2.getTasksAssignedAsPotentialOwner("john", "en-UK");
assertEquals(1, taskList.size());

Long taskId = taskList.get(0).getId();
Task task = taskService2.getTaskById(taskId);
assertEquals("id-1", task.getTaskData().getDeploymentId());

taskService2.start(taskId, "john");

try {
taskService2.complete(taskId, "john", null);
} catch (NullPointerException npe) {
fail("NullPointerException is thrown");
} catch (RuntimeException re) {
// RuntimeException with a better message
assertEquals("No RuntimeManager registered with identifier: id-1", re.getMessage());
}

manager2.disposeRuntimeEngine(runtime2);
manager2.close();
}
}

0 comments on commit e68026e

Please sign in to comment.