`
Audion
  • 浏览: 13706 次
  • 性别: 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脚本。。

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

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

相关推荐

    Drools4.0官方使用手册中文

    6.8.4. 在你的应用程序中使用规则流 161 6.9. XML规则语言 162 6.9.1. 何时使用XML 162 6.9.2. XML 格式 163 6.9.3. 遗留的Drools 2.x XML 规则格式 168 6.9.4. Automatic transforming between formats (XML and ...

    JBoss_Enterprise_BRMS_Platform-5-BRMS_User_Guide-zh-CN

    - **导入drl软件包**:支持将外部编写的规则包导入系统中使用。 **4.6 版本管理** 版本管理是BRMS的一个关键特性,它确保规则变更的历史记录得以保留,便于追踪和回滚。 **4.7 部署管理** 部署管理涉及到规则的...

    避开10大常见坑:DeepSeekAPI集成中的错误处理与调试指南.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    前端分析-2023071100789

    前端分析-2023071100789

    基于kinect的3D人体建模C++完整代码.cpp

    基于kinect的3D人体建模C++完整代码.cpp

    搞机工具箱10.1.0.7z

    搞机工具箱10.1.0.7z

    GRU+informer时间序列预测(Python完整源码和数据)

    GRU+informer时间序列预测(Python完整源码和数据),python代码,pytorch架构,适合各种时间序列直接预测。 适合小白,注释清楚,都能看懂。功能如下: 代码基于数据集划分为训练集测试集。 1.多变量输入,单变量输出/可改多输出 2.多时间步预测,单时间步预测 3.评价指标:R方 RMSE MAE MAPE,对比图 4.数据从excel/csv文件中读取,直接替换即可。 5.结果保存到文本中,可以后续处理。 代码带数据,注释清晰,直接一键运行即可,适合新手小白。

    性价比革命:DeepSeekAPI成本仅为GPT-4的3%的技术揭秘.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    基于ANSYS LSDyna的DEM-SPH-FEM耦合模拟滑坡入水动态行为研究,基于ANSYS LSDyna的DEM-SPH-FEM耦合的滑坡入水模拟分析研究,基于ansys lsdyna的滑坡入水

    基于ANSYS LSDyna的DEM-SPH-FEM耦合模拟滑坡入水动态行为研究,基于ANSYS LSDyna的DEM-SPH-FEM耦合的滑坡入水模拟分析研究,基于ansys lsdyna的滑坡入水模拟dem-sph-fem耦合 ,基于ANSYS LSDyna; 滑坡入水模拟; DEM-SPH-FEM 耦合,基于DEM-SPH-FEM耦合的ANSYS LSDyna滑坡入水模拟

    auto_gptq-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

    auto_gptq-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

    复件 复件 建设工程可行性研究合同[示范文本].doc

    复件 复件 建设工程可行性研究合同[示范文本].doc

    13考试真题最近的t64.txt

    13考试真题最近的t64.txt

    Microsoft Visual C++ 2005 SP1 Redistributable PackageX86

    好用我已经解决报错问题

    嵌入式开发入门:用C语言点亮LED灯的全栈开发指南.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    auto_gptq-0.4.2-cp38-cp38-win_amd64.whl

    auto_gptq-0.4.2-cp38-cp38-win_amd64.whl

    自动立体库设计方案.pptx

    自动立体库设计方案.pptx

    手把手教你用C语言实现贪吃蛇游戏:从算法设计到图形渲染.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

    性能对决:DeepSeek-V3与ChatGPTAPI在数学推理场景的基准测试.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    从零到一:手把手教你用Python调用DeepSeekAPI的完整指南.pdf

    在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!

    为什么你的switch总出bug?90%新手不知道的break语句隐藏规则.pdf

    # 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!

Global site tag (gtag.js) - Google Analytics