<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;}
/* 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-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@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>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>