
我想这样的:在调用的主程序中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做,可能会更简单。不过我只是想试试这种工具。