[rules-users] ProcessInstance Does Not Complete With User Task and Rule Task
nfox241
nfox at dragonflyware.com
Mon Dec 14 18:55:58 EST 2009
I have a flow: start -- User Task - Rule Task - User Task - Action - end.
I complete the 1st User Task, next the rules which are part of the
RuleFlowGroup in the Rule Task fire correctly, then I complete the next User
Task. However, my final action node is never reached and the processInstance
never completes.
Here is my Rule Flow:
?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://drools.org/drools-5.0/process"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://drools.org/drools-5.0/process
drools-processes-5.0.xsd"
type="RuleFlow" name="droolsflow" id="org.plugtree.labs.droolsflow"
package-name="org.plugtree.labs" >
<header>
<imports>
<import name="org.plugtree.labs.variablepersistence.MyEntity" />
<import
name="org.plugtree.labs.variablepersistence.MyVariableSerializable" />
</imports>
</header>
<nodes>
<ruleSet id="17" name="ruleMe" x="410" y="123" width="80" height="48"
ruleFlowGroup="fox" />
<start id="1" name="Start" x="16" y="16" width="48" height="48" />
<end id="3" name="End" x="665" y="312" width="48" height="48" />
<humanTask id="23" name="User Task" x="279" y="237" width="100"
height="48" >
<work name="Human Task" >
<parameter name="ActorId" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Comment" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Content" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Priority" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Skippable" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="TaskName" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
</work>
</humanTask>
<humanTask id="22" name="User Task" x="145" y="86" width="100"
height="48" >
<work name="Human Task" >
<parameter name="ActorId" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Comment" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Content" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Priority" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="Skippable" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
<parameter name="TaskName" >
<type
name="org.drools.process.core.datatype.impl.type.StringDataType" />
</parameter>
</work>
</humanTask>
<actionNode id="12" name="Finish" x="494" y="254" width="80" height="48"
>
<action type="expression" dialect="mvel"
>System.out.println("Finished!!!");</action>
</actionNode>
</nodes>
<connections>
<connection from="22" to="17" />
<connection from="12" to="3" />
<connection from="17" to="23" />
<connection from="1" to="22" />
<connection from="23" to="12" />
</connections>
</process>
And test code:
KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( new ClassPathResource(
"VariablePersistenceStrategyProcess.rf" ), ResourceType.DRF );
kbuilder.add( new ClassPathResource( "myRules.drl" ),
ResourceType.DRL );
for (KnowledgeBuilderError error: kbuilder.getErrors()) {
System.out.println(error);
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("org.drools.persistence.jpa");
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
StatefulKnowledgeSession ksession =
JPAKnowledgeService.newStatefulKnowledgeSession( kbase, null, env );
int id = ksession.getId();
System.out.println("### Starting process ###");
WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
ksession.startProcess( "org.plugtree.labs.droolsflow"
/*,parameters*/ );
TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
WorkItem workItem = handler.getWorkItem();
ksession = JPAKnowledgeService.loadStatefulKnowledgeSession( id,
kbase, null, env );
processInstance = (WorkflowProcessInstance)
ksession.getProcessInstance( processInstance.getId() );
ksession.getWorkItemManager().completeWorkItem( workItem.getId(),
null );
workItem = handler.getWorkItem();
ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(id,
kbase, null, env);
processInstance = (WorkflowProcessInstance)
ksession.getProcessInstance(processInstance.getId());
System.out.println("### Completing second work item ###");
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
--
View this message in context: http://n3.nabble.com/ProcessInstance-Does-Not-Complete-With-User-Task-and-Rule-Task-tp90667p90667.html
Sent from the Drools - User mailing list archive at Nabble.com.
More information about the rules-users
mailing list