`
Audion
  • 浏览: 13620 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

Drools 3.1M中global的使用问题

阅读更多
做了个小实验:想周期性的去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 楼 sonic_yj 2007-04-16  
Godlikeme 写道
如果充当执行者,如何确定规则可执行的作用范围呢。如何评估执行结果对整个系统的影响。

系统会不会被异常干掉是系统的问题。这里讨论的是规则引擎角色的问题。


  oz6个人感觉写得比较深刻,很多东西我很有感受,当然有些我也没什么感受。但是,就跟他说的一样,关键是怎么用,怎么认识这个东西。规则我就是一个用来做判断业务规则耦合上下层的东西,这个东西对建模确实有影响,但是好好设计,外加注意避开一些问题完全不存在什么问题。还有一个额外的好处,这么做在做判断的时候确实非常清晰,降低了思考难度,分清楚了工作界限,这个对开发来说我认为很重要,至少效率挺高,改动起来,只要不动模型,一切都是几句不用编译的Rule。我在没有看到更好的方式的时候我会继续这么做,因为确实降低了我做东西的实施难度,也远比配置xml清晰灵活。
7 楼 Godlikeme 2007-04-15  
http://www.iteye.com/topic/7803?page=3

请阅读oz6的回复
6 楼 dada 2007-04-15  
workingMemory.setGlobal("computeUsage",computeUsage );
5 楼 sonic_yj 2007-04-15  
Godlikeme 写道
如果充当执行者,如何确定规则可执行的作用范围呢。如何评估执行结果对整个系统的影响。

系统会不会被异常干掉是系统的问题。这里讨论的是规则引擎角色的问题。


角色:
  规则可用的程序,规则的角色?会不会太极端了一点?搞得跟操作系统一样了,呵呵。只要有权限运行规则应该就可以了

评估:
  评估对系统的影响。。。 我已经有点晕了,如果直接写代码来执行又如何评估范围和结果呢,应该也是一个反馈后来处理吧,可能我们站的角度不同,看到的东西不同,不过这么说我确实没有什么实质认识

  总结一下,我感觉对于规则专家知识库的用法,我觉得我们没什么实质性差异。差异出在规则推理出来了,是呈现给人来看,还是机器自己就做了。我的描述准确么?
4 楼 Godlikeme 2007-04-15  
如果充当执行者,如何确定规则可执行的作用范围呢。如何评估执行结果对整个系统的影响。

系统会不会被异常干掉是系统的问题。这里讨论的是规则引擎角色的问题。
3 楼 sonic_yj 2007-04-15  
Godlikeme 写道
对于java 值对象数据域 的维护不要放在drools 判断逻辑里面做。
坚决杜绝再规则中调用 数据库、网络、i/o方面的method,同样,也不能写这样的util脚本。。

规则引擎适合对业务对象现有状况进行判断、监控业务对象的状态变化,作一些简单的结果设置。

记住:规则引擎是一个决策者,而不是执行者。


Godlikeme老兄,你似乎非常在意规则引擎应用的纯粹性,但推断了不反映谁来反应呢?自己再写一套IF Else么,如果是Drools这么用本身有问题,那当然另当别论。我觉得楼主的问题是没有处理好反映执行的问题。Godlikeme,我理解你的意思是担心业务连续性被这些异常给干掉了,是这样么?如果不是核心系统。我看这么做也没什么关系,我看没什么问题。

  btw:谈谈你认为更好的方式吧,说具体点,不要提得太笼统了,不是那么好理解。。 
2 楼 Audion 2007-04-15  
嗯。是啊!
可是这个错误是为什么??很郁闷的说。没有资料可以参考。
1 楼 Godlikeme 2007-04-15  
对于java 值对象数据域 的维护不要放在drools 判断逻辑里面做。
坚决杜绝再规则中调用 数据库、网络、i/o方面的method,同样,也不能写这样的util脚本。。

规则引擎适合对业务对象现有状况进行判断、监控业务对象的状态变化,作一些简单的结果设置。

记住:规则引擎是一个决策者,而不是执行者。

相关推荐

    drools7.25中文文档+drools技术指南.zip

    8. **集成到项目**:文档会提供将Drools集成到Java项目中的步骤,包括依赖添加、规则库的构建、以及如何在代码中使用Drools API。 9. **优化与性能**:Drools提供了多种性能优化手段,如规则排序、并行执行等。这...

    Drools7.25中文文档.7z

    此外,文档还会涵盖如何集成Drools到你的应用中,包括使用Maven或Gradle构建工具进行依赖管理,以及如何在代码中使用Drools API来执行规则。这将涉及创建KnowledgeBase、KnowledgeSession以及如何加载规则文件,以便...

    规则引擎Drools使用手册(中文)

    ### 规则引擎Drools使用手册:4.0版更新要点详解 #### 一、Drools 4.0新特性概览 Drools 4.0是一次重要的更新,相较于之前的Drools 3.0.x系列,在语言表达、引擎性能以及工具实用性等方面都有显著提升。以下为此次...

    drools drools drools drools drools

    4. drools-examples:这可能是一个包含drools使用示例的目录,帮助开发者理解如何在实际项目中应用drools,涵盖了各种规则的创建、加载和执行。 drools 使用DRL(Drools Rule Language)作为规则定义的语言,它支持...

    drools-7.10中文技术文档.pdf

    drools 最新文档 7.10 规则引擎中文文档,含 规则可视化操作说明,规则配置说明等; Drools 实现和提供了 Rete 算法;也曾提供 Leaps,但因为它无人维护而撒销了。Drools Rete 实现也被称为 ReteOO

    规则引擎处理复杂对象论坛1

    2. 使用`from`:在Drools 3.1M版本中,`from`关键字引入,它允许从数据源中动态地获取数据。这可能是一个更优雅的解决方案,尤其是在处理复杂对象关系时,可以从一个对象导航到另一个对象。 然而,面对更复杂的情况...

    drools4.0.7 utf-8中文乱码.doc

    在 Drools 4.0.7 中,默认情况下,编译器使用 Eclipse JDTcore,但是这会导致部署到 JBoss 上时出现问题。解决方案是使用 Janino 编译器,通过 PackageBuilderConfiguration 来指定编译器。例如: `...

    drools规则引擎4.0中文使用手册

    而在Drools 4.0.x中,则需要使用`rulebase.newStatefulSession()`创建有状态的Rule Session。 - **WorkingMemory操作**:为了避免关键字冲突,部分WorkingMemory的操作方法名称发生了改变,例如`assertObject()`...

    Drools4.0官方使用手册中文

    《Drools4.0官方使用手册中文》与《Drools5规则引擎开发教程.pdf》是两个关于Drools规则引擎的重要参考资料。Drools是一个开源的业务规则管理系统(BRMS),它允许开发者通过规则语言来实现复杂的业务逻辑,以此提高...

    规则引擎Drools 中文使用教程

    ### 规则引擎Drools 中文使用教程 #### Drools简介 Drools是一款功能强大的开源业务规则管理系统(BRMS),它支持业务规则管理、业务流程管理和复杂事件处理等功能。Drools最初是一个独立的项目,后来被JBoss收购...

    Drools6 和 Drools7技术指南-中文文档.zip

    Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java

    Drools7_PDF教程 Drools中文文档 内容全面.zip

    Drools7_PDF教程 Drools中文文档 内容全面。...1. 内容更加全面,更多细节,更多知识点全部在新版本中有所体现,并且会附上小编做的例子 ,更多内容不断更新中 2. 目前国内最全的Drools中文文档。也是目前国内唯一一本

    Drools4中文使用手册

    Drools是一个Java语言版本的基于Charles...对于其它实现,Drools通过使用Schema定义XML提供Declarative Programming和足够程度的扩展性来匹配其它领域的编程语言。领域标准语言(DSLs)包含XML元素和属性来描述问题域。

    drools 7.1中文文档pdf完整版本

    Drools提供了用户指南,引导用户如何从基础开始使用该规则引擎,包括执行控制、推理、使用逻辑对象进行真相维护、电子表格中的决策表以及记录功能。其中,决策表是一种将复杂逻辑规则简化表示的方法,它允许用户以...

    jbpm3.1中文文档

    【jbpm3.1中文文档】是一份详细阐述jbpm工作流程引擎的资源,它包含了大量的信息,旨在帮助用户理解和掌握jbpm 3.1版本的核心功能和使用方法。jbpm是一个开源的工作流程管理系统,它提供了强大的业务流程建模、执行...

    drools使用excel实例

    规则引擎一般是一下情况使用 1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂。 2.市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新。 3.为了快速、低成本的更新,业务人员...

Global site tag (gtag.js) - Google Analytics