Drools 3.1M中global的使用问题

做了个小实验:想周期性的去Ping一个服务器,然后计算服务器可用率,比方说两次中ping通了一次,可用率就是0.5。但这需要在drl文件中针对不同情况(on/off)对变量进行设置,并且保证在每次ping的过程中变量值可以累积。这怎么做呀?? :(

我想这样的:在调用的主程序中assert一个含有俩变量的类对象,
[code]ComputeUsage usage = new ComputeUsage();
mem.assertObject(usage);[/code]

然后在drl中声明它为global
[code]
global ComputeUsage usage
[/code]
在对应的rule中设置usage的值,
[code]
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
[/code]

最后用一个函数对其进行计算并输出。
[code]
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();
}
[/code]

可是老是不正确。有如下错误:
[code]
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
[/code]
不知道怎么回事啊?这个global和function到底怎么用啊?谁可以给个例子啊?谢谢啦!

PS:我只是个新手,不大会。还有这个例子当然可以不用Drools做,可能会更简单。不过我只是想试试这种工具。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值