浏览 5500 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-15
我想这样的:在调用的主程序中assert一个含有俩变量的类对象, ComputeUsage usage = new ComputeUsage(); mem.assertObject(usage); 然后在drl中声明它为global global ComputeUsage usage 在对应的rule中设置usage的值, rule "Server On" salience 2000 when #conditions server : Server(status == true) then #actions System.out.println(server); //usage.setAvail(usage.getAvail()+1); //usage.setSum(usage.getSum()+1); computeUsage(server); end rule "Server Off" #include attributes such as "salience" here... salience 2000 when #conditions server : Server(status == false) then #actions System.out.println(server); //usage.setSum(usage.getSum()+1); computeUsage(server); // Inform the mangers end 最后用一个函数对其进行计算并输出。 function void computeUsage(Server server) { System.out.println("The usage rate of the server ["+server.getHost()+"] is {"(usage.getAvail()/usage.getSum())"}\n"); //System.err.println(); } 可是老是不正确。有如下错误: Server [127.0.0.1]'s status is [false]; The Response time is (0)ms java.lang.NullPointerException at audion.check.Rule_Server_Off_0.consequence(Rule_Server_Off_0.java:9) at audion.check.Rule_Server_Off_0ConsequenceInvoker.evaluate(Rule_Server_Off_0ConsequenceInvoker.java:23) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:467) at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:431) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:360) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:341) Chief Manager Haibin has been informed about the failure of server [127.0.0.1]. at audion.checkserver.PingServer.main(PingServer.java:62) Exception in thread "main" org.drools.spi.ConsequenceException: java.lang.NullPointerException at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:471) at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:431) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:360) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:341) at audion.checkserver.PingServer.main(PingServer.java:62) Caused by: java.lang.NullPointerException at audion.check.Rule_Server_Off_0.consequence(Rule_Server_Off_0.java:9) at audion.check.Rule_Server_Off_0ConsequenceInvoker.evaluate(Rule_Server_Off_0ConsequenceInvoker.java:23) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:467) ... 4 more 不知道怎么回事啊?这个global和function到底怎么用啊?谁可以给个例子啊?谢谢啦! PS:我只是个新手,不大会。还有这个例子当然可以不用Drools做,可能会更简单。不过我只是想试试这种工具。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-15
对于java 值对象数据域 的维护不要放在drools 判断逻辑里面做。
坚决杜绝再规则中调用 数据库、网络、i/o方面的method,同样,也不能写这样的util脚本。。 规则引擎适合对业务对象现有状况进行判断、监控业务对象的状态变化,作一些简单的结果设置。 记住:规则引擎是一个决策者,而不是执行者。 |
|
返回顶楼 | |
发表时间:2007-04-15
嗯。是啊!
可是这个错误是为什么??很郁闷的说。没有资料可以参考。 |
|
返回顶楼 | |
发表时间:2007-04-15
Godlikeme 写道 对于java 值对象数据域 的维护不要放在drools 判断逻辑里面做。
坚决杜绝再规则中调用 数据库、网络、i/o方面的method,同样,也不能写这样的util脚本。。 规则引擎适合对业务对象现有状况进行判断、监控业务对象的状态变化,作一些简单的结果设置。 记住:规则引擎是一个决策者,而不是执行者。 Godlikeme老兄,你似乎非常在意规则引擎应用的纯粹性,但推断了不反映谁来反应呢?自己再写一套IF Else么,如果是Drools这么用本身有问题,那当然另当别论。我觉得楼主的问题是没有处理好反映执行的问题。Godlikeme,我理解你的意思是担心业务连续性被这些异常给干掉了,是这样么?如果不是核心系统。我看这么做也没什么关系,我看没什么问题。 btw:谈谈你认为更好的方式吧,说具体点,不要提得太笼统了,不是那么好理解。。 |
|
返回顶楼 | |
发表时间:2007-04-15
如果充当执行者,如何确定规则可执行的作用范围呢。如何评估执行结果对整个系统的影响。
系统会不会被异常干掉是系统的问题。这里讨论的是规则引擎角色的问题。 |
|
返回顶楼 | |
发表时间:2007-04-15
Godlikeme 写道 如果充当执行者,如何确定规则可执行的作用范围呢。如何评估执行结果对整个系统的影响。
系统会不会被异常干掉是系统的问题。这里讨论的是规则引擎角色的问题。 角色: 规则可用的程序,规则的角色?会不会太极端了一点?搞得跟操作系统一样了,呵呵。只要有权限运行规则应该就可以了 评估: 评估对系统的影响。。。 我已经有点晕了,如果直接写代码来执行又如何评估范围和结果呢,应该也是一个反馈后来处理吧,可能我们站的角度不同,看到的东西不同,不过这么说我确实没有什么实质认识 总结一下,我感觉对于规则专家知识库的用法,我觉得我们没什么实质性差异。差异出在规则推理出来了,是呈现给人来看,还是机器自己就做了。我的描述准确么? |
|
返回顶楼 | |
发表时间:2007-04-15
workingMemory.setGlobal("computeUsage",computeUsage ); |
|
返回顶楼 | |
发表时间:2007-04-15
http://www.iteye.com/topic/7803?page=3
请阅读oz6的回复 |
|
返回顶楼 | |
发表时间:2007-04-16
Godlikeme 写道 如果充当执行者,如何确定规则可执行的作用范围呢。如何评估执行结果对整个系统的影响。
系统会不会被异常干掉是系统的问题。这里讨论的是规则引擎角色的问题。 oz6个人感觉写得比较深刻,很多东西我很有感受,当然有些我也没什么感受。但是,就跟他说的一样,关键是怎么用,怎么认识这个东西。规则我就是一个用来做判断业务规则耦合上下层的东西,这个东西对建模确实有影响,但是好好设计,外加注意避开一些问题完全不存在什么问题。还有一个额外的好处,这么做在做判断的时候确实非常清晰,降低了思考难度,分清楚了工作界限,这个对开发来说我认为很重要,至少效率挺高,改动起来,只要不动模型,一切都是几句不用编译的Rule。我在没有看到更好的方式的时候我会继续这么做,因为确实降低了我做东西的实施难度,也远比配置xml清晰灵活。 |
|
返回顶楼 | |