Geoffrey: I have the debug event listener added:
workingMemory.addEventListener(new DebugWorkingMemoryEventListener()); What I have done is put together the log statements. I've removed much of the logging for lookup and loading of objects....... [2006-03-14 09:32:16,218][main][DEBUG][BusinessRuleTest|testUpdateTask() - start] [2006-03-14 09:32:16,218][main][DEBUG][BusinessLayer|evaluateTask(TaskVO) - start] [2006-03-14 09:32:16,218][main][DEBUG][BusinessLayer|loadRules() - start] [2006-03-14 09:32:16,218][main][DEBUG][BusinessLayer|loadConflictResolvers() - start] [2006-03-14 09:32:16,234][main][DEBUG][BusinessLayer|loadConflictResolvers() - end] [2006-03-14 09:32:18,468][main][DEBUG][BusinessLayer|loadRules() - end] [2006-03-14 09:32:18,468][main][DEBUG][BusinessLayer|evaluateTask(TaskVO) - Fire Rules] [2006-03-14 09:32:18,468][main][DEBUG][--------------] <!-- Information being passed into the method. --> [2006-03-14 09:32:18,500][main][DEBUG][TaskVO|containsIdentifier(String, String) - desc [CONTRACT] value [S#1234567890]] <!-- Infomation located.... --> [2006-03-14 09:32:18,500][main][DEBUG][TaskVO|containsIdentifier(String, String) - name[CONTRACT] value[S#1234567890]] [ConditionTested: rule=AssignTask; condition=[Condition: taskVO.getIdentifiersList() != null || taskVO.isIdentifiersListEmpty() == false]; passed=true; tuple={[]}] [ConditionTested: rule=AssignTask; condition=[Condition: taskVO.containsIdentifier("CONTRACT", "S#1234567890") == true]; passed=true; tuple={[]}] [ActivationCreated: rule=AssignTask; tuple={[]}] [ConditionTested: rule=AuditTask; condition=[Condition: taskVO.getStatus().equalsIgnoreCase("OPEN") == true]; passed=false; tuple={[]}] [ConditionTested: rule=RouteTask; condition=[Condition: taskVO.getStatus().equalsIgnoreCase("OPEN") == true ]; passed=false; tuple={[]}] [ConditionTested: rule=SuspendTask; condition=[Condition: taskVO.getTaskType().equals("ADFPAYCHK") == true]; passed=false; tuple={[]}] [ObjectAsserted: handle=[fid:1]; object= TaskId:[t1234567890] PacketId:[p1234567890] OperId:[] LastHistDate:[null] LastAccessDate:[null] ReceivedDate:[Tue Jan 03 00:00:00 CST 2006] CreateDate:[Tue Jan 03 00:00:00 CST 2006] EffDate:[Fri Mar 10 00:00:00 CST 2006] Department:[] TaskType:[] CDTaskType:[] ActionStep:[AWAIT EVAL] WorkBasket:[] VIP:[] CaseDesc:[] CaseId:[] Priority:[0] LockOper:[] ExcOper:[] AvailStatus:[] CommentFlag:[] Status:[] CompleteOper:[] CreateOper:[drools] SuspendOper:[] ExecOper:[] CompleteDate:[null] PrimaryDocId: [] PrimaryDocType: [] SuspOper:[] WakeDate:[null] TaskId:[t1234567890] IdDesc:[CONTRACT] CaseID: [] CaseCode: [0] Fields[1]: Name[CONTRACT] Field[S#1234567890] ] [ConditionTested: rule=AssignTask; condition=[Condition: taskVO.getIdentifiersList() != null || taskVO.isIdentifiersListEmpty() == false]; passed=true; tuple={[]}] [ConditionTested: rule=AssignTask; condition=[Condition: taskVO.containsIdentifier("CONTRACT", "S#1234567890") == true]; passed=true; tuple={[]}] [ConditionTested: rule=AuditTask; condition=[Condition: taskVO.getStatus().equalsIgnoreCase("OPEN") == true]; passed=true; tuple={[]}] [ConditionTested: rule=AuditTask; condition=[Condition: taskVO.getTaskType().equalsIgnoreCase("ADFPAYCHK") == true]; passed=true; tuple={[]}] <!-- Information being passed into the method. --> [2006-03-14 09:32:18,531][main][DEBUG][TaskVO|containsIdentifier(String, String) - desc [CONTRACT] value [S#1234567890]] <!-- Infomation located.... --> [2006-03-14 09:32:18,531][main][DEBUG][TaskVO|containsIdentifier(String, String) - name[CONTRACT] value[S#1234567890]] <!-- Information being passed into the method. --> [2006-03-14 09:32:18,531][main][DEBUG][TaskVO|containsIdentifier(String, String) - desc [CONTRACT] value [S#1234567890]] [ConditionTested: rule=AuditTask; condition=[Condition: taskVO.containsIdentifier("CONTRACT", "S#1234567890") == true]; passed=true; tuple={[]}] [ActivationCreated: rule=AuditTask; tuple={[]}] [ConditionTested: rule=RouteTask; condition=[Condition: taskVO.getStatus().equalsIgnoreCase("OPEN") == true ]; passed=true; tuple={[]}] [ConditionTested: rule=RouteTask; condition=[Condition: taskVO.getTaskType().equalsIgnoreCase("ADFPAYCHK") == true]; passed=true; tuple={[]}] [ConditionTested: rule=RouteTask; condition=[Condition: taskVO.containsIdentifier("AUDIT NBR", "COMPANY20060313-0000001") == true]; passed=false; tuple={[]}] [ConditionTested: rule=SuspendTask; condition=[Condition: taskVO.getTaskType().equals("ADFPAYCHK") == true]; passed=true; tuple={[]}] [ConditionTested: rule=SuspendTask; condition=[Condition: taskVO.getStatus().equalsIgnoreCase("REVIEW") == true]; passed=false; tuple={[]}] <!-- Infomation located.... --> [2006-03-14 09:32:18,546][main][DEBUG][TaskVO|containsIdentifier(String, String) - name[CONTRACT] value[S#1234567890]] <!-- Information being passed into the method. --> [2006-03-14 09:32:18,546][main][DEBUG][TaskVO|containsIdentifier(String, String) - desc [AUDIT NBR] value [COMPANY20060313-0000001]] <!-- Infomation NOT LOCATED!!!!!!!.... --> [2006-03-14 09:32:18,546][main][DEBUG][TaskVO|containsIdentifier(String, String) - name[CONTRACT] value[S#1234567890]] [ObjectModified: handle=[fid:1]; old_object= TaskId:[t1234567890] PacketId:[p1234567890] DeptCode:[2] TaskCode:[2] ActCode:[2] OperId:[] LastHistDate:[null] LastAccessDate:[null] ReceivedDate:[Tue Jan 03 00:00:00 CST 2006] CreateDate:[Tue Jan 03 00:00:00 CST 2006] EffDate:[Fri Mar 10 00:00:00 CST 2006] Department:[DPT1] TaskType:[ADFPAYCHK] CDTaskType:[] ActionStep:[INDEX] WorkBasket:[rray] VIP:[] CaseDesc:[] CaseId:[] Priority:[0] LockOper:[] ExcOper:[] AvailStatus:[] CommentFlag:[] Status:[OPEN] CompleteOper:[] CreateOper:[drools] SuspendOper:[] ExecOper:[] CompleteDate:[null] PrimaryDocId: [] PrimaryDocType: [] SuspOper:[] WakeDate:[null] TaskId:[t1234567890] IdDesc:[CONTRACT] CaseID: [] CaseCode: [0] Fields[1]: Name[CONTRACT] Field[S#1234567890] ; new_object= TaskId:[t1234567890] PacketId:[p1234567890] DeptCode:[2] TaskCode:[2] ActCode:[2] OperId:[] LastHistDate:[null] LastAccessDate:[null] ReceivedDate:[Tue Jan 03 00:00:00 CST 2006] CreateDate:[Tue Jan 03 00:00:00 CST 2006] EffDate:[Fri Mar 10 00:00:00 CST 2006] Department:[DPT1] TaskType:[ADFPAYCHK] CDTaskType:[] ActionStep:[INDEX] WorkBasket:[rray] VIP:[] CaseDesc:[] CaseId:[] Priority:[0] LockOper:[] ExcOper:[] AvailStatus:[] CommentFlag:[] Status:[OPEN] CompleteOper:[] CreateOper:[drools] SuspendOper:[] ExecOper:[] CompleteDate:[null] PrimaryDocId: [] PrimaryDocType: [] SuspOper:[] WakeDate:[null] TaskId:[t1234567890] IdDesc:[CONTRACT] CaseID: [] CaseCode: [0] Fields[1]: Name[CONTRACT] Field[S#1234567890] ] [ActivationFired: rule=AssignTask; tuple={[]}] [2006-03-14 09:32:18,546][main][DEBUG][BusinessLayer|evaluateTask(TaskVO) - end] [2006-03-14 09:32:18,546][main][DEBUG][BusinessRuleTest|testUpdateTask() - end] I've changed the condition statements so I can get through as many as possible before the rule fails to assert. To this end, I've updated the rules: <!-- priority and no recursive rule --> <rule name="AssignTask" salience="-1" no-loop="true"> <!-- What is being passed into the rule --> <parameter identifier="taskVO"> <class>TaskVO</class> </parameter> <!-- What conditions must be true before rule is asserted --> <java:condition>taskVO.getIdentifiersList() != null || taskVO.isIdentifiersListEmpty() == false</java:condition> <java:condition>taskVO.containsIdentifier("CONTRACT", "S#1234567890") == true</java:condition> <!-- What does the rule does for us --> <java:consequence> taskVO.setDepartment("DPT1"); taskVO.setDptCode(lookupDeptCode("DPT1")); taskVO.setWorkBasket("rray"); taskVO.setTaskType("ADFPAYCHK"); taskVO.setTskCode(lookupTaskTypeCode("ADFPAYCHK")); taskVO.setActionStep("INDEX"); taskVO.setActCode(lookupActStepCode("INDEX")); taskVO.setStatus("OPEN"); //printTaskVO(taskVO); <!-- Firing any other rules based on changes --> drools.modifyObject(taskVO); </java:consequence> </rule> <!-- priority and no recursive rule --> <rule name="AuditTask" salience="0" no-loop="true"> <!-- What is being passed into the rule --> <parameter identifier="taskVO"> <class>TaskVO</class> </parameter> <!-- What conditions must be true before rule is asserted --> <java:condition>taskVO.getStatus().equalsIgnoreCase("OPEN") == true</java:condition> <java:condition>taskVO.getTaskType().equalsIgnoreCase("ADFPAYCHK") == true</java:condition> <java:condition>taskVO.containsIdentifier("CONTRACT", "S#1234567890") == true</java:condition> <!-- What does the rule does for us --> <!-- This rule is suppose to add an object into the task --> <java:consequence> ident = new IdentifierVO(); ident.setTaskId("t1234567890"); ident.addField("COMPANY20060313-0000001"); ident.addFieldName("AUDIT NBR"); ident.addFieldSize(45); ident.setIdDesc("AUDIT NBR"); taskVO.addIdentifier(ident); taskVO.setActionStep("PROCESS"); //printTaskVO(taskVO); <!-- Firing any other rules based on changes --> drools.modifyObject(taskVO); </java:consequence> </rule> <!-- priority and no recursive rule --> <rule name="RouteTask" salience="1" no-loop="true"> <!-- What is being passed into the rule --> <parameter identifier="taskVO"> <class>TaskVO</class> </parameter> <!-- What conditions must be true before rule is asserted --> <java:condition>taskVO.getStatus().equalsIgnoreCase("OPEN") == true </java:condition> <java:condition>taskVO.getTaskType().equalsIgnoreCase("ADFPAYCHK") == true</java:condition> <java:condition>taskVO.containsIdentifier("AUDIT NBR", "COMPANY20060313-0000001") == true</java:condition> <!-- What does the rule does for us --> <java:consequence> taskVO.setWorkBasket("mightymouse"); taskVO.setStatus("REVIEW"); //printTaskVO(taskVO); <!-- Firing any other rules based on changes --> drools.modifyObject(taskVO); </java:consequence> </rule> <!-- priority and no recursive rule --> <rule name="SuspendTask" salience="2" no-loop="true"> <!-- What is being passed into the rule --> <parameter identifier="taskVO"> <class>TaskVO</class> </parameter> <!-- What conditions must be true before rule is asserted --> <java:condition>taskVO.getTaskType().equals("ADFPAYCHK") == true</java:condition> <java:condition>taskVO.getStatus().equalsIgnoreCase("REVIEW") == true</java:condition> <java:condition>taskVO.getCaseDesc().equalsIgnoreCase("missing signature") == true</java:condition> <!-- What does the rule does for us --> <java:consequence> taskVO.setStatus("SUSPEND"); taskVO.setSuspOper("MightyMouse"); taskVO.setCaseDesc("missing signature"); taskVO.setCaseId("C1234567890"); DroolsMail mail = new DroolsMail(); try{ mail.postMail(loadMailReceipients(), "Drools Dispatch Mail", "This is a Drools Test", "[EMAIL PROTECTED]"); }catch (MessagingException me){ me.printStackTrace(); } //printTaskVO(taskVO); <!-- Firing any other rules based on changes --> drools.modifyObject(taskVO); </java:consequence> </rule> Russ -----Original Message----- From: Geoffrey Wiseman [mailto:[EMAIL PROTECTED] Sent: Monday, March 13, 2006 10:59 PM To: user@drools.codehaus.org Subject: Re: [drools-user] Chaining Rules On 3/13/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: > > Maybe I am not seeing the error in my ways. I have four rules. I am > chaining them together. Each rule acts upon the object in a different > way. I have set up the no-loop attribute so no rule is fired more than > once. I have also assigned a priority for each of the rules so they will > execute in sequence. I have four Conflict resolvers loaded (Salience, > Recency, Simplicity, Load). After I have performed a said operation within > a rule, I call the function drools.modifyObject(taskVO) for updating > the fact. However, I am not seeing the final results with all the > information getting into the object after all the four rules have fired: > Ok, so what ARE you seeing? Are any of the rules firing? Did you try adding an event listener to trace the rules? -- Geoffrey Wiseman