﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-apple0668-随笔分类-drools</title><link>http://www.blogjava.net/apple0668/category/43619.html</link><description>上善若水，水善利万物而不争，处众人之所恶而不争，故几于道——《老子》</description><language>zh-cn</language><lastBuildDate>Sun, 17 Jan 2010 13:29:04 GMT</lastBuildDate><pubDate>Sun, 17 Jan 2010 13:29:04 GMT</pubDate><ttl>60</ttl><item><title>Drools语法详解&lt;转&gt;</title><link>http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Sun, 17 Jan 2010 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/309884.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/309884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/309884.html</trackback:ping><description><![CDATA[<p>原文：<font style="background-color: #cce8cf">http://www.javaeye.com/topic/190294</font><font style="background-color: #cce8cf"><br />
一个典型的DRL文件： <br />
Java代码 <br />
①package com.sample&nbsp;&nbsp; //包名，不可以与关键字冲突&nbsp;&nbsp; <br />
②import com.sample.DroolsTest.Message;//本文件需要导入的类&nbsp;&nbsp; <br />
③global java.util.List myGlobalList;//全局变量&nbsp;&nbsp; <br />
④//定义函数体&nbsp;&nbsp; <br />
function String hello(String name) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; return "Hello "+name+"!";&nbsp;&nbsp; <br />
}&nbsp;&nbsp; <br />
&nbsp; <br />
⑤rule "myRule"&nbsp;&nbsp;&nbsp;&nbsp; <br />
no-loop true&nbsp; //执行一次后，是否能被再次激活&nbsp;&nbsp; <br />
salience 100&nbsp; //优先级别&nbsp;&nbsp; <br />
⑥when&nbsp;&nbsp;&nbsp;&nbsp; <br />
m : Message( status == Message.HELLO, message : message )&nbsp;&nbsp;&nbsp; <br />
⑦then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
m.setMessage( "Goodbye cruel world" );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m.setStatus( Message.GOODBYE );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update( m );&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; myGlobalList.add( "Hello World" );//使用global 变量&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; System.out.println( hello( "Bob" ) );//调用定义函数&nbsp;&nbsp; <br />
End&nbsp; </font></p>
<p><font style="background-color: #cce8cf">①package com.sample&nbsp;&nbsp; //包名，不可以与关键字冲突<br />
②import com.sample.DroolsTest.Message;//本文件需要导入的类<br />
③global java.util.List myGlobalList;//全局变量<br />
④//定义函数体<br />
function String hello(String name) {<br />
&nbsp;&nbsp;&nbsp; return "Hello "+name+"!";<br />
}</font></p>
<p><font style="background-color: #cce8cf">⑤rule "myRule"&nbsp; <br />
no-loop true&nbsp; //执行一次后，是否能被再次激活<br />
salience 100&nbsp; //优先级别<br />
⑥when&nbsp; <br />
m : Message( status == Message.HELLO, message : message ) <br />
⑦then&nbsp;&nbsp;&nbsp; <br />
m.setMessage( "Goodbye cruel world" );<br />
&nbsp;&nbsp;m.setStatus( Message.GOODBYE );<br />
&nbsp;&nbsp;update( m );<br />
&nbsp;&nbsp;&nbsp; myGlobalList.add( "Hello World" );//使用global 变量<br />
&nbsp;&nbsp;&nbsp; System.out.println( hello( "Bob" ) );//调用定义函数<br />
End</font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">①package com.sample <br />
包名，不可以与关键字冲突。一个包通过名称空间描绘，这样很好的保持了一组规则的独立性。 <br />
②import <br />
标记就像java中的含义一样。对于任何要用在规则中的对象，你需要指定完整的路径和类型名。Drools从同名的java包中自动导入类。 <br />
③global <br />
如果多个包定义了同样名称的全局变量，它们必须使用同样的类型，并且全部指向同一个全局值。全部变量通常用来返回数据，获得提供数据或服务给规则使用。为了使用全局变量，你必须： <br />
在规则文件中声明全局变量并使用它，如： <br />
global java.util.List myGlobalList; <br />
rule "Using a global" <br />
when <br />
&nbsp;&nbsp;&nbsp; eval( true ) <br />
then <br />
&nbsp;&nbsp;&nbsp; myGlobalList.add( "Hello World" ); <br />
end <br />
在working memory上设置全局变量的值。最好是在将fact插入working memory之前设置完所有全局变量，如： <br />
List list = new ArrayList(); <br />
WorkingMemory wm = rulebase.newStatefulSession(); <br />
wm.setGlobal( "myGlobalList", list ); <br />
④function <br />
相对于正常的java类，函数是在你的规则代码中放置语言代码的方法。它们不可能做任何超过你可以在帮助类（在java中定义，被设置入规则的Working Memory中的类）中做到的事情。使用函数的优点是可以将逻辑保存在一个地方，并且你可以在需要的时候改变函数（这样做各有优缺点）。函数最大的用处是被规则的推论（then）部分中的行为所调用，特别是当一个行为操作需要反复被调用时（将公用代码抽取出来成为一个函数）。 <br />
⑤rule 名称可以在&#8220;&#8221;下取任何名字。 <br />
属性列表： <br />
属性 类型 默认值 功能描述 <br />
no-loop Boolean false 设置no-loop为true可以阻止该规则被再次激活。 <br />
salience integer 0 优先级数字高的规则会比优先级低的规则先执行。 <br />
agenda-group String MAIN 只有在具有焦点的agenda group中的规则才能够激发。 <br />
auto-focus Boolean false 如果该规则符合激活条件，则该规则所在agenda-group自动获得焦点，允许规则激发。 <br />
activation-group String N/A 在同名activation-group中的规则将以互斥的方式激发 <br />
dialect String "java" or "mvel" 指定在LHS代码表达式或RHS代码块中使用的语言。 <br />
date-effective String, 包含日期/时间定义 N/A 规则只能在date-effective指定的日期和时间之后激活。 <br />
date-exptires String, 包含日期/时间定义 N/A 如果当前时间在date-expires指定的时间之后，规则不能激活。 </font></p>
<p><font style="background-color: #cce8cf">duration long N/A 指出规则将在指定的一段时间后激发，如果那个时候规则的激活条件还是处于true的情况下。 <br />
⑥&nbsp; LHS (when) 条件元素 <br />
为了能够引用匹配的对象，使用一个模式绑定变量如&#8216;$c&#8217;。变量的前缀使用的$是可选的，但是在复杂的规则中它会很方便用来区别变量与字段的不同。 <br />
$c : Cheese( type == "stilton", price &lt; 10, age == "mature" ) <br />
&amp;&amp; 和|| 约束连接符 <br />
Cheese( type == "stilton" &amp;&amp; price &lt; 10, age == "mature" ) <br />
Cheese( type == "stilton" || price &lt; 10, age == "mature" ) <br />
第一个有两个约束而第二个组有一个约束，可以通过圆括号来改变求值的顺序。 <br />
单值约束 <br />
Matches 操作 <br />
Cheese( type matches "(Buffalo)?\S*Mozerella" ) <br />
Cheese( type not matches "(Buffulo)?\S*Mozerella" ) <br />
Contains 操作 <br />
CheeseCounter( cheeses contains "stilton" ) <br />
CheeseCounter( cheeses not contains "cheddar" ) <br />
memberof操作 <br />
CheeseCounter( cheese memberof $matureCheeses ) <br />
CheeseCounter( cheese not memberof $matureCheeses ) <br />
字符串约束 <br />
字符串约束是最简单的约束格式，将字段与指定的字符串求值：数值，日期，string或者boolean。 <br />
Cheese( quantity == 5 ) <br />
Cheese( bestBefore &lt; "27-Oct-2007" ) <br />
Cheese( type == "stilton" ) <br />
Cheese( smelly == true ) <br />
绑定变量约束 <br />
变量可以绑定到Fact和它们的字段，然后在后面的字段约束中使用。绑定变量被称为声明。有效的操作符由被约束的字段类型决定；在那里会进行强制转换。绑定变量约束使用'=='操作符，因为能够使用hash索引，因此提供非常快的执行速度。 <br />
Person( likes : favouriteCheese ) <br />
Cheese( type == likes ) <br />
返回值约束 <br />
返回值约束可以使用任何有效的Java元数据类型或对象。要避免使用任何Drools关键字作为声明标识。在返回值约束中使用的函数必须返回静态常量（time constant）结果。之前声明的绑定可以用在表达式中。 <br />
Person( girlAge : age, sex == "F" ) <br />
Person( age == ( girlAge + 2) ), sex == 'M' ) <br />
复合值约束 <br />
复合值约束用在可能有多个允许值的时候，当前只支持'in' 和'not in'两个操作。这些操作使用圆括号包含用逗号分开的值的列表，它可以是变量，字符串，返回值或限定标识符。'in' 和'not in'运算式实际上被语法分析器重写成多个!= and ==组成的多重约束。 <br />
Person( $cheese : favouriteCheese ) <br />
Cheese( type in ( "stilton", "cheddar", $cheese ) <br />
多重约束 <br />
多重约束允许你对一个字段通过使用'&amp;&amp;' 或者'||'约束连接符进行多个约束条件的判断。允许使用圆括号分组，它会让这种约束看起来更自然。 <br />
Person( age ( (&gt; 30 &amp;&amp; &lt; 40) || (&gt; 20 &amp;&amp; &lt; 25) ) ) <br />
Person( age &gt; 30 &amp;&amp; &lt; 40 || location == "london" ) <br />
内联的Eval约束 <br />
eval约束可以使用任何有效的语言表达式，只要它最终能被求值为boolean元数据类型。表达式必须是静态常量（time constant）。任何在当前模式之前定义的变量都可以使用，自动代入（autovivification）机制用来自动建立字段绑定变量。当构建器发现标识不是当前定义的变量名是，它将尝试将它作为对象的字段来访问，这种情况下，构建器自动在inline-eval中建立该字段的同名变量。 <br />
Person( girlAge : age, sex = "F" ) <br />
Person( eval( girlAge == boyAge + 2 ), sex = 'M' ) </font></p>
<p><font style="background-color: #cce8cf">⑦RHS (then) 执行操作 <br />
这部分应当包含一系列需要执行的操作。规则的RHS部分应该保持简短的，这保持它是声明性和可读性的。如果你发现你需要在RHS中使用命令式或and/or条件代码，那你可能需要将规则拆分为多个规则。RHS的主要目的是插入，删除修改working memory数据。 <br />
"update(object, handle);" 将告诉引擎对象已经改变（已经被绑定到LHS中的那一个），并且规则需要重新检查。 <br />
"insert(new Something());" 将在working memory中放置一个你新建的对象。 <br />
"insertLogical(new Something());" 与insert类似，但是当没有更多的fact支持当前激发规则的真值状态时，对象自动删除。 <br />
"retract(handle);" removes an object from working memory. <br />
⑧ Query <br />
查询中仅仅包含规则LHS部分的结构（不用指定when或then）。它提供了查询working memory 中符合约束条件的对象的一个简单办法。 <br />
query "people over the age of 30" <br />
&nbsp;&nbsp;&nbsp; person : Person( age &gt; 30 ) <br />
end <br />
通过在返回的查询结果(QueryResults)上进行标准的for循环遍历，每一行将返回一个QueryResult，该对象可以用来存取组元中的每一个Column。这些Column可以通过声明的名称或索引位置存取。 <br />
QueryResults results = workingMemory.getQueryResults( "people over the age of 30" ); <br />
for ( Iterator it = results.iterator; it.hasNext(); ) { <br />
&nbsp;&nbsp;&nbsp; QueryResult result = ( QueryResult ) it.next(); <br />
&nbsp;&nbsp;&nbsp; Person person = ( Person ) result.get( "person" ); <br />
&nbsp;&nbsp;&nbsp; } </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p><img src ="http://www.blogjava.net/apple0668/aggbug/309884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2010-01-17 21:11 <a href="http://www.blogjava.net/apple0668/archive/2010/01/17/309884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse3.4安装drools插件手记</title><link>http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html</link><dc:creator>apple0668</dc:creator><author>apple0668</author><pubDate>Sun, 17 Jan 2010 13:08:00 GMT</pubDate><guid>http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html</guid><wfw:comment>http://www.blogjava.net/apple0668/comments/309883.html</wfw:comment><comments>http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/apple0668/comments/commentRss/309883.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/apple0668/services/trackbacks/309883.html</trackback:ping><description><![CDATA[最近由于项目用到drools，所以只有一边学习一边开发，首先先安装好插件搭好开发环境。<br />
下载drools eclipse插件，地址为：<a href="http://www.jboss.org/drools/downloads.html">http://www.jboss.org/drools/downloads.html</a><br />
解压用links方式安装插件，如果<font style="background-color: #cce8cf">features</font>目录和<font style="background-color: #cce8cf">plugins</font>目录上层没有eclipse文件夹，就要建一个。<br />
<br />
在Eclipse目录下面新建一个links文件夹，里面建一个XXX.link，内容为：path=F://plugins/drools<br />
<br />
启动Eclipse，在window----prefernces那里如果看不到又drools，就说明插件安装不成功。<br />
<br />
Eclipse3.4安装drools插件遇到识别不了插件，解决方案如下：<br />
<br />
<font style="background-color: #cce8cf">F:\eclipse\configuration\org.eclipse.equinox.simpleconfigurator</font>下面<font style="background-color: #cce8cf">bundles.info</font>最后加上以下几句：<br />
<br />
<p>org.guvnor.tools,5.0.1,file:plugins\org.guvnor.tools_5.0.1.jar,4,false <br />
org.eclipse.webdav,3.0.101,file:plugins\org.eclipse.webdav_3.0.101.jar,4,false <br />
org.drools.eclipse,5.0.1,file:plugins\org.drools.eclipse_5.0.1.jar,4,false <br />
org.drools.eclipse.task,5.0.1,file:plugins\org.drools.eclipse.task_5.0.1.jar,4,false </p>
保存即可。<br />
<br />
再次启动Eclipse就可以成功安装插件，window----prefernces---drools插件，配置drools的依赖包环境，这些很简单，省略。<br />
<br />
新建一个drools工程，就会看到一个附带的helloworld的例子，执行java文件即可执行测试。<br />
<br />
<font style="background-color: #cce8cf">Sample.drl</font><br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">package&nbsp;com.sample<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />import&nbsp;com.sample.DroolsTest.Message;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />rule&nbsp;"Hello&nbsp;World"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;when<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;:&nbsp;Message(&nbsp;status&nbsp;==&nbsp;Message.HELLO,&nbsp;myMessage&nbsp;:&nbsp;message&nbsp;)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;then<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;myMessage&nbsp;);&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.setMessage(&nbsp;"Goodbye&nbsp;cruel&nbsp;world"&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m.setStatus(&nbsp;Message.GOODBYE&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update(&nbsp;m&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />end<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />rule&nbsp;"GoodBye"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;when<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message(&nbsp;status&nbsp;==&nbsp;Message.GOODBYE,&nbsp;myMessage&nbsp;:&nbsp;message&nbsp;)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;then<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&nbsp;myMessage&nbsp;);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />end</span></div>
<br />
<br />
<font style="background-color: #cce8cf">DroolsTest.java<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sample;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.KnowledgeBase;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.KnowledgeBaseFactory;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilder;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilderError;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilderErrors;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.KnowledgeBuilderFactory;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.builder.ResourceType;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.io.ResourceFactory;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.logger.KnowledgeRuntimeLogger;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.logger.KnowledgeRuntimeLoggerFactory;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.drools.runtime.StatefulKnowledgeSession;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_524_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_524_574_Open_Text.style.display='none'; Codehighlighter1_524_574_Closed_Image.style.display='inline'; Codehighlighter1_524_574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_524_574_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_524_574_Closed_Text.style.display='none'; Codehighlighter1_524_574_Open_Image.style.display='inline'; Codehighlighter1_524_574_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_524_574_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_524_574_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">16</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;This&nbsp;is&nbsp;a&nbsp;sample&nbsp;class&nbsp;to&nbsp;launch&nbsp;a&nbsp;rule.<br />
</span><span style="color: #008080">17</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img id="Codehighlighter1_600_2212_Open_Image" onclick="this.style.display='none'; Codehighlighter1_600_2212_Open_Text.style.display='none'; Codehighlighter1_600_2212_Closed_Image.style.display='inline'; Codehighlighter1_600_2212_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_600_2212_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_600_2212_Closed_Text.style.display='none'; Codehighlighter1_600_2212_Open_Image.style.display='inline'; Codehighlighter1_600_2212_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;DroolsTest&nbsp;</span><span id="Codehighlighter1_600_2212_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_600_2212_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img id="Codehighlighter1_649_1165_Open_Image" onclick="this.style.display='none'; Codehighlighter1_649_1165_Open_Text.style.display='none'; Codehighlighter1_649_1165_Closed_Image.style.display='inline'; Codehighlighter1_649_1165_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_649_1165_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_649_1165_Closed_Text.style.display='none'; Codehighlighter1_649_1165_Open_Image.style.display='inline'; Codehighlighter1_649_1165_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_649_1165_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_649_1165_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_657_1112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_657_1112_Open_Text.style.display='none'; Codehighlighter1_657_1112_Closed_Image.style.display='inline'; Codehighlighter1_657_1112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_657_1112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_657_1112_Closed_Text.style.display='none'; Codehighlighter1_657_1112_Open_Image.style.display='inline'; Codehighlighter1_657_1112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_657_1112_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_657_1112_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;load&nbsp;up&nbsp;the&nbsp;knowledge&nbsp;base</span><span style="color: #008000"><br />
</span><span style="color: #008080">23</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBase&nbsp;kbase&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;readKnowledgeBase();<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StatefulKnowledgeSession&nbsp;ksession&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kbase.newStatefulKnowledgeSession();<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeRuntimeLogger&nbsp;logger&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;KnowledgeRuntimeLoggerFactory.newFileLogger(ksession,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">test</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;go&nbsp;!</span><span style="color: #008000"><br />
</span><span style="color: #008080">27</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Message&nbsp;message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Message();<br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setMessage(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;World</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message.setStatus(Message.HELLO);<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ksession.insert(message);<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ksession.fireAllRules();<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.close();<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img id="Codehighlighter1_1134_1162_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1134_1162_Open_Text.style.display='none'; Codehighlighter1_1134_1162_Closed_Image.style.display='inline'; Codehighlighter1_1134_1162_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1134_1162_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1134_1162_Closed_Text.style.display='none'; Codehighlighter1_1134_1162_Open_Image.style.display='inline'; Codehighlighter1_1134_1162_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Throwable&nbsp;t)&nbsp;</span><span id="Codehighlighter1_1134_1162_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1134_1162_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.printStackTrace();<br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img id="Codehighlighter1_1235_1784_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1235_1784_Open_Text.style.display='none'; Codehighlighter1_1235_1784_Closed_Image.style.display='inline'; Codehighlighter1_1235_1784_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1235_1784_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1235_1784_Closed_Text.style.display='none'; Codehighlighter1_1235_1784_Open_Image.style.display='inline'; Codehighlighter1_1235_1784_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;KnowledgeBase&nbsp;readKnowledgeBase()&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Exception&nbsp;</span><span id="Codehighlighter1_1235_1784_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1235_1784_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBuilder&nbsp;kbuilder&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;KnowledgeBuilderFactory.newKnowledgeBuilder();<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kbuilder.add(ResourceFactory.newClassPathResource(</span><span style="color: #000000">"</span><span style="color: #000000">Sample.drl</span><span style="color: #000000">"</span><span style="color: #000000">),&nbsp;ResourceType.DRL);<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBuilderErrors&nbsp;errors&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;kbuilder.getErrors();<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img id="Codehighlighter1_1481_1637_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1481_1637_Open_Text.style.display='none'; Codehighlighter1_1481_1637_Closed_Image.style.display='inline'; Codehighlighter1_1481_1637_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1481_1637_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1481_1637_Closed_Text.style.display='none'; Codehighlighter1_1481_1637_Open_Image.style.display='inline'; Codehighlighter1_1481_1637_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(errors.size()&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1481_1637_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1481_1637_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img id="Codehighlighter1_1528_1564_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1528_1564_Open_Text.style.display='none'; Codehighlighter1_1528_1564_Closed_Image.style.display='inline'; Codehighlighter1_1528_1564_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1528_1564_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1528_1564_Closed_Text.style.display='none'; Codehighlighter1_1528_1564_Open_Image.style.display='inline'; Codehighlighter1_1528_1564_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(KnowledgeBuilderError&nbsp;error:&nbsp;errors)&nbsp;</span><span id="Codehighlighter1_1528_1564_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1528_1564_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(error);<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IllegalArgumentException(</span><span style="color: #000000">"</span><span style="color: #000000">Could&nbsp;not&nbsp;parse&nbsp;knowledge.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KnowledgeBase&nbsp;kbase&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;KnowledgeBaseFactory.newKnowledgeBase();<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;kbase;<br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img id="Codehighlighter1_1816_2209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1816_2209_Open_Text.style.display='none'; Codehighlighter1_1816_2209_Closed_Image.style.display='inline'; Codehighlighter1_1816_2209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1816_2209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1816_2209_Closed_Text.style.display='none'; Codehighlighter1_1816_2209_Open_Image.style.display='inline'; Codehighlighter1_1816_2209_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Message&nbsp;</span><span id="Codehighlighter1_1816_2209_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1816_2209_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;HELLO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;GOODBYE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;message;<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;status;<br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img id="Codehighlighter1_1977_2005_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1977_2005_Open_Text.style.display='none'; Codehighlighter1_1977_2005_Closed_Image.style.display='inline'; Codehighlighter1_1977_2005_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1977_2005_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1977_2005_Closed_Text.style.display='none'; Codehighlighter1_1977_2005_Open_Image.style.display='inline'; Codehighlighter1_1977_2005_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getMessage()&nbsp;</span><span id="Codehighlighter1_1977_2005_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1977_2005_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.message;<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img id="Codehighlighter1_2049_2080_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2049_2080_Open_Text.style.display='none'; Codehighlighter1_2049_2080_Closed_Image.style.display='inline'; Codehighlighter1_2049_2080_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2049_2080_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2049_2080_Closed_Text.style.display='none'; Codehighlighter1_2049_2080_Open_Image.style.display='inline'; Codehighlighter1_2049_2080_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setMessage(String&nbsp;message)&nbsp;</span><span id="Codehighlighter1_2049_2080_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2049_2080_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">67</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.message&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;message;<br />
</span><span style="color: #008080">68</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">69</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">70</span><span style="color: #000000"><img id="Codehighlighter1_2108_2135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2108_2135_Open_Text.style.display='none'; Codehighlighter1_2108_2135_Closed_Image.style.display='inline'; Codehighlighter1_2108_2135_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2108_2135_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2108_2135_Closed_Text.style.display='none'; Codehighlighter1_2108_2135_Open_Image.style.display='inline'; Codehighlighter1_2108_2135_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;getStatus()&nbsp;</span><span id="Codehighlighter1_2108_2135_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2108_2135_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">71</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.status;<br />
</span><span style="color: #008080">72</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">73</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">74</span><span style="color: #000000"><img id="Codehighlighter1_2174_2203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2174_2203_Open_Text.style.display='none'; Codehighlighter1_2174_2203_Closed_Image.style.display='inline'; Codehighlighter1_2174_2203_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2174_2203_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2174_2203_Closed_Text.style.display='none'; Codehighlighter1_2174_2203_Open_Image.style.display='inline'; Codehighlighter1_2174_2203_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setStatus(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;status)&nbsp;</span><span id="Codehighlighter1_2174_2203_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2174_2203_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">75</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.status&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;status;<br />
</span><span style="color: #008080">76</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">77</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">78</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">79</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">80</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
</font><br />
输出：<br />
<br />
<font style="background-color: #cce8cf">Hello World<br />
Goodbye cruel world</font><br /><img src ="http://www.blogjava.net/apple0668/aggbug/309883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/apple0668/" target="_blank">apple0668</a> 2010-01-17 21:08 <a href="http://www.blogjava.net/apple0668/archive/2010/01/17/309883.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>