做了个小实验:想周期性的去Ping一个服务器,然后计算服务器可用率,比方说两次中ping通了一次,可用率就是0.5。但这需要在drl文件中针对不同情况(on/off)对变量进行设置,并且保证在每次ping的过程中变量值可以累积。这怎么做呀??
我想这样的:在调用的主程序中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做,可能会更简单。不过我只是想试试这种工具。
分享到:
相关推荐
8. **集成到项目**:文档会提供将Drools集成到Java项目中的步骤,包括依赖添加、规则库的构建、以及如何在代码中使用Drools API。 9. **优化与性能**:Drools提供了多种性能优化手段,如规则排序、并行执行等。这...
此外,文档还会涵盖如何集成Drools到你的应用中,包括使用Maven或Gradle构建工具进行依赖管理,以及如何在代码中使用Drools API来执行规则。这将涉及创建KnowledgeBase、KnowledgeSession以及如何加载规则文件,以便...
### 规则引擎Drools使用手册:4.0版更新要点详解 #### 一、Drools 4.0新特性概览 Drools 4.0是一次重要的更新,相较于之前的Drools 3.0.x系列,在语言表达、引擎性能以及工具实用性等方面都有显著提升。以下为此次...
4. drools-examples:这可能是一个包含drools使用示例的目录,帮助开发者理解如何在实际项目中应用drools,涵盖了各种规则的创建、加载和执行。 drools 使用DRL(Drools Rule Language)作为规则定义的语言,它支持...
drools 最新文档 7.10 规则引擎中文文档,含 规则可视化操作说明,规则配置说明等; Drools 实现和提供了 Rete 算法;也曾提供 Leaps,但因为它无人维护而撒销了。Drools Rete 实现也被称为 ReteOO
2. 使用`from`:在Drools 3.1M版本中,`from`关键字引入,它允许从数据源中动态地获取数据。这可能是一个更优雅的解决方案,尤其是在处理复杂对象关系时,可以从一个对象导航到另一个对象。 然而,面对更复杂的情况...
在 Drools 4.0.7 中,默认情况下,编译器使用 Eclipse JDTcore,但是这会导致部署到 JBoss 上时出现问题。解决方案是使用 Janino 编译器,通过 PackageBuilderConfiguration 来指定编译器。例如: `...
而在Drools 4.0.x中,则需要使用`rulebase.newStatefulSession()`创建有状态的Rule Session。 - **WorkingMemory操作**:为了避免关键字冲突,部分WorkingMemory的操作方法名称发生了改变,例如`assertObject()`...
《Drools4.0官方使用手册中文》与《Drools5规则引擎开发教程.pdf》是两个关于Drools规则引擎的重要参考资料。Drools是一个开源的业务规则管理系统(BRMS),它允许开发者通过规则语言来实现复杂的业务逻辑,以此提高...
### 规则引擎Drools 中文使用教程 #### Drools简介 Drools是一款功能强大的开源业务规则管理系统(BRMS),它支持业务规则管理、业务流程管理和复杂事件处理等功能。Drools最初是一个独立的项目,后来被JBoss收购...
Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java
Drools7_PDF教程 Drools中文文档 内容全面。...1. 内容更加全面,更多细节,更多知识点全部在新版本中有所体现,并且会附上小编做的例子 ,更多内容不断更新中 2. 目前国内最全的Drools中文文档。也是目前国内唯一一本
Drools是一个Java语言版本的基于Charles...对于其它实现,Drools通过使用Schema定义XML提供Declarative Programming和足够程度的扩展性来匹配其它领域的编程语言。领域标准语言(DSLs)包含XML元素和属性来描述问题域。
Drools提供了用户指南,引导用户如何从基础开始使用该规则引擎,包括执行控制、推理、使用逻辑对象进行真相维护、电子表格中的决策表以及记录功能。其中,决策表是一种将复杂逻辑规则简化表示的方法,它允许用户以...
【jbpm3.1中文文档】是一份详细阐述jbpm工作流程引擎的资源,它包含了大量的信息,旨在帮助用户理解和掌握jbpm 3.1版本的核心功能和使用方法。jbpm是一个开源的工作流程管理系统,它提供了强大的业务流程建模、执行...
规则引擎一般是一下情况使用 1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂。 2.市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新。 3.为了快速、低成本的更新,业务人员...