[rules-users] Problem calling rules from a flow

Kris Verlaenen Kris.Verlaenen at cs.kuleuven.be
Tue Dec 22 08:43:00 EST 2009


Strange, I just tried your code and it does seem to print out the Hello
world statement when executing the rule.  I attached the Eclipse project
that I created from this, could you try this?  It might be valuable to
figure out the differences in the log files (I included mine in the zip
file as well).

I'm using the latest snapshots though, which can be downloaded here:
https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/

Kris

Quoting Todd Pagni <todd.pagni at datacert.com>:

> 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;
> 
>                                 }
> 
>                                 
> 
>                 }
> 
>  
> 
> }
> 
> 




Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm



More information about the rules-users mailing list