How to use org.jboss.seam.core.TaskInstance?
jump Jan 10, 2007 9:42 AMI created a simple task manager which allows to start, end tasks and retrieve task's variables
import org.jboss.seam.core.TaskInstance;
@Stateful
@Name("taskManager")
@Scope(ScopeType.CONVERSATION)
public class TaskManagerImpl implements TaskManager {
@In(required=false)
private Long taskId;
@DataModel
private List transitions;
@DataModelSelection("transitions")
private Transition selectedTransition;
@DataModel
private List taskFormParameters;
@DataModelSelection("taskFormParameters")
private TaskFormParameter taskFormParameter;
@BeginTask
public String startTask() {
org.jbpm.taskmgmt.exe.TaskInstance taskInstance = TaskInstance.instance();
if(taskInstance != null) {
this.transitions = taskInstance.getAvailableTransitions();
this.comments = taskInstance.getComments();
taskFormParameters = new ArrayList();
TaskController taskController = taskInstance.getTask().getTaskController();
if (taskController!=null) {
for(Object va : taskController.getVariableAccesses()) {
VariableAccess variableAccess = (VariableAccess) va;
String mappedName = variableAccess.getMappedName();
String value = (String)taskInstance.getVariable(mappedName);
TaskFormParameter tfp = new TaskFormParameter(variableAccess, value);
System.out.println("reading [" + tfp.getLabel() + "]=" + tfp.getValue() + " readable " + tfp.isReadable() + " writable " + tfp.isWritable());
taskFormParameters.add(tfp);
}
}
}
return "/task.xhtml";
}
@EndTask
public String endTask() {
org.jbpm.taskmgmt.exe.TaskInstance taskInstance = TaskInstance.instance();
BusinessProcess.instance().transition(selectedTransition.getName());
for(TaskFormParameter tfp : this.taskFormParameters){
if (tfp.isWritable()) {
System.out.println("isOpen " + taskInstance.isOpen());
System.out.println("submitting [" + tfp.getLabel() + "]=" + tfp.getValue() + " readable " + tfp.isReadable() + " writable " + tfp.isWritable());
taskInstance.setVariable(tfp.getLabel(), tfp.getValue());
System.out.println("test " + taskInstance.getVariable(tfp.getLabel()));
} else {
System.out.println("ignoring unwritable [" + tfp.getLabel() + "]");
}
}
return "/available.xhtml";
}
@End
public String cancelTask() {
return "/available.xhtml";
}
@Remove @Destroy
public void remove() {
}
}
then i defined a simple workflow
<?xml version="1.0"?>
<process-definition name="sampleflow">
<start-state name="start">
< task name="start">
<assignment pooled-actors="debuggers"/>
</ task>
</start-state>
<task-node name="sample">
< task name="sample" description="sample description">
<assignment pooled-actors="debuggers"/>
<variable name="readableVar" mapped-name="readableVar" access="read,write"/>
<variable name="writableVar" mapped-name="writableVar" access="read,write"/>
</ task>
</task-node>
<task-node name="task1">
< task name="another sample task" description="sample description">
<assignment pooled-actors="debuggers"/>
<variable name="readableVar" access="read" mapped-name="readableVar"/>
<variable name="writableVar" access="read" mapped-name="writableVar"/>
</ task>
</task-node>
<end-state name="end"/>
</process-definition>
The trouble is that not null variables in task named sample, become null in task named another sample task