[rules-users] Problem calling rules from a flow

Todd Pagni todd.pagni at datacert.com
Mon Dec 21 16:59:05 EST 2009


Looks like the rule was not working properly because the Message class
was an inner class.   Thanks if you tried to look at this.  

 

From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Todd Pagni
Sent: Monday, December 21, 2009 10:49 AM
To: Rules Users List
Subject: [rules-users] Problem calling rules from a flow

 

For some reason I cannot get the most basic rule to fire from a flow.
Not sure what is going on, but would appreciate some help.  This is in
Drools 5.1.0.M1.  

 

I pretty much followed the example at
http://www.developer.com/java/ent/article.php/10933_3821101_4/Rev-Up-the
-Drools-5-Java-Rule-Engine.htm, but it did not work for me.    I don't
get an error message and I don't see the rule fire and print the
system.out.

 

 

.rf

<?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="flow" id="com.sample.bpmn.hello"
package-name="com.sample">

 

  <header>

  </header>

 

  <nodes>

    <end id="4" name="End" x="561" y="140" width="48" height="48" />

    <start id="1" name="Start" x="66" y="88" width="48" height="48" />

    <ruleSet id="3" name="Rule" x="368" y="159" width="80" height="48"
ruleFlowGroup="helloGroup" />

  </nodes>

 

  <connections>

    <connection from="3" to="4" />

    <connection from="1" to="3" />

  </connections>

 

</process>

 

.dlr

package com.sample

 

import com.sample.DroolsTest.Message;

 

rule "Hello World Message"

ruleflow-group "helloGroup"

      when

            m : Message( status == Message.HELLO, myMessage : message )

      then

            System.out.println( myMessage + "***" ); 

            m.setMessage( "Goodbye cruel world Message" );

            m.setStatus( Message.GOODBYE );

            update( m );

end

 

 

 

Java

package com.sample;

 

import org.drools.KnowledgeBase;

import org.drools.KnowledgeBaseFactory;

import org.drools.bpmn2.xml.BPMNSemanticModule;

import org.drools.builder.KnowledgeBuilder;

import org.drools.builder.KnowledgeBuilderConfiguration;

import org.drools.builder.KnowledgeBuilderError;

import org.drools.builder.KnowledgeBuilderErrors;

import org.drools.builder.KnowledgeBuilderFactory;

import org.drools.builder.ResourceType;

import org.drools.compiler.PackageBuilderConfiguration;

import org.drools.io.ResourceFactory;

import org.drools.logger.KnowledgeRuntimeLogger;

import org.drools.logger.KnowledgeRuntimeLoggerFactory;

import org.drools.runtime.StatefulKnowledgeSession;

 

/**

 * This is a sample class to launch a rule.

 */

public class DroolsTestFlowAndRule {

 

                public static final void main(String[] args) {

                                try {

                                                

                                                // load up the knowledge
base

                                                KnowledgeBase kbase =
readKnowledgeBase();

                                                StatefulKnowledgeSession
ksession = kbase.newStatefulKnowledgeSession();

                                                KnowledgeRuntimeLogger
logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");

                                                // start a new process
instance'

                                                

                                                Message message = new
Message();

 
message.setMessage("Hello World Message");

 
message.setStatus(Message.HELLO);

 
ksession.insert(message);

                                                

 
ksession.startProcess("com.sample.bpmn.hello");

                                                ksession.fireAllRules();

                                                logger.close();

                                                

                                } catch (Throwable t) {

                                                t.printStackTrace();

                                }

                }

 

                private static KnowledgeBase readKnowledgeBase() throws
Exception {

                                                

                                KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();

 
kbuilder.add(ResourceFactory.newClassPathResource("hello.rf"),
ResourceType.DRF);

 
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
ResourceType.DRL);

                                

                                KnowledgeBuilderErrors errors =
kbuilder.getErrors();

                                if (errors.size() > 0) {

                                                for
(KnowledgeBuilderError error: errors) {

 
System.err.println(error);

                                                }

                                                throw new
IllegalArgumentException("Could not parse knowledge.");

                                }

                                KnowledgeBase kbase =
KnowledgeBaseFactory.newKnowledgeBase();

 
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());

                                return kbase;

                }

 

                public static class Message {

                                

                                public static final int HELLO = 0;

                                public static final int GOODBYE = 1;

 

                                private String message;

 

                                private int status;

 

                                public String getMessage() {

                                                return this.message;

                                }

 

                                public void setMessage(String message) {

                                                this.message = message;

                                }

 

                                public int getStatus() {

                                                return this.status;

                                }

 

                                public void setStatus(int status) {

                                                this.status = status;

                                }

                                

                }

 

}

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091221/8c235f16/attachment.html 


More information about the rules-users mailing list