-
1. Re: New Local human task service in JBPM5.2
calca Dec 13, 2011 5:23 AM (in response to ossa)I thinks this test shows it:
Thanks
Demian
-
2. Re: New Local human task service in JBPM5.2
bpmn2user Dec 13, 2011 10:59 AM (in response to ossa)1 of 1 people found this helpfulHere is an exmaple:
-
3. Re: New Local human task service in JBPM5.2
ossa Dec 14, 2011 1:05 AM (in response to ossa)thanks guys.
I have got this error when I try to start a new process instance. This is my code. Any solution to this?
factory = Persistence.createEntityManagerFactory("org.jbpm.task");
TaskService tService = new TaskService(factory,SystemEventListenerFactory.getSystemEventListener())
TaskServiceSession tSession = tService.createSession();
org.jbpm.task.TaskService client = new org.jbpm.task.service.local.LocalTaskService(tSession);
SyncWSHumanTaskHandler handler = new SyncWSHumanTaskHandler(client, session);
handler.connect();
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:269)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:170)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at iwork.common.web.ControllerServlet.service(ControllerServlet.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:223)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at iwork.common.web.TransactionCheckFilter.doFilter(TransactionCheckFilter.java:49)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at iwork.common.web.RequestLoggingFilter.doFilter(RequestLoggingFilter.java:176)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3243)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2003)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1909)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Caused by: java.lang.NoSuchMethodError: org.jbpm.task.service.TaskServiceSession.getService()Lorg/jbpm/task/service/TaskService;
at org.jbpm.task.service.local.LocalTaskService.registerForEvent(LocalTaskService.java:188)
at org.jbpm.process.workitem.wsht.SyncWSHumanTaskHandler.registerTaskEvents(SyncWSHumanTaskHandler.java:115)
at org.jbpm.process.workitem.wsht.SyncWSHumanTaskHandler.connect(SyncWSHumanTaskHandler.java:103)
... 35 more
-
4. Re: New Local human task service in JBPM5.2
ossa Dec 14, 2011 1:46 AM (in response to ossa)Hi the error the gone after undeploy and redeploy my application to weblogic server. I think the jbpm5.1 jar were cached by weblogic somewhere. It was not an jBPM issue.
The SyncWSHumanTaskHandler is working like a charm ~!
Btw, for those who is interested to use the same core engine transaction for your human task. You need to set the transactionType in your java code.
TaskServiceSession tSession = newTaskService().createSession(); tSession.setTransactionType("local-JTA"); -
5. Re: New Local human task service in JBPM5.2
thomastn Dec 19, 2011 4:51 PM (in response to ossa)Hi
Have you managed to deploy jbpm5.1 or jpbm 5.2 to weblogic? If so can you give me some hints? We are struggeling with jpbm5.1 on WLS 10.3.4. Can create HumanTasks but fails when we try to get them. If you can share your prersistance.xml and the code for setting up the task server I would be happy:)
-
6. Re: New Local human task service in JBPM5.2
devilkazuya99 May 11, 2012 12:33 AM (in response to calca)Demian Calcaprina wrote:
I thinks this test shows it:
Thanks
Demian
The file is no longer in Github... any where else I can find it?
-
7. Re: New Local human task service in JBPM5.2
devilkazuya99 May 11, 2012 1:06 AM (in response to devilkazuya99)/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.process.workitem.wsht.local.sync; import org.jbpm.process.workitem.wsht.SyncWSHumanTaskHandler; import org.jbpm.process.workitem.wsht.sync.WSHumanTaskHandlerBaseSyncTest; import org.jbpm.task.service.TaskServer; import org.jbpm.task.service.local.LocalTaskService; public class WSHumanTaskHandlerLocalSyncTest extends WSHumanTaskHandlerBaseSyncTest { private TaskServer server; @Override protected void setUp() throws Exception { super.setUp(); setClient(new LocalTaskService(taskService)); setHandler(new SyncWSHumanTaskHandler(getClient(), ksession)); } protected void tearDown() throws Exception { ((SyncWSHumanTaskHandler) getHandler()).dispose(); getClient().disconnect(); super.tearDown(); } }
/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jbpm.process.workitem.wsht.sync; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.drools.process.instance.impl.WorkItemImpl; import org.drools.runtime.process.WorkItemHandler; import org.drools.runtime.process.WorkItemManager; import org.jbpm.process.workitem.wsht.MyObject; import org.jbpm.process.workitem.wsht.SyncWSHumanTaskHandler; import org.jbpm.task.AccessType; import org.jbpm.task.BaseTest; import org.jbpm.task.Status; import org.jbpm.task.Task; import org.jbpm.task.TaskService; import org.jbpm.task.TestStatefulKnowledgeSession; import org.jbpm.task.query.TaskSummary; import org.jbpm.task.service.ContentData; import org.jbpm.task.service.PermissionDeniedException; import org.jbpm.task.utils.OnErrorAction; public abstract class WSHumanTaskHandlerBaseSyncTest extends BaseTest { private static final int DEFAULT_WAIT_TIME = 5000; private static final int MANAGER_COMPLETION_WAIT_TIME = DEFAULT_WAIT_TIME; private static final int MANAGER_ABORT_WAIT_TIME = DEFAULT_WAIT_TIME; private TaskService client; private WorkItemHandler handler; protected TestStatefulKnowledgeSession ksession = new TestStatefulKnowledgeSession(); public void setClient(TaskService client) { this.client = client; } public TaskService getClient() { return client; } public void testTask() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setProcessInstanceId(10); handler.executeWorkItem(workItem, manager); List tasks = client.getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("TaskName", task.getName()); assertEquals(10, task.getPriority()); assertEquals("Comment", task.getDescription()); assertEquals(Status.Reserved, task.getStatus()); assertEquals("Darth Vader", task.getActualOwner().getId()); assertEquals(10, task.getProcessInstanceId()); client.start(task.getId(), "Darth Vader"); client.complete(task.getId(), "Darth Vader", null); assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME)); } public void testTaskMultipleActors() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader, Dalai Lama"); getHandler().executeWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("TaskName", task.getName()); assertEquals(10, task.getPriority()); assertEquals("Comment", task.getDescription()); assertEquals(Status.Ready, task.getStatus()); getClient().claim(task.getId(), "Darth Vader"); getClient().start(task.getId(), "Darth Vader"); getClient().complete(task.getId(), "Darth Vader", null); assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME)); } public void testTaskGroupActors() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("GroupId", "Crusaders"); getHandler().executeWorkItem(workItem, manager); List groupIds = new ArrayList(); groupIds.add("Crusaders"); List tasks = getClient().getTasksAssignedAsPotentialOwner(null, groupIds, "en-UK"); assertEquals(1, tasks.size()); TaskSummary taskSummary = tasks.get(0); assertEquals("TaskName", taskSummary.getName()); assertEquals(10, taskSummary.getPriority()); assertEquals("Comment", taskSummary.getDescription()); assertEquals(Status.Ready, taskSummary.getStatus()); PermissionDeniedException denied = null; try { getClient().claim(taskSummary.getId(), "Darth Vader"); } catch (PermissionDeniedException e) { denied = e; } assertNotNull("Should get permissed denied exception", denied); //Check if the parent task is InProgress Task task = getClient().getTask(taskSummary.getId()); assertEquals(Status.Ready, task.getTaskData().getStatus()); } public void testTaskSingleAndGroupActors() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task One"); workItem.setParameter("TaskName", "TaskNameOne"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("GroupId", "Crusaders"); getHandler().executeWorkItem(workItem, manager); workItem = new WorkItemImpl(); workItem.setName("Human Task Two"); workItem.setParameter("TaskName", "TaskNameTwo"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); getHandler().executeWorkItem(workItem, manager); List groupIds = new ArrayList(); groupIds.add("Crusaders"); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", groupIds, "en-UK"); assertEquals(2, tasks.size()); } public void testTaskFail() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); getHandler().executeWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("TaskName", task.getName()); assertEquals(10, task.getPriority()); assertEquals("Comment", task.getDescription()); assertEquals(Status.Reserved, task.getStatus()); assertEquals("Darth Vader", task.getActualOwner().getId()); getClient().start(task.getId(), "Darth Vader"); getClient().fail(task.getId(), "Darth Vader", null); assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME)); } public void testTaskSkip() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); getHandler().executeWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("TaskName", task.getName()); assertEquals(10, task.getPriority()); assertEquals("Comment", task.getDescription()); assertEquals(Status.Reserved, task.getStatus()); assertEquals("Darth Vader", task.getActualOwner().getId()); getClient().skip(task.getId(), "Darth Vader"); assertTrue(manager.waitTillAborted(MANAGER_ABORT_WAIT_TIME)); } public void testTaskExit() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); getHandler().executeWorkItem(workItem, manager); Task task = getClient().getTaskByWorkItemId(workItem.getId()); getClient().exit(task.getId(), "Administrator"); task = getClient().getTaskByWorkItemId(workItem.getId()); assertEquals("TaskName", task.getNames().get(0).getText()); assertEquals(10, task.getPriority()); assertEquals("Comment", task.getDescriptions().get(0).getText()); assertEquals(Status.Exited, task.getTaskData().getStatus()); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(0, tasks.size()); } public void testTaskExitNonAdministrator() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); getHandler().executeWorkItem(workItem, manager); Task task = getClient().getTaskByWorkItemId(workItem.getId()); try { getClient().exit(task.getId(), "Darth Vader"); fail("Should not allow to exit task for non administrators"); } catch (PermissionDeniedException e) { } List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary taskSummary = tasks.get(0); assertEquals("TaskName", taskSummary.getName()); assertEquals(10, taskSummary.getPriority()); assertEquals("Comment", taskSummary.getDescription()); assertEquals(Status.Reserved, taskSummary.getStatus()); assertEquals("Darth Vader", taskSummary.getActualOwner().getId()); } public void testTaskAbortSkippable() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); getHandler().executeWorkItem(workItem, manager); getHandler().abortWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(0, tasks.size()); } public void testTaskAbortNotSkippable() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setParameter("Skippable", "false"); getHandler().executeWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); getHandler().abortWorkItem(workItem, manager); // aborting work item will exit task and not skip it tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(0, tasks.size()); } public void testTaskData() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setParameter("Content", "This is the content"); getHandler().executeWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary taskSummary = tasks.get(0); assertEquals("TaskName", taskSummary.getName()); assertEquals(10, taskSummary.getPriority()); assertEquals("Comment", taskSummary.getDescription()); assertEquals(Status.Reserved, taskSummary.getStatus()); assertEquals("Darth Vader", taskSummary.getActualOwner().getId()); Task task = getClient().getTask(taskSummary.getId()); assertEquals(AccessType.Inline, task.getTaskData().getDocumentAccessType()); assertEquals(task.getTaskData().getProcessSessionId(), TestStatefulKnowledgeSession.testSessionId); long contentId = task.getTaskData().getDocumentContentId(); assertTrue(contentId != -1); ByteArrayInputStream bis = new ByteArrayInputStream(getClient().getContent(contentId).getContent()); ObjectInputStream in = new ObjectInputStream(bis); Object data = in.readObject(); in.close(); assertEquals("This is the content", data); getClient().start(task.getId(), "Darth Vader"); ContentData result = new ContentData(); result.setAccessType(AccessType.Inline); result.setType("java.lang.String"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject("This is the result"); out.close(); result.setContent(bos.toByteArray()); getClient().complete(task.getId(), "Darth Vader", result); assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME)); Map results = manager.getResults(); assertNotNull(results); assertEquals("Darth Vader", results.get("ActorId")); assertEquals("This is the result", results.get("Result")); } public void testTaskDataAutomaticMapping() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); MyObject myObject = new MyObject("MyObjectValue"); workItem.setParameter("MyObject", myObject); Map mapParameter = new HashMap(); mapParameter.put("MyObjectInsideTheMap", myObject); workItem.setParameter("MyMap", mapParameter); workItem.setParameter("MyObject", myObject); getHandler().executeWorkItem(workItem, manager); List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary taskSummary = tasks.get(0); assertEquals("TaskName", taskSummary.getName()); assertEquals(10, taskSummary.getPriority()); assertEquals("Comment", taskSummary.getDescription()); assertEquals(Status.Reserved, taskSummary.getStatus()); assertEquals("Darth Vader", taskSummary.getActualOwner().getId()); Task task = getClient().getTask(taskSummary.getId()); assertEquals(AccessType.Inline, task.getTaskData().getDocumentAccessType()); long contentId = task.getTaskData().getDocumentContentId(); assertTrue(contentId != -1); ByteArrayInputStream bis = new ByteArrayInputStream(getClient().getContent(contentId).getContent()); ObjectInputStream in = new ObjectInputStream(bis); Map data = (Map) in.readObject(); in.close(); //Checking that the input parameters are being copied automatically if the Content Element doesn't exist assertEquals("MyObjectValue", ((MyObject) data.get("MyObject")).getValue()); assertEquals("10", data.get("Priority")); assertEquals("MyObjectValue", ((MyObject) ((Map) data.get("MyMap")).get("MyObjectInsideTheMap")).getValue()); getClient().start(task.getId(), "Darth Vader"); ContentData result = new ContentData(); result.setAccessType(AccessType.Inline); result.setType("java.lang.String"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject("This is the result"); out.close(); result.setContent(bos.toByteArray()); getClient().complete(task.getId(), "Darth Vader", result); assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME)); Map results = manager.getResults(); assertNotNull(results); assertEquals("Darth Vader", results.get("ActorId")); assertEquals("This is the result", results.get("Result")); } public void testTaskCreateFailedWithLog() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); if (handler instanceof SyncWSHumanTaskHandler) { ((SyncWSHumanTaskHandler) handler).setAction(OnErrorAction.LOG); } ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "DoesNotExist"); workItem.setProcessInstanceId(10); handler.executeWorkItem(workItem, manager); assertFalse(manager.isAborted()); } public void testTaskCreateFailedWithAbort() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); if (handler instanceof SyncWSHumanTaskHandler) { ((SyncWSHumanTaskHandler) handler).setAction(OnErrorAction.ABORT); } ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "DoesNotExist"); workItem.setProcessInstanceId(10); handler.executeWorkItem(workItem, manager); assertTrue(manager.isAborted()); } public void testTaskCreateFailedWithRethrow() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); if (handler instanceof SyncWSHumanTaskHandler) { ((SyncWSHumanTaskHandler) handler).setAction(OnErrorAction.RETHROW); } ksession.setWorkItemManager(manager); WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskName"); workItem.setParameter("Comment", "Comment"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "DoesNotExist"); workItem.setProcessInstanceId(10); try { handler.executeWorkItem(workItem, manager); fail("Should fail due to OnErroAction set to rethrow"); } catch (Exception e) { // do nothing } } public void TODOtestOnAllSubTasksEndParentEndStrategy() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); //Create the parent task WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskNameParent"); workItem.setParameter("Comment", "CommentParent"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); //Set the subtask policy workItem.setParameter("SubTaskStrategies", "OnAllSubTasksEndParentEnd"); getHandler().executeWorkItem(workItem, manager); //Test if the task is succesfully created List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("TaskNameParent", task.getName()); assertEquals(10, task.getPriority()); assertEquals("CommentParent", task.getDescription()); assertEquals(Status.Reserved, task.getStatus()); assertEquals("Darth Vader", task.getActualOwner().getId()); //Create the child task workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskNameChild1"); workItem.setParameter("Comment", "CommentChild1"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setParameter("ParentId", task.getId()); getHandler().executeWorkItem(workItem, manager); //Create the child task2 workItem = new WorkItemImpl(); workItem.setName("Human Task2"); workItem.setParameter("TaskName", "TaskNameChild2"); workItem.setParameter("Comment", "CommentChild2"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setParameter("ParentId", task.getId()); getHandler().executeWorkItem(workItem, manager); //Start the parent task getClient().start(task.getId(), "Darth Vader"); //Check if the parent task is InProgress Task parentTask = getClient().getTask(task.getId()); assertEquals(Status.InProgress, parentTask.getTaskData().getStatus()); assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner()); //Get all the subtask created for the parent task based on the potential owner List subTasks = getClient().getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK"); assertEquals(2, subTasks.size()); TaskSummary subTaskSummary1 = subTasks.get(0); TaskSummary subTaskSummary2 = subTasks.get(1); assertNotNull(subTaskSummary1); assertNotNull(subTaskSummary2); //Starting the sub task 1 getClient().start(subTaskSummary1.getId(), "Darth Vader"); //Starting the sub task 2 getClient().start(subTaskSummary2.getId(), "Darth Vader"); //Check if the child task 1 is InProgress Task subTask1 = getClient().getTask(subTaskSummary1.getId()); assertEquals(Status.InProgress, subTask1.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner()); //Check if the child task 2 is InProgress Task subTask2 = getClient().getTask(subTaskSummary2.getId()); assertEquals(Status.InProgress, subTask2.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner()); // Complete the child task 1 getClient().complete(subTask1.getId(), "Darth Vader", null); // Complete the child task 2 getClient().complete(subTask2.getId(), "Darth Vader", null); //Check if the child task 1 is Completed subTask1 = getClient().getTask(subTask1.getId()); assertEquals(Status.Completed, subTask1.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner()); //Check if the child task 2 is Completed subTask2 = getClient().getTask(subTask2.getId()); assertEquals(Status.Completed, subTask2.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner()); // Check is the parent task is Complete parentTask = getClient().getTask(parentTask.getId()); assertEquals(Status.Completed, parentTask.getTaskData().getStatus()); assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner()); assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME)); } public void TODOtestOnParentAbortAllSubTasksEndStrategy() throws Exception { TestWorkItemManager manager = new TestWorkItemManager(); ksession.setWorkItemManager(manager); //Create the parent task WorkItemImpl workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskNameParent"); workItem.setParameter("Comment", "CommentParent"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); //Set the subtask policy workItem.setParameter("SubTaskStrategies", "OnParentAbortAllSubTasksEnd"); getHandler().executeWorkItem(workItem, manager); //Test if the task is succesfully created List tasks = getClient().getTasksAssignedAsPotentialOwner("Darth Vader", "en-UK"); assertEquals(1, tasks.size()); TaskSummary task = tasks.get(0); assertEquals("TaskNameParent", task.getName()); assertEquals(10, task.getPriority()); assertEquals("CommentParent", task.getDescription()); assertEquals(Status.Reserved, task.getStatus()); assertEquals("Darth Vader", task.getActualOwner().getId()); //Create the child task workItem = new WorkItemImpl(); workItem.setName("Human Task"); workItem.setParameter("TaskName", "TaskNameChild1"); workItem.setParameter("Comment", "CommentChild1"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setParameter("ParentId", task.getId()); getHandler().executeWorkItem(workItem, manager); //Create the child task2 workItem = new WorkItemImpl(); workItem.setName("Human Task2"); workItem.setParameter("TaskName", "TaskNameChild2"); workItem.setParameter("Comment", "CommentChild2"); workItem.setParameter("Priority", "10"); workItem.setParameter("ActorId", "Darth Vader"); workItem.setParameter("ParentId", task.getId()); getHandler().executeWorkItem(workItem, manager); //Start the parent task getClient().start(task.getId(), "Darth Vader"); //Check if the parent task is InProgress Task parentTask = getClient().getTask(task.getId()); assertEquals(Status.InProgress, parentTask.getTaskData().getStatus()); assertEquals(users.get("darth"), parentTask.getTaskData().getActualOwner()); //Get all the subtask created for the parent task based on the potential owner List subTasks = getClient().getSubTasksAssignedAsPotentialOwner(parentTask.getId(), "Darth Vader", "en-UK"); assertEquals(2, subTasks.size()); TaskSummary subTaskSummary1 = subTasks.get(0); TaskSummary subTaskSummary2 = subTasks.get(1); assertNotNull(subTaskSummary1); assertNotNull(subTaskSummary2); //Starting the sub task 1 getClient().start(subTaskSummary1.getId(), "Darth Vader"); //Starting the sub task 2 getClient().start(subTaskSummary2.getId(), "Darth Vader"); //Check if the child task 1 is InProgress Task subTask1 = getClient().getTask(subTaskSummary1.getId()); assertEquals(Status.InProgress, subTask1.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner()); //Check if the child task 2 is InProgress Task subTask2 = getClient().getTask(subTaskSummary2.getId()); assertEquals(Status.InProgress, subTask2.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner()); // Complete the parent task getClient().skip(parentTask.getId(), "Darth Vader"); //Check if the child task 1 is Completed subTask1 = getClient().getTask(subTaskSummary1.getId()); assertEquals(Status.Completed, subTask1.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask1.getTaskData().getActualOwner()); //Check if the child task 2 is Completed subTask2 = getClient().getTask(subTaskSummary2.getId()); assertEquals(Status.Completed, subTask2.getTaskData().getStatus()); assertEquals(users.get("darth"), subTask2.getTaskData().getActualOwner()); assertTrue(manager.waitTillCompleted(MANAGER_COMPLETION_WAIT_TIME)); } public void setHandler(WorkItemHandler handler) { this.handler = handler; } public WorkItemHandler getHandler() { return handler; } private class TestWorkItemManager implements WorkItemManager { private volatile boolean completed; private volatile boolean aborted; private volatile Map results; public synchronized boolean waitTillCompleted(long time) { if (!isCompleted()) { try { wait(time); } catch (InterruptedException e) { // swallow and return state of completed } } return isCompleted(); } public synchronized boolean waitTillAborted(long time) { if (!isAborted()) { try { wait(time); } catch (InterruptedException e) { // swallow and return state of aborted } } return isAborted(); } public void abortWorkItem(long id) { setAborted(true); } public synchronized boolean isAborted() { return aborted; } private synchronized void setAborted(boolean aborted) { this.aborted = aborted; notifyAll(); } public void completeWorkItem(long id, Map results) { this.results = results; setCompleted(true); } private synchronized void setCompleted(boolean completed) { this.completed = completed; notifyAll(); } public synchronized boolean isCompleted() { return completed; } public Map getResults() { return results; } public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) { } } }