跳转到内容

程序新视界

开启程序员的新视界

  • Spring Cloud
  • 面试题
  • 视频教程

Drools规则引擎之元数据

  • 发表于: 2020年3月19日 2020年3月19日
  • 分类: drools, 规则引擎
  • 标签: drools, metadata, 规则引擎

Declaring Metadata

元数据可使用到以下Drools结构中:事实(Fact)类型、属性和规则。Drools使用符号(@)引入元数据,使用格式如下:

@metadata_key(metadata_value)

metadata_value为可选项。
比如,如果要声明一个元数据属性author,值为bot,声明格式如下:

@author(Bob)

Drools允许任意元数据属性的声明,有些有特殊意义,有些只是用于运行时查询。Drools允许声明元数据的类型和属性。任何元数据之前声明的属性类型分配给事实类型,而元数据后表示一个属性被分配了特定的属性。

import java.util.Date
 declare Person
     @author( Bob )
     @dateOfCreation( 01-Feb-2009 )
     name : String @key @maxLength( 30 )
     dateOfBirth : Date 
     address : Address
 end

上例中,有两个元数据项声明的类型,@author和@dateOfCreation,和两个名为@key和@maxLength。@key元数据没有值,所以”括号” 也可以省略掉。

Predefined class level annotations预定义的类级别注释
有些注释预定义的语义解释的引擎。下面列出这些预定义的注释和它们的含义。
@role()
@role注释定义引擎应如何处理该类型的实例:要么是定期的事实或事件。
它接受两个可能的值:
fact : 是默认的,是处理类型作为一个普通的fact。
event : 是处理一个event 类型 event :事件

@typesafe()
默认情况下所有类型声明编译启用了类型安全;@typesafe(false)提供了一种方法来覆盖这个行为通过允许一个备用,类型安全评估所有约束生成MVEL约束和动态执行。这一点非常重要,当处理集合,没有泛型或混合型集合。

@timestamp()
每个事件都有一个关联的时间戳分配给它。默认情况下,对于一个给定的事件的时间戳从会话读时钟和分配给当时的事件事件插入到工作记忆。虽然,有时候,事件的时间戳作为自己的属性。在这种情况下,用户可能告诉引擎使用时间戳从事件的属性而不是从会话读时钟。

@duration()
Drools既支持事件语义:时间点事件和基于间隔事件。一个时间点事件都被表示为一个基于间隔事件的持续时间为零。默认情况下,所有事件持续时间为零。用户可能属性不同的时间事件通过声明属性的事件类型包含事件的持续时间。

@expires()
事件可能会自动过期一段时间后,在工作记忆。通常出现这种情况时,基于现有的规则知识库,事件可以不再匹配和激活任何规则。虽然,可以显式地定义事件时应该到期。
@expires() [#d][#h][#m][#s][#[ms]]
例如:@expires( 1h35m )

@propertyChangeSupport
Facts实现支持属性更改Javabean(tm)中定义的规范,现在可以进行注释,这样发动机本身注册监听变化事实属性。 boolean,用于insert()方法在Drools 4 API是弃用,不存在drools-api模块。

Predefined attribute level annotations预定义的属性级注释
@position模式支持位置参数类型声明。
简单的说明,就是该元数据起到的作用时标识,例如:

declare Person
     count : int @position(1)
     name:String @position(0)
 end

在规则中的引用,正确的写法是,Person p=newPerson(“张三”,10);
如果这两个两个值的顺序变了,也是会报错的。所以,我们现在应该明白这个元数据的作用了吧,就是指定参数位置的声明
@key 用法比较简单
属性将被用作一个关键标识符的类型,所以,生成的类将实现equals()和hashCode()方法时考虑属性比较这种类型的实例。
Drools将生成一个构造函数使用所有关键属性作为参数。
我们通过例子来说明一下:

declare Person2
     count : int @key
     name:String
 end

count:
对于前面的示例,Drools将生成equals()和hashCode()方法,还会生成一个构造函数,我们就可以写成:

 rule "3declare使用3"
     when
         eval(true)
     then
        Person2 p=new Person2(40 );
        insert(p);
 end

Declaring Metadata for Existing Types现有类型的元数据
Drools允许现有类型的元数据属性的声明一样,当宣布为新的事实类型元数据属性。唯一的区别就是没有字段声明。
那我们举个例子说明一下:

 import  com.jars1.jars1.Person;
 declare Person
       @author(Bob)
       @dateOfCreation(01-Feb-2009)
 end 
 declare  com.jars1.jars1.Person
       @author(Bob)
       @dateOfCreation(01-Feb-2009)
 end

Drools技术视频

CSDN学院:《Drools7 规则引擎视频教程》

CSDN学院:《Drools7系列优惠套餐》

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

CSDN学院:《Drools规则引擎之决策表从入门到精通》



Drools规则引擎之元数据插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2020/03/19/drools-metadata/

文章导航

前一页 上一篇: Drools规则引擎7.x与8.x版本更新
后一页 下一篇: Drools规则引擎之决策表从入门到精通

secbro2

程序新视界,一个软实力、硬知识同时提升的平台
1079RSS订阅

搜索

搜索:

微信公号:程序新视界

程序新视界
一个软技能、硬实力同时提升的公众号。

Spring Boot出版书籍

视频教程

《Spring Boot 视频教程全家桶》
《Drools7基础和Workbench实战套餐》 《Drools 7系列优惠套餐》
《Drools 7 规则引擎入门教程》
《Drools 7 规则引擎进阶教程》
《Drools规则引擎之决策表从入门到精通》

分类目录

  • AI
  • ChatGPT
  • docker
  • drools
  • fastdfs
  • freemarker
  • geth
  • git
  • Golang
  • IDEA
  • Java
  • JavaFx
  • jqGrid
  • jvm
  • k8s
  • LeetCode算法
  • Linux
  • log4j
  • matplotlib
  • Maven
  • mqtt
  • mybatis
  • mysql
  • nacos
  • netty
  • Nginx
  • postGreSQL
  • python
  • redis
  • shiro
  • slf4j
  • solidity
  • spring
  • spring
  • Spring Boot
  • Spring Cloud
  • vue
  • wildfly
  • zk
  • 其他
  • 分布式
  • 前端
  • 区块链
  • 单元测试
  • 多线程
  • 实战
  • 微服务
  • 性能
  • 数据库
  • 日志
  • 机器学习
  • 架构
  • 消息队列
  • 物联网
  • 程序人生
  • 规则引擎
  • 设计模式
  • 读书
  • 跨境支付
  • 运维
  • 面试
  • 项目实战

近期文章

  • 检索增强生成(RAG)在大语言模型中的应用
  • matplotlib的scatter()函数和plot()函数的区别
  • NumPy求解线性方程组linalg.solve函数详解
  • 误差的希腊符号表示是什么
  • Python中有哪些可迭代对象

友链

Felordcn

Cryptospace

© 2025  程序新视界. 京ICP备16031979号 由 WordPress 强力驱动. WordStar, 主题由Linesh Jose提供