`

Java规则引擎学习-drools(一)

阅读更多

 

基础语义模块

       基础语义模块提供了一种在XML种构建RuleSet(规则集)的语言,单独地,基础语义模块不能写一个完整而有效地规则文件,它必须和别的语义模块结合,这些模块包括Java语义模块、Groovy语义模块、Pythos语义模块或者是一个自定义地,指定域地语义模块。

语法指南

rule-set 元素

       每个DRL文件必须有一个rule-set元素,而且名字在规则基础和定义绑定命名空间是唯一的。

attribute

optional?

description

name

no

This string must uniquely identify the rule-set in the rule base

<rule-set name="HelloWorld"

          xmlns="http://drools.org/rules"

          xmlns:java="http://drools.org/semantics/java"

          xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"

          xs:schemaLocation="http://drools.org/rules rules.xsd

                             http://drools.org/semantics/java java.xsd">

  ....

  ....

<rule-set>

 

Import元素

       对于任何想引用一个Class的元素,通过Imports来指定。

       元素的实体可以是一个全路径引用:

<import>java.util.HashMap</import>

或者是一个动态的import

<import>java.util.*</import>

 

application-data 元素

       application-data元素允许对象不需要将它们断言进入Working Memory,而对conditionsconsequences是可见的。

       如果没有在{{rule-set}}里定义,则Application data就不能被设置。Application data设置:

workingMemory.setApplicationData("amount", new Integer(3));

rule-set里定义一个 application data:

<application-data identifier="amount">java.lang.Integer</application-data>

 

Rule元素

       每个rule-set必须包含至少一个rule元素。在这个rule-set里,每个rule元素必须具有唯一的名字,也可以包含可选的salienceno-loop属性。如果duration元素被指定,则no-loop就会被忽略。

attribute

optional?

description

name

no

This string must uniquely identify the rule in the rule-set.

salience

yes

Default to 0. Must be numeric, integral, signed. Must be numeric, non-float values, can be negative. Example: salience="-42", salience="2".

no-loop

yes

Default to "false". Must be boolean. Example: no-loop="true", no-loop="false".

xor-group

yes

Allow only a single rule within a group to fire, all other rules in that group are then removed from the agenda. A rule can be in only a single xor group.

<rule name="Hello World" salience="10" no-loop="true" xor-group="group1">

  ...

  ...

</rule>

 

Parameter元素

       每个rule元素必须包含至少一个parameter元素,在此rule元素的范围里,parameter元素必须为其identifer属性使用一个唯一的名字。单独的,parameter元素不能做任何事。它需要一个级连的元素来声明一个对象类型,象classclass-field,semaphore object

attribute

optional?

description

identifier

no

This string must uniquely identify the parameter in the rule

<parameter identifier="goodbye">

  <class>java.lang.String</class>

</parameter>

 

class元素

       class元素是用在parameter元素内部的一种对象类型的实现。它没有属性,它的内容既可以是一个全路径类,或者是一个从预先导入的包中的类的名字。

attribute

optional?

description

<class>java.util.HashMap</class>

<class>HashMap</class>

class-field元素

       class-field元素是用在parameter元素内部的一种对象类型的实现。它不仅仅限制要给出class参数,而且规定需要为给定的字段(field)指定一个值(value),这个字段别限定是字符串类型,字段的值也是一个静态字符串。

attribute

optional?

description

field

no

The name of the field of the type String, written to JavaBean specifications with setters and getters

value

no

Static value constraint for the given field

<class-field field="name" value="A">State</class-field>

这和下面代码段是类似的:

<parameter identifier="state">

    <class>State</class>

</parameter>

 

<java:condition>state.getName().equals("A")<java:condition>

 

Semaphore元素

    Semaphore元素用在parameter元素内部的一种特别对象类型的实现。它提供了在规则里使用的全局的命名变量,在那里,identifier就是这个全局名字。这对于控制执行是非常有用的。

attribute

optional?

description

type

no

The type of semaphore

声明一个没有初始化值的semaphore:

workingMemory.assertObject( new StringSemaphore( "state" ) );

声明一个有初始化值的semaphore:

workingMemory.assertObject( new StringSemaphore( "state", "START" ) );

在一个参数里指定一个semaphore

<parameter identifier="state">

    <semaphore type="String" />

</parameter>

支持的semphore:

  • CharSemaphore
  • DoubleSemaphore
  • FloatSemaphore
  • IntegerSemaphore
  • ListSemaphore
  • LongSemaphore
  • MapSemaphore
  • SetSemaphore
  • ShortSemaphore
  • StringSemaphore

duration元素

       duration元素能够使Temporal Rules,如果在一个给定的时间内,temporal Rules仍旧是true

attribute

optional?

description

seconds

yes

Unit of time

minutes

yes

Unit of time

hours

yes

Unit of time

days

yes

Unit of time

<duration seconds="2" />

分享到:
评论

相关推荐

    Java规则引擎---Drools的介绍及应用

    然而,JSR 94虽然制定了规则引擎的标准框架,但其具体实现则交由第三方开发者完成,这催生了一系列Java规则引擎产品,其中Drools无疑是佼佼者。 **Drools的特性与优势**: 1. **灵活性**:Drools支持多种规则表达...

    [Drools]JAVA规则引擎 -- Drools

    【Drools】JAVA规则引擎 -- Drools Drools 是一个开源的业务规则管理系统(BRMS),它基于Java语言,提供了强大的规则引擎,帮助企业快速实现业务规则的编写、管理和执行。Drools 受到了广泛的欢迎,尤其在那些需要...

    Java规则引擎--Drools的介绍及应用

    规则引擎技术是一项很有吸引力的技术....然后重点介绍了Java规则引擎技术的规范和一个采用XML和java语言实现的规则引擎--Drools.最后给出了利用Drools解决实际问题的范例并探讨了该技术的不足和发展前景

    java规则引擎 -- Drools

    Java规则引擎Drools是一种强大的业务规则管理系统,它允许开发者将复杂的业务逻辑以规则的形式分离出来,便于管理和维护。Drools是基于Model Driven Architecture(MDA)的,它支持RuleML和Business Rule Markup ...

    JAVA规则引擎--Drools.doc

    Drools 是一个基于 Java 的规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。 知识点: 1、Drools 的基本工作...

    Java规则引擎-Drools的介绍及应用-刘伟.pdf

    Drools是Java规则引擎的一种实现,它使用XML和Java语言实现规则引擎的规范。Drools提供了一个完整的规则引擎解决方案,包括规则编辑器、规则引擎和规则执行器。Drools的规则引擎可以与Java集成,提供了一个强大的...

    kie-drools-wb

    kie-drools-wb,这个名字代表着Drools工作台(Drools Workbench)的运行时库,它是 Drools 高级规则引擎的重要组成部分。Drools 是一个开源的业务规则管理系统(BRMS),它提供了一种高效、灵活的方式来编写、测试和...

    kie-drools-wb-6.5可运行tomcat版

    Drools是一款强大的规则引擎,而Drools Workbench则为它提供了一个直观的、基于Web的开发环境。这里我们关注的是这个版本能够在Tomcat 7.0.85上顺利运行,这为开发者提供了极大的便利。 首先,我们要了解Drools。...

    规则引擎-Drools-EasyRules教程

    **EasyRules**是一个轻量级的Java规则引擎,旨在简化规则引擎的使用。它的设计目标是易于学习和使用,同时保持足够的功能来满足大多数业务需求。EasyRules支持通过JSON文件定义规则,这使得非技术背景的用户也能方便...

    基于Java的规则引擎--java规则引擎

    - **JBoss Drools**:Drools是开源的Java规则引擎,它基于MVEL和Java的规则语言,提供强大的规则推理和工作流功能。 - **JESS**:JESS(Java Expert System Shell)是一个基于Lisp的规则引擎,虽然不如前两者流行...

    规则引擎drools-guvnor

    Drools-Guvnor 是一个基于 Java 的规则引擎,可以用于构建业务规则管理系统。下面是 Drools-Guvnor 的使用说明和知识点总结。 规则引擎 Drools-Guvnor 的基本概念 * Drools-Guvnor 是一个开源的规则引擎,可以用于...

    kie-drools 6.4.0 依赖jar包

    Drools是基于Java的规则引擎,它使用规则语言(DRL)来编写业务规则,使企业能够灵活地管理其操作和决策。 在6.4.0版本中,kie-drools 提供了以下核心功能和知识点: 1. **规则引擎**:Drools的核心是一个强大的...

Global site tag (gtag.js) - Google Analytics