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: [email protected]
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