Hi all again,
I am having a problem where the results of the rules is not consistent.
I am using rules flow and fireUntilHalt..

Here is most of my code: (expanding the default drools example)

private static KnowledgeBase readKnowledgeBase() throws Exception {
                KnowledgeBuilder kbuilder = 
KnowledgeBuilderFactory.newKnowledgeBuilder();
                kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
ResourceType.DRL);
                kbuilder.add(ResourceFactory.newClassPathResource("Flow.rf"),
ResourceType.DRF);
                KnowledgeBuilderErrors errors = kbuilder.getErrors();
                if (errors.size() > 0) {
                        for (KnowledgeBuilderError error: errors) {
                                System.err.println(error);
                        }
                        throw new IllegalArgumentException("Could not parse 
knowledge.");
                }
                KnowledgeBaseConfiguration conf =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
                conf.setOption(EventProcessingOption.STREAM);
                KnowledgeBase kbase = 
KnowledgeBaseFactory.newKnowledgeBase(conf);
                kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
                return kbase;
        }

public static final void main(String[] args) {
                try {
                        // load up the knowledge base
                        KnowledgeBase kbase = readKnowledgeBase();
                        final StatefulKnowledgeSession ksession =
kbase.newStatefulKnowledgeSession();
                        new Thread(new Runnable() {
              public void run() {
                          ksession.fireUntilHalt();
                      }
                    }, "FireAllRules").start();
                        // go !
                        for(int i=0;i<50;i++){
                          Message message = new Message();
                          message.setMessage("one");
                          ksession.insert(message);
                          ksession.startProcess("myflow");
                        }
                        System.out.println("Sleeping");
                        Thread.sleep(20000);
                        System.out.println("Halt");
                        ksession.halt();
                } catch (Throwable t) {
                        t.printStackTrace();
                }
        }

So, notice fireUntilHalt is started in a thread.
And its in STREAM mode
and I use flow group and sample rules set.
Then inject 50 messages, and after each inject start the 'myflow'

The rule flow is like this;
Start->  One -> Two -> Three -> End

and the rules are:
rule "One"
    ruleflow-group "One"
        when
                m : Message( message=="one" )
        then
                
                m.setMessage( "two" );
                update( m );
end

rule "Two"
    ruleflow-group "Two"
        when
                m : Message( message=="two" )
        then            
                m.setMessage( "three" );
                update( m );
end

rule "NotThree"
    ruleflow-group "Three"
        when
                m : Message( message!="three" )
        then
                System.out.println( "Message is not three????????????" ); 
                retract(m);
end
rule "Three"
    ruleflow-group "Three"
        when
                m : Message( message=="three" )
        then            
                retract(m);
end


So, from that you should see that as an object is injected it has
message=="one"
so flow group One should match, the message updates to 'two'
then flow group two should match, message updates to 'three'
and then the group three rule Three should match and the object retracted.

Sometimes I run this I get results as expected.
Other times I get 1 message hit the 'NotThree' rule.
Other times I get lots of them hit the 'NotThree' rule.
Sometimes I get;
Exception in thread "FireAllRules"
org.drools.runtime.rule.ConsequenceException: org.drools.FactException:
Retract error: handle not found for object: null. Is it in the working
memory?
        at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23)


Its driving me mad as my project is failing due to inconsistent results.
Please help..

-- 
View this message in context: 
http://n3.nabble.com/Inconsistent-results-in-fusion-tp93259p93259.html
Sent from the Drools - User mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to