<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span style='color:#1F497D'>Looks like the rule was not
working properly because the Message class was an inner class. Thanks if you
tried to look at this. <o:p></o:p></span></p>
<p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> rules-users-bounces@lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] <b>On Behalf Of </b>Todd Pagni<br>
<b>Sent:</b> Monday, December 21, 2009 10:49 AM<br>
<b>To:</b> Rules Users List<br>
<b>Subject:</b> [rules-users] Problem calling rules from a flow<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>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. <o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>I pretty much followed the example at <a
href="http://www.developer.com/java/ent/article.php/10933_3821101_4/Rev-Up-the-Drools-5-Java-Rule-Engine.htm">http://www.developer.com/java/ent/article.php/10933_3821101_4/Rev-Up-the-Drools-5-Java-Rule-Engine.htm</a>,
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.<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><b>.rf<o:p></o:p></b></p>
<p class=MsoNormal><?xml version="1.0"
encoding="UTF-8"?> <o:p></o:p></p>
<p class=MsoNormal><process
xmlns="http://drools.org/drools-5.0/process"<o:p></o:p></p>
<p class=MsoNormal>
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"<o:p></o:p></p>
<p class=MsoNormal> xs:schemaLocation="http://drools.org/drools-5.0/process
drools-processes-5.0.xsd"<o:p></o:p></p>
<p class=MsoNormal>
type="RuleFlow" name="flow"
id="com.sample.bpmn.hello" package-name="com.sample"><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal> <header><o:p></o:p></p>
<p class=MsoNormal> </header><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal> <nodes><o:p></o:p></p>
<p class=MsoNormal> <end id="4"
name="End" x="561" y="140" width="48"
height="48" /><o:p></o:p></p>
<p class=MsoNormal> <start id="1"
name="Start" x="66" y="88" width="48"
height="48" /><o:p></o:p></p>
<p class=MsoNormal> <ruleSet id="3"
name="Rule" x="368" y="159" width="80"
height="48" ruleFlowGroup="helloGroup" /><o:p></o:p></p>
<p class=MsoNormal> </nodes><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal> <connections><o:p></o:p></p>
<p class=MsoNormal> <connection from="3"
to="4" /><o:p></o:p></p>
<p class=MsoNormal> <connection from="1"
to="3" /><o:p></o:p></p>
<p class=MsoNormal> </connections><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal></process><o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal><b>.dlr<o:p></o:p></b></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>package</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> com.sample</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> </span><span style='font-size:
10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>import</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'>
com.sample.DroolsTest.Message;</span><span style='font-size:10.0pt;font-family:
"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New"'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>rule</span></b><span style='font-size:
10.0pt;font-family:"Courier New";color:black'> </span><span style='font-size:
10.0pt;font-family:"Courier New";color:green'>"Hello World Message"</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><b><span style='font-size:10.0pt;
font-family:"Courier New";color:#960000'>ruleflow-group</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> </span><span
style='font-size:10.0pt;font-family:"Courier New";color:green'>"helloGroup"</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> </span><b><span
style='font-size:10.0pt;font-family:"Courier New";color:#960000'>when</span></b><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>
m : Message( status == Message.HELLO, myMessage : message )</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'> </span><b><span
style='font-size:10.0pt;font-family:"Courier New";color:#960000'>then</span></b><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>
System.out.println( myMessage + </span><span style='font-size:10.0pt;
font-family:"Courier New";color:green'>"***"</span><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> ); </span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>
m.setMessage( </span><span style='font-size:10.0pt;font-family:"Courier New";
color:green'>"Goodbye cruel world Message"</span><span
style='font-size:10.0pt;font-family:"Courier New";color:black'> );</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>
m.setStatus( Message.GOODBYE );</span><span style='font-size:10.0pt;font-family:
"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal style='text-autospace:none'><span style='font-size:10.0pt;
font-family:"Courier New";color:black'>
</span><b><span style='font-size:10.0pt;font-family:"Courier New";color:#960000'>update</span></b><span
style='font-size:10.0pt;font-family:"Courier New";color:black'>( m );</span><span
style='font-size:10.0pt;font-family:"Courier New"'><o:p></o:p></span></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'>end<o:p></o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'><o:p> </o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'><o:p> </o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Courier New";
color:#960000'><o:p> </o:p></span></b></p>
<p class=MsoNormal><b><span style='font-size:12.0pt;font-family:"Courier New"'>Java<o:p></o:p></span></b></p>
<p class=MsoNormal>package com.sample;<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>import org.drools.KnowledgeBase;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.KnowledgeBaseFactory;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.bpmn2.xml.BPMNSemanticModule;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.builder.KnowledgeBuilder;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.builder.KnowledgeBuilderConfiguration;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.builder.KnowledgeBuilderError;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.builder.KnowledgeBuilderErrors;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.builder.KnowledgeBuilderFactory;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.builder.ResourceType;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.compiler.PackageBuilderConfiguration;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.io.ResourceFactory;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.logger.KnowledgeRuntimeLogger;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.logger.KnowledgeRuntimeLoggerFactory;<o:p></o:p></p>
<p class=MsoNormal>import org.drools.runtime.StatefulKnowledgeSession;<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>/**<o:p></o:p></p>
<p class=MsoNormal> * This is a sample class to launch a rule.<o:p></o:p></p>
<p class=MsoNormal> */<o:p></o:p></p>
<p class=MsoNormal>public class DroolsTestFlowAndRule {<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
public static final void main(String[] args) {<o:p></o:p></p>
<p class=MsoNormal>
try {<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
// load up the knowledge base<o:p></o:p></p>
<p class=MsoNormal>
KnowledgeBase kbase = readKnowledgeBase();<o:p></o:p></p>
<p class=MsoNormal>
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();<o:p></o:p></p>
<p class=MsoNormal>
KnowledgeRuntimeLogger logger =
KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");<o:p></o:p></p>
<p class=MsoNormal>
// start a new process instance'<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
Message message = new Message();<o:p></o:p></p>
<p class=MsoNormal>
message.setMessage("Hello World Message");<o:p></o:p></p>
<p class=MsoNormal>
message.setStatus(Message.HELLO);<o:p></o:p></p>
<p class=MsoNormal>
ksession.insert(message);<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
ksession.startProcess("com.sample.bpmn.hello");<o:p></o:p></p>
<p class=MsoNormal>
ksession.fireAllRules();<o:p></o:p></p>
<p class=MsoNormal>
logger.close();<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
} catch (Throwable t) {<o:p></o:p></p>
<p class=MsoNormal>
t.printStackTrace();<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
private static KnowledgeBase readKnowledgeBase() throws Exception {<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();<o:p></o:p></p>
<p class=MsoNormal>
kbuilder.add(ResourceFactory.newClassPathResource("hello.rf"),
ResourceType.DRF);<o:p></o:p></p>
<p class=MsoNormal>
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
ResourceType.DRL);<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
KnowledgeBuilderErrors errors = kbuilder.getErrors();<o:p></o:p></p>
<p class=MsoNormal>
if (errors.size() > 0) {<o:p></o:p></p>
<p class=MsoNormal>
for (KnowledgeBuilderError error: errors) {<o:p></o:p></p>
<p class=MsoNormal>
System.err.println(error);<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal>
throw new IllegalArgumentException("Could not parse knowledge.");<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal>
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();<o:p></o:p></p>
<p class=MsoNormal>
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<o:p></o:p></p>
<p class=MsoNormal>
return kbase;<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
public static class Message {<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
public static final int HELLO = 0;<o:p></o:p></p>
<p class=MsoNormal>
public static final int GOODBYE = 1;<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
private String message;<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
private int status;<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
public String getMessage() {<o:p></o:p></p>
<p class=MsoNormal>
return this.message;<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
public void setMessage(String message) {<o:p></o:p></p>
<p class=MsoNormal>
this.message = message;<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
public int getStatus() {<o:p></o:p></p>
<p class=MsoNormal>
return this.status;<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>
public void setStatus(int status) {<o:p></o:p></p>
<p class=MsoNormal>
this.status = status;<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal>
<o:p></o:p></p>
<p class=MsoNormal>
}<o:p></o:p></p>
<p class=MsoNormal><o:p> </o:p></p>
<p class=MsoNormal>}<o:p></o:p></p>
</div>
</body>
</html>