[jboss-svn-commits] JBL Code SVN: r23052 - in labs/jbossrules/trunk/drools-process/drools-process-task: src/main/java/org/drools/process/workitem/wsht and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Sep 24 15:29:14 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-09-24 15:29:14 -0400 (Wed, 24 Sep 2008)
New Revision: 23052
Modified:
labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
Log:
JBRULES-1745 WS-Human-Task
-Updated the WSHumanTaskHandler WorkItem to be non blocking
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/.classpath 2008-09-24 15:46:44 UTC (rev 23051)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/.classpath 2008-09-24 19:29:14 UTC (rev 23052)
@@ -17,7 +17,7 @@
<classpathentry kind="src" path="/drools-compiler"/>
<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.2.3.v_686_R32x/core-3.2.3.v_686_R32x.jar"/>
- <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.10/janino-2.5.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1/activation-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/commons/commons-finder/1.0-SNAPSHOT/commons-finder-1.0-SNAPSHOT.jar"/>
Modified: labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2008-09-24 15:46:44 UTC (rev 23051)
+++ labs/jbossrules/trunk/drools-process/drools-process-task/src/main/java/org/drools/process/workitem/wsht/WSHumanTaskHandler.java 2008-09-24 19:29:14 UTC (rev 23052)
@@ -9,6 +9,8 @@
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.drools.eventmessaging.EventKey;
+import org.drools.eventmessaging.EventResponseHandler;
+import org.drools.eventmessaging.Payload;
import org.drools.process.instance.WorkItem;
import org.drools.process.instance.WorkItemHandler;
import org.drools.process.instance.WorkItemManager;
@@ -18,10 +20,13 @@
import org.drools.task.Task;
import org.drools.task.TaskData;
import org.drools.task.User;
+import org.drools.task.event.EventPayload;
import org.drools.task.event.TaskCompletedEvent;
+import org.drools.task.event.TaskEvent;
import org.drools.task.event.TaskEventKey;
import org.drools.task.service.MinaTaskClient;
import org.drools.task.service.TaskClientHandler;
+import org.drools.task.service.TaskClientHandler.AddTaskResponseHandler;
public class WSHumanTaskHandler implements WorkItemHandler {
@@ -85,13 +90,8 @@
task.setPeopleAssignments(assignments);
}
- BlockingAddTaskResponseHandler taskResponseHandler = new BlockingAddTaskResponseHandler();
+ TaskWorkItemAddTaskResponseHandler taskResponseHandler = new TaskWorkItemAddTaskResponseHandler(this.client, this.managers, manager, workItem.getId());
client.addTask(task, taskResponseHandler);
- long taskId = taskResponseHandler.getTaskId();
- managers.put(taskId, manager);
- System.out.println("Created task " + taskId + " for work item " + workItem.getId());
-
- new Thread(new WaitForEvent(taskId)).run();
}
public void dispose() {
@@ -104,25 +104,72 @@
// TODO
}
- private class WaitForEvent implements Runnable {
- private long taskId;
- public WaitForEvent(long taskId) {
- this.taskId = taskId;
- }
- public void run() {
- EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );
- BlockingEventResponseHandler eventResponseHandler = new BlockingEventResponseHandler();
- client.registerForEvent( key, true, eventResponseHandler );
- eventResponseHandler.getPayload();
-
- BlockingGetTaskResponseHandler getTaskResponseHandler = new BlockingGetTaskResponseHandler();
- client.getTask(taskId, getTaskResponseHandler);
- Task task = getTaskResponseHandler.getTask();
- long workItemId = task.getTaskData().getWorkItemId();
- System.out.println("Completing work item " + workItemId);
-
- managers.get(taskId).completeWorkItem(workItemId, null);
- }
- }
+ public static class TaskWorkItemAddTaskResponseHandler implements AddTaskResponseHandler {
+ private volatile String error;
+ private Map<Long, WorkItemManager> managers;
+ private WorkItemManager manager;
+ private long workItemId;
+ private MinaTaskClient client;
+
+ public TaskWorkItemAddTaskResponseHandler(MinaTaskClient client, Map<Long, WorkItemManager> managers, WorkItemManager manager, long workItemId) {
+ this.client = client;
+ this.managers = managers;
+ this.manager = manager;
+ this.workItemId = workItemId;
+ }
+
+ public void execute(long taskId) {
+ synchronized ( managers ) {
+ managers.put(taskId, this.manager);
+ }
+ System.out.println("Created task " + taskId + " for work item " + workItemId);
+
+ EventKey key = new TaskEventKey(TaskCompletedEvent.class, taskId );
+ TaskCompletedHandler eventResponseHandler = new TaskCompletedHandler(workItemId, taskId, managers);
+ client.registerForEvent( key, true, eventResponseHandler );
+ }
+ public void setError(String error) {
+ this.error = error;
+ }
+
+ public String getError() {
+ return this.error;
+ }
+ }
+
+ private static class TaskCompletedHandler implements EventResponseHandler {
+ private volatile String error;
+
+ private long workItemId;
+ private long taskId;
+ private Map<Long, WorkItemManager> managers;
+
+ public TaskCompletedHandler(long workItemId, long taskId, Map<Long, WorkItemManager> managers) {
+ this.workItemId = workItemId;
+ this.taskId = taskId;
+ this.managers = managers;
+ }
+
+ public void execute(Payload payload) {
+ TaskEvent event = ( TaskEvent ) payload.get();
+ if ( event.getTaskId() != taskId ) {
+ // defensive check that should never happen, just here for testing
+ this.error = "Expected task id and arrived task id do not march";
+ return;
+ }
+ synchronized ( this.managers ) {
+ this.managers.get(taskId).completeWorkItem(workItemId, null);
+ }
+ }
+
+ public void setError(String error) {
+ this.error = error;
+ }
+
+ public String getError() {
+ return this.error;
+ }
+ }
+
}
More information about the jboss-svn-commits
mailing list