`
sonic_yj
  • 浏览: 76898 次
  • 性别: Icon_minigender_1
  • 来自: CD
社区版块
存档分类
最新评论

学习集成和使用Drools 3 问题和求教

阅读更多

   开始试着集成Drools 3到开发框架中去,选了一个典型的ERP中订单转生产来配置规则来做测试 做着做着问题就来了

  业务简要描述:

     来了1笔订单明细,首先查询库房有没有存货,有转销售,没有转订单要求生产, 生产根据Bom分解内容,需要订货的订货,自己加工的分解加工,涉及到调用流程/数据保存的地方已经很好的集成进去了,规则无非就是判断做什么,可是下面的问题就头痛了,也许是刚入门的缘故,希望那位懂Drools的指点一下

    -----------------------------------------

  1. 基础问题,检查库存 LHS里面如何检查我的数量,我在global内集成一个hib方法,可以查询数量,可我看了半天也没明白怎么在LHS使用,或者说是用变量?我希望在Rule里面实现下面的效果,其中,ds,wf是global中引用的类

  1. rule "库存不足"  
  2.        
  3.     when   
  4.         od:Orders(count > ds.queryCount(od))   
  5.     then    
  6.         wf.createFlow("订单生产",od);          
  7. end  

 ps:上面的东西是没法通过jrule ide检查的 

  2. 难道我要为每一个产品分解建立一条规则?实现倒是没有问题,不过感觉似乎比使用Bom表方式效率低太多,应该不是最好的解决方式  

  1. rule "产品_1配料清单"  
  2.   when    
  3.      pd:product( name =="产品1")   
  4.   then   
  5.     ......   
  6. end   

3.上面的东西都是逐一处理,当然也可以,批量的东西怎么引入规则或者设计?比如给一个 List<Ordersdetail>, 其中一个detail或者所有detail来决定怎么处理 order怎么处理?

 

       也许问题很简单,也许我的用法就是错的,希望能有人指点一下。。

 

分享到:
评论
16 楼 Godlikeme 2007-04-23  
eyejava 写道
Godlikeme 写道
我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。

对的,如果业务人员能定义自己的规则就完美了,问题是现在没有开源实现,路要一步步走


不是没有,只是不是太好,离终极目标有差距,ilog做的还算可以,主要问题是用起来很蹩脚,客户化也很难弄,webui功能太差。多数都是根据具体业务需求定制。
15 楼 Godlikeme 2007-04-23  
eyejava 写道
Godlikeme 写道
drools文档中明确指出 不赞同在rule中调用工作流。rule只做一个决策节点。
在lhs动态eval是很低效的,rete匹配树要重新生成,是rule engine中最重量级操作之一。

调用a.getAbc() 只是一个很简单的去参数的方法,跟工作流没有关系。

eval只需要编译一次,后面的根本不浪费时间,我测试下来 都是 0ms ,搞得我挺纳闷的...不过 加上数据库存取就有 15ms 了。


第一个问题:不是说的一件事,我说的是 rule.createflow()..
第二个问题:不知道如何做的测试,问题关键不在eval的过程,eval要重新构造reteoo,不知道3.1的实现是如何优化的。

14 楼 sonic_yj 2007-04-22  
dada 写道
“用简单的方式完成复杂的逻辑”也是它的竞争力所在,电信的计费系统就是很好的例子。


  我也是从这个认识开始接触Drools的,呵呵。现在我也很喜欢Drools引擎实施编译的灵活性
13 楼 sonic_yj 2007-04-22  
Godlikeme 写道
我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。


  规则大家都明白,但是要变成规则语言的合理描述。个人感觉能有这种水平的用户是少之又少,想用好这个规则用法个人感觉一般都有软件方面背景。新的程序员都不一定会按规则方式思维。我目前对这个东西的定义是降低复杂度(开发和项目人员业务描述难度),还远远达不到给客户用的水平
12 楼 dada 2007-04-21  
Godlikeme 写道
我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。

你说的是理想状态。目前,即使是像ilog这样的成熟产品,也不能直接提供给业务人员来完全定制。
drools就目前的3.1m1来看基本达到了可堪使用的要求。然而在易用性上还有所不足(针对开发人员),要达到你说的要求还是前路漫漫。当然Rule engine的商业价值不完全如你所说,“用简单的方式完成复杂的逻辑”也是它的竞争力所在,电信的计费系统就是很好的例子。
11 楼 eyejava 2007-04-21  
Godlikeme 写道
我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。

对的,如果业务人员能定义自己的规则就完美了,问题是现在没有开源实现,路要一步步走
10 楼 eyejava 2007-04-21  
Godlikeme 写道
drools文档中明确指出 不赞同在rule中调用工作流。rule只做一个决策节点。
在lhs动态eval是很低效的,rete匹配树要重新生成,是rule engine中最重量级操作之一。

调用a.getAbc() 只是一个很简单的去参数的方法,跟工作流没有关系。

eval只需要编译一次,后面的根本不浪费时间,我测试下来 都是 0ms ,搞得我挺纳闷的...不过 加上数据库存取就有 15ms 了。
9 楼 Godlikeme 2007-04-21  
我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。
8 楼 Godlikeme 2007-04-21  
drools文档中明确指出 不赞同在rule中调用工作流。rule只做一个决策节点。
在lhs动态eval是很低效的,rete匹配树要重新生成,是rule engine中最重量级操作之一。
7 楼 dada 2007-04-21  
eyejava 写道
eval里面在3.0.6只能写 方法,不能 写 a.abc ,只能写a.getAbc()
现在写的规则文件繁琐又难看...

eval的存在不是为了做简单的域约束。 再说再难看么客户也看不到,实在自己受不了么,用ognl封一下好了。
6 楼 eyejava 2007-04-21  
eval里面在3.0.6只能写 方法,不能 写 a.abc ,只能写a.getAbc()
现在写的规则文件繁琐又难看...
5 楼 dada 2007-04-20  
eyejava 写道
eval 和 || 不知道怎么一起用。
比如 c:( Card(eval(a<getParameter("a")))||Card(eval(b<getParameter("b"))) )
这种写法不起作用。

c: Card()
eval(....||.....)
4 楼 dada 2007-04-20  
global无法在lhs上使用。global在应用中的定位确实比较模糊,有n种可以替代它的方式,而他恰恰是最不灵活的方式,个人觉得是实实在在的鸡肋。
传入变量的方式其实很简单,把变量当作fact处理,多个fact进行交互。用这个方式也很容易解决2的问题,即在数据库里面维护一个决策表,这样你的规则不会有很多条。
3的问题我不是很理解,能举详细一点的例子吗?
3 楼 eyejava 2007-04-20  
eval 和 || 不知道怎么一起用。
比如 c:( Card(eval(a<getParameter("a")))||Card(eval(b<getParameter("b"))) )
这种写法不起作用。
2 楼 sonic_yj 2007-03-21  
quaff 写道
据我的了解drools只能对fact对象的属性进行等于大于小于的比较,你可以为fact增加一个动态属性,获取这个属性值的时候就去查一次数据库,也就是这个fact对象是一个rich domain object,可以把factManager注入到fact中去


谢谢,我试试这个思路,但是rich domain object 在使用hibernate等方面会有问题么?这个我比较担心

BTW,LHR使用函数比较方法我也找到了,Eval(express)就可以了,我只是需要找到怎么把调用或者传入变量就可以了

ex:

rule "库存量不足"
no-loop
when
od:Orders(count > 0,nm:name ,ct:count)
eval (isStored(nm,ct))
then
od.setStatus("生产中");
modify(od);
wf.createFlow("生产",od);
end

其中isStored是函数
1 楼 quaff 2007-03-21  
据我的了解drools只能对fact对象的属性进行等于大于小于的比较,你可以为fact增加一个动态属性,获取这个属性值的时候就去查一次数据库,也就是这个fact对象是一个rich domain object,可以把factManager注入到fact中去

相关推荐

    drools6.4+spring集成

    通过分析源代码,你可以看到如何将Drools的API与Spring的配置和bean管理结合使用,以及如何在实际业务场景中触发和执行规则。 总之,Drools 6.4与Spring的集成提供了强大的业务规则处理能力,使得业务逻辑更加灵活...

    drools drools drools drools drools

    3. README_DEPENDENCIES.txt:这个文件通常会列出项目依赖的外部库或组件,以及如何获取和安装这些依赖的信息,这对于理解和构建drools项目至关重要。 4. drools-examples:这可能是一个包含drools使用示例的目录,...

    drools6学习例子

    Drools拥有活跃的社区和详尽的官方文档,学习过程中遇到问题可以查阅官方文档或在社区寻求帮助。 通过这个"drools6学习例子",你不仅可以掌握Drools的基础知识,还能深入理解其在实际项目中的应用,为你的IT职业...

    drools集成springboot demo

    drools是一款强大的规则引擎,它允许开发者以声明式的方式定义业务规则,并...通过学习和理解这个demo,开发者能够掌握drools与SpringBoot的集成技巧,从而在自己的项目中灵活运用规则引擎来提升业务处理的智能化程度。

    springboot集成drools实现重新加载规则

    当我们谈论"springboot集成drools实现重新加载规则"时,这意味着我们要在Spring Boot应用中嵌入Drools,并且能够动态地更新和加载业务规则,而不必重启应用。这对于业务规则频繁变更的场景非常有用,因为这样可以...

    Drools与Spring集成 登录测试

    通过Spring的依赖注入和管理机制,我们可以方便地在应用中集成和使用Drools,实现业务规则的动态调整和高效执行。在实际开发中,熟练掌握这种集成方式,能够极大地提升项目的可维护性和业务适应性。

    Drools

    在压缩包"drools-2.0"中,可能包含了Drools 2.0版本的库文件、文档、示例代码和API参考,这些都是学习和使用Drools的基础资源。通过研究这些内容,开发者可以深入了解Drools的工作原理,掌握如何在Java项目中集成和...

    SpringBoot集成 Activiti6 Drools.docx

    在本文中,我们将深入探讨如何将SpringBoot与Activiti6和Drools集成,以便在工作流中利用规则引擎提高应用程序的可维护性。Activiti6是一个轻量级的业务流程管理(BPM)框架,而Drools则是Java规则引擎,两者结合...

    drools7.5.0和spring 4.3.12集成示例

    同时,Spring 的配置文件(如 `applicationContext.xml` 或者使用Java配置)会声明一个规则执行服务,该服务使用 drools 的 `KieContainer` 来加载和运行规则。 `.settings` 目录包含的是项目特定的 Eclipse 设置,...

    spring boot 集成 websocket 与 drools 的实例

    在本文中,我们将深入探讨如何将Spring Boot与WebSocket和Drools集成,以构建一个能够实时更新前端数据并根据预定义规则执行业务逻辑的应用。首先,让我们分别了解这三个技术: **Spring Boot** Spring Boot是...

    使用 Drools 规则引擎实现业务逻辑

    4. **社区支持**:作为一个活跃的开源项目,Drools拥有强大的社区支持,能够提供丰富的文档和案例研究,帮助开发者快速解决问题并学习最佳实践。 #### 示例:XYZ公司的计算机测试案例 为了更好地理解Drools在实际...

    规则引擎Drools 之 springboot 集成、热加载

    前言: ...三、springboot集成drools  1.pom文件引入依赖 org.drools drools-core 7.0.0.Final org.drools drools-compiler 7.0.0.Final org.drools drools-decisiontabl

    Eclipse3.7集成JbossTools+Drools

    6. **Drools配置**:在Drools集成后,用户可以在"Preferences"中配置Drools的运行时环境,指定Drools的安装路径,以便Eclipse能够识别和使用Drools的相关库进行开发。 7. **开发支持**:集成完成后,Eclipse3.7将...

    Drools使用手册

    **Drools 使用手册** Drools 是一个强大的业务规则管理系统,它基于Java,由JBOSS团队开发,是JBoss企业级中间件的一部分...通过深入学习和实践,你可以有效地将Drools 应用于各种复杂业务场景,实现高效决策自动化。

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red ...通过这个"Drools规则引擎使用demo",你可以学习如何配置、加载规则,以及如何在Java应用程序中使用Drools进行规则的执行和事实的管理。这将为你构建智能决策系统提供坚实的基础。

    规则引擎Drools.NET移植版

    - **drools-dotnet.examples.dll**:包含示例代码和测试用例,帮助开发者理解和学习如何使用Drools.NET。 - **IKVM.GNU.Classpath.dll**和**IKVM.Runtime.dll**:这两个文件是IKVM的一部分,用于支持Java类库在.NET...

    Drools5规则引擎学习研究

    学习Drools不仅涉及语法和API的使用,还需要理解Rete算法的工作原理。Rete算法是一种高效的模式匹配方法,用于在大量模式和对象之间查找匹配。它分为规则编辑和运行时执行两部分,能够有效地减少计算复杂性。 总的...

    Drools4.0官方使用手册中文

    5. **第五章:决策表和Excel集成** - Drools支持使用决策表来编写规则,这使得非程序员也能参与规则的制定。本章将展示如何利用Excel进行规则定义,并将其导入到Drools系统中。 6. **第六章:Drools Flow** - ...

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

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

Global site tag (gtag.js) - Google Analytics