读书人

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

发布时间: 2012-11-17 11:14:15 作者: rapoo

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

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

? 业务简要描述:

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

????-----------------------------------------

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

      c: Card()eval(....||.....) 再说再难看么客户也看不到,实在自己受不了么,用ognl封一下好了。 8 楼 Godlikeme 2007-04-21 drools文档中明确指出 不赞同在rule中调用工作流。rule只做一个决策节点。
      在lhs动态eval是很低效的,rete匹配树要重新生成,是rule engine中最重量级操作之一。 9 楼 Godlikeme 2007-04-21 我一直想问一个问题,在这个系统中,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 了。 11 楼 eyejava 2007-04-21 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的商业价值不完全如你所说,“用简单的方式完成复杂的逻辑”也是它的竞争力所在,电信的计费系统就是很好的例子。 13 楼 sonic_yj 2007-04-22 Godlikeme 写道我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。

      规则大家都明白,但是要变成规则语言的合理描述。个人感觉能有这种水平的用户是少之又少,想用好这个规则用法个人感觉一般都有软件方面背景。新的程序员都不一定会按规则方式思维。我目前对这个东西的定义是降低复杂度(开发和项目人员业务描述难度),还远远达不到给客户用的水平 14 楼 sonic_yj 2007-04-22 dada 写道“用简单的方式完成复杂的逻辑”也是它的竞争力所在,电信的计费系统就是很好的例子。

      我也是从这个认识开始接触Drools的,呵呵。现在我也很喜欢Drools引擎实施编译的灵活性 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的实现是如何优化的。

      16 楼 Godlikeme 2007-04-23 eyejava 写道Godlikeme 写道我一直想问一个问题,在这个系统中,rule engine的end user是谁,在我看来end user是开发人员。而就我所理解,rule engine的商业价值在于其能够让系统开放接口给非技术的业务专家,通过业务专家制定业务规则来决定系统行为。
      对的,如果业务人员能定义自己的规则就完美了,问题是现在没有开源实现,路要一步步走

      不是没有,只是不是太好,离终极目标有差距,ilog做的还算可以,主要问题是用起来很蹩脚,客户化也很难弄,webui功能太差。多数都是根据具体业务需求定制。

读书人网 >软件架构设计

热点推荐