基于Java的动态配置规则的方法、装置、系统和可读介质转让专利

申请号 : CN202010638517.9

文献号 : CN111522558B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨涛刘丁源

申请人 : 嘉兴太美医疗科技有限公司

摘要 :

本申请提供了一种基于Java的动态配置规则的方法、装置、系统和计算机可读介质。该方法包括以下步骤:接收终端传入的RESTful调用请求,其中RESTful调用请求中包含规则表达式的字符串;基于预设知识库对字符串进行解析;将解析后的字符串拆解为相应的令牌并构建相应的抽象语法树;根据抽象语法树生成相应的字节码文件;以及将字节码文件加载进Java虚拟机并执行。该方法能够根据由终端传入的包含规则表达式的调用请求,生成相应的字节码文件并执行,从而实现了由终端业务人员进行规则的动态配置并即时实施规则,无需开发人员预先进行规则配置。

权利要求 :

1.一种基于Java的动态配置规则的方法,包括:

接收终端传入的RESTful调用请求,其中所述RESTful调用请求中包含规则表达式的字符串;

基于预设知识库中的预设知识点对所述字符串进行匹配和转化,其中所述预设知识库的数量为一个或多个,每个预设知识库中包括一个或多个所述预设知识点;

根据转化结果对所述字符串中的每个令牌进行类型标记,并得到解析后的所述字符串;

将解析后的所述字符串拆解为相应的令牌并构建相应的抽象语法树;

根据所述抽象语法树生成相应的字节码文件;以及

将所述字节码文件加载进Java虚拟机并执行。

2.如权利要求1所述的方法,其特征在于,所述将所述解析后的字符串拆解为相应的令牌并构建相应的抽象语法树是基于上下文无关文法、符号优先级和符号关联性进行拆解。

3.如权利要求1所述的方法,其特征在于,所述根据所述抽象语法树生成相应的字节码文件是使用Javaparser语法解析器进行。

4.如权利要求1所述的方法,其特征在于,所述规则表达式的字符串为基于函数调用和/或自然语言格式。

5.如权利要求1所述的方法,其特征在于,当所述预设知识库的数量为多个时,根据以下的一项或多项对所述多个预设知识库进行定义:租户、项目、以及业务场景。

6.一种基于Java的动态配置规则装置,包括:

接收模块,用于接收终端传入的RESTful调用请求,其中所述RESTful调用请求中包含规则表达式的字符串;

解析模块,用于基于预设知识库中的预设知识点对所述字符串进行匹配和转化,其中所述预设知识库的数量为一个或多个,每个预设知识库中包括一个或多个所述预设知识点;根据转化结果对所述字符串中的每个令牌进行类型标记,并得到解析后的所述字符串;

语法树模块,用于将解析后的所述字符串拆解为相应的令牌并构建相应的抽象语法树;

字节码文件模块,用于根据所述抽象语法树生成相应的字节码文件;以及加载模块,用于将所述字节码文件加载进Java虚拟机并执行。

7.一种基于Java的动态配置规则系统,包括:

存储器,用于存储可由处理器执行的指令;以及处理器,用于执行所述指令以实现如权利要求1-5任一项所述的方法。

8.一种存储有计算机程序代码的计算机可读介质,所述计算机程序代码在由处理器执行时实现如权利要求1-5任一项所述的方法。

说明书 :

基于Java的动态配置规则的方法、装置、系统和可读介质

技术领域

[0001] 本申请主要涉及数据处理技术领域,尤其涉及一种基于Java的动态配置规则的方法、装置、系统和计算机可读介质。

背景技术

[0002] 规则引擎是为了应对大量快速变化的商业业务逻辑应运而生的技术方案,能够根据既定事实和知识库按照一定的算法执行推理逻辑得到正确的结果。规则引擎主要由三部
分组成:知识库(Knowledge Base)、既定事实库(Fact Base)和推理机。
[0003] 现有技术中的硬编码方式、编程组件化OSGI、静态脚本(例如TypeScript使得逻辑部分修改实时生效)以及面向开发者的规则引擎(例如Urule、Drools、Easy-Rule)都是面向开发者的,需要开发人员预先进行规则配置,业务人员不能动态地配置或变更规则。
[0004] 因此,如何让业务人员能够动态地配置规则并即时实施规则是本领域技术人员亟需解决的问题。

发明内容

[0005] 本申请要解决的技术问题是提供一种基于Java的动态配置规则的方法、装置、系统和计算机可读介质,能够让终端用户动态地配置规则并即时实施规则。
[0006] 为解决上述技术问题,本申请提供了一种基于Java的动态配置规则的方法,包括:接收终端传入的RESTful调用请求,其中所述RESTful调用请求中包含规则表达式的字符
串;基于预设知识库对所述字符串进行解析;将解析后的所述字符串拆解为相应的令牌并
构建相应的抽象语法树;根据所述抽象语法树生成相应的字节码文件;以及将所述字节码
文件加载进Java虚拟机并执行。
[0007] 可选地,所述预设知识库的数量为一个或多个,其中每个预设知识库中包括一个或多个预设知识点。
[0008] 可选地,所述基于预设知识库对所述字符串进行解析包括:基于所述预设知识点对所述字符串进行匹配和转化;以及根据转化结果对所述字符串中的每个令牌进行类型标
记,并得到解析后的所述字符串。
[0009] 可选地,所述将所述解析后的字符串拆解为相应的令牌并构建相应的抽象语法树是基于上下文无关文法、符号优先级和符号关联性进行拆解。
[0010] 可选地,所述根据所述抽象语法树生成相应的字节码文件是使用Javaparser语法解析器进行。
[0011] 可选地,所述规则表达式的字符串为基于函数调用和/或自然语言格式。
[0012] 可选地,当所述预设知识库的数量为多个时,根据以下的一项或多项对所述多个预设知识库进行定义:租户、项目、以及业务场景。
[0013] 为解决上述技术问题,本申请还提供了一种基于Java的动态配置规则装置,包括:接收模块,用于接收终端传入的RESTful调用请求,其中所述RESTful调用请求中包含规则
表达式的字符串;解析模块,用于基于预设知识库对所述字符串进行解析;语法树模块,用于将解析后的所述字符串拆解为相应的令牌并构建相应的抽象语法树;字节码文件模块,
用于根据所述抽象语法树生成相应的字节码文件;以及加载模块,用于将所述字节码文件
加载进Java虚拟机并执行。
[0014] 为解决上述技术问题,本申请还提供了一种基于Java的动态配置规则系统,包括:存储器,用于存储可由处理器执行的指令;以及处理器,用于执行所述指令以实现如上所述的方法。
[0015] 为解决上述技术问题,本申请还提供了一种存储有计算机程序代码的计算机可读介质,所述计算机程序代码在由处理器执行时实现如上所述的方法。
[0016] 与现有技术相比,本申请的基于Java的动态配置规则的方法、装置、系统和计算机可读介质能够根据由终端传入的包含规则表达式的调用请求,生成相应的字节码文件并执行,从而实现了由终端业务人员进行规则的动态配置并即时实施规则,无需开发人员预先
进行规则配置。

附图说明

[0017] 包括附图是为提供对本申请进一步的理解,它们被收录并构成本申请的一部分,附图示出了本申请的实施例,并与本说明书一起起到解释本申请原理的作用。附图中:
[0018] 图1是根据本申请一实施例示出的基于Java的动态配置规则的方法的流程示意图。
[0019] 图2是根据本申请一实施例示出的基于Java的动态配置规则的装置的框图。
[0020] 图3是根据本申请一实施例示出的基于Java的动态配置规则的系统的系统框图。

具体实施方式

[0021] 为了更清楚地说明本申请的实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施
例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。除非从语言环境中显而易见或另做说明,图中相同标号代
表相同结构或操作。
[0022] 如本申请和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
[0023] 除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本申请的范围。同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。对于相关领域普通技术人员已知的技术、方
法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
[0024] 本申请中使用了流程图用来说明根据本申请的实施例的系统所执行的操作。应当理解的是,前面或下面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各种步骤。同时,或将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。
[0025] 本申请提供了一种基于Java的动态配置规则的方法。图1是根据本申请一实施例示出的基于Java的动态配置规则的方法的流程示意图。如图1所示,本实施例的基于Java的动态配置规则的方法可应用于基于Java的动态配置规则系统,该方法包括以下步骤:
[0026] 步骤101,接收终端传入的RESTful调用请求,其中RESTful调用请求中包含规则表达式的字符串;
[0027] 步骤102,基于预设知识库对字符串进行解析;
[0028] 步骤103,将解析后的字符串拆解为相应的令牌并构建相应的抽象语法树;
[0029] 步骤104,根据抽象语法树生成相应的字节码文件;以及
[0030] 步骤105,将字节码文件加载进Java虚拟机并执行。
[0031] 在步骤101中,系统接收终端传入的RESTful调用请求。终端可以由业务人员直接使用,调用请求可以由业务人员发送。RESTful(Representational State Transfer,表述性状态转移)请求是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或者JOSN格式定义。在本实施例中使用JSON格式定义RESTful请求。系统所接收的
RESTful调用请求的RequestBody中包含有输入脚本,输入脚本中包含字符串形式的规则表
达式。规则表达式是指终端用户想要进行配置的规则的表达式。
[0032] 可选地,规则表达式的字符串可以为基于函数调用和/或自然语言格式。在一个示例中,当规则表达式的字符串为基于函数调用格式时,当存在入参数据时,abs(-9)可以表示为绝对值(-9)。在一个示例中,规则表达式的字符串为自然语言格式时,逻辑运算中的if可以表示为“如果”。
[0033] 在步骤102中,系统基于预设知识库对字符串进行解析。知识库是由终端用户或开发人员预先进行配置。可选地,预设知识库的数量可以为一个或多个,其中每个预设知识库中可以包括一个或多个预设知识点。规则表达式中的逻辑单元为令牌类型(Token Type)
和/或知识点。令牌类型是指令牌的类型,例如数字、赋值操作符、加法操作符等。知识点能够以别名的方式表示多个操作符的组合,例如宏(Macro),也能够表示简单函数,例如递归函数。知识点可以直接被规则引擎执行。知识点是由终端用户或开发人员预先进行配置。一个规则表达式可以由多个子规则共同构成,其中每个子规则可以对应一个知识点和/或逻
辑单元。通过预先配置知识库和知识点,终端用户可以在编写规则表达式时使用知识点,使得终端用户能更容易地阅读和理解业务逻辑,无需学习编程语言就能阅读和编写规则,大
大地降低了终端用户使用规则引擎的学习成本和难度。可选地,当预设知识库的数量为多
个时,系统可以根据以下的一项或多项对多个预设知识库进行定义:租户、项目以及业务场景。系统可以基于租户、项目以及业务场景这三个维度进行使用范围的隔离。同范围或者父子集范围的场景可以共用知识库。下表1为当预设知识库为多个时的一个示例,共包括6个
知识库:serviceMethod、clazzMethod、macro、operator、operAlias和operFunc。
[0034] 知识库名称 说明 生效前提 调用路径serviceMethod Bean方法引用 bean实例存在;实例方法已经实现;入参类型已经定义 /knowledge/funcSerMethodclazzMethod 类方法引用 类已经存在;类方法已经实现;入参类型已经定义 /knowledge/funcClaMethodmacro 自定义宏 表达式已经定义 /knowledge/macro
operator 自定义表达式 继承Operator并重写executeInner方法 /knowledge/operator
operAlias 表达式别名 无 /knowledge/operAlias
operFunc 方法表达式 继承Operator并重写executeInner方法 /knowledge/operFunc
[0035] 表1
[0036] 可选地,步骤102的基于预设知识库对字符串进行解析可以包括以下两个步骤:
[0037] 步骤1,系统基于预设知识点对字符串进行匹配和转化;以及
[0038] 步骤2,系统根据转化结果对字符串中的每个令牌(Token)进行类型标记,并得到解析后的字符串。
[0039] 对字符串进行解析可以是先根据知识库中的知识点对字符串进行匹配。在字符串匹配完知识点后,系统根据匹配结果将字符串中与单个知识点对应的内容转化为一个或多
个令牌,使得整个上下文字符串中的令牌都满足标准的Java语法规范。在转化完成后,系统对字符串中的每个令牌进行令牌类型标记。
[0040] 在一个示例中,类型标记化过程可以使用正则表达式进行定义。语法分析器读取输入字符流(即字符串),然后从中识别出语素,最后进行类型标记。在标记化过程中一旦发现无效标记,系统可以报错。下面以字符串“language=2+3;”为例对标记化过程进行说明:
[0041] “language=2+3;”是初始化变量“language”,将其赋值“2+3”。在这个赋值语句中,包含了“language”、“=”、“2”、“+”、“3”和“;”这6个令牌。通过预设知识库,系统可以得到如下表2的令牌-标记化类型对应关系:
[0042]令牌 标记化类型
language 标志符
= 赋值操作符
3 数字
+ 加法操作符
2 数字
; 语句结束
[0043] 表2
[0044] 然后,系统根据上述对应关系对字符串中的这6个令牌进行类型标记。
[0045] 在一个示例中,令牌的标记化类型可以分为以下四类:
[0046] 1、单字符令牌(Single-Character Token),例如“>”、“-”、“*”、“.”、“(”等等;
[0047] 2、单或双字符令牌(One or Two Character Token),例如“==”,“<=”等等;
[0048] 3、文字(Literal)令牌,文字令牌通常针对一种具体语言,需要将文字令牌解释成该语言的对应字符类型;
[0049] 4、关键词(Keyword)令牌,例如“and”,“class”,“else”,“if”,“this”等等。
[0050] 在步骤103中,系统将解析后的字符串拆解为相应的令牌,并根据令牌构建相应的抽象语法树(Abstract Syntax Tree,AST)。可选地,系统可以是基于上下文无关文法、符号优先级和符号关联性将解析后的字符串进行拆解。上下文无关文法包含四个成分:终结符
号集合、非终结符号集合、起始符号以及产生式集合。符号优先级是指为每个符号设定相应的优先级,例如将“*”的优先级设定为高于“+”。符号关联性是指将符号设定为左关联或右关联。在一个示例中,可以设定为只有“!”和“-”是右关联,其他符号都是左关联。例如,“-3”中的“-”修饰的是其右侧的3,“-3”表示为负三;“1+2+3”中第一个“+”关联的是其左侧的1,第二个“+”关联的是其左侧的2。符号优先级和符号关联性决定了上下文无关文法为非二义性文法,从而能够简单方便地通过扫描令牌来构建抽象语法树。
[0051] 在步骤104中,系统根据抽象语法树生成相应的字节码文件。在一个示例中,系统可以使用前序递归的方式来遍历AST。在遍历AST的过程中,将token中的指令按顺序进行压栈,然后交由线程执行。压栈顺序由TreeWalker的走向来决定,而TreeWalker走向是由语法树的结构决定,因此语法树的结构决定了遍历的有向性。在遍历AST后,系统生成相应的字节码文件(又称字节码指令集),字节码文件即为.class文件。可选地,根据抽象语法树生成相应的字节码文件可以是使用Javaparser语法解析器进行。
[0052] 在步骤105中,系统将字节码文件加载进Java虚拟机(Java Virtual Machine,JVM)并执行规则。Java程序编译而成的字节码文件,需要先加载至JVM的方法区中,方能在JVM中运行。实际运行时,JVM会执行加载至方法区内的代码。JVM在内存中划分出堆和栈来存储运行时的数据。
[0053] 综上所述,本实施例的基于Java的动态配置规则的方法能够根据由终端传入的包含规则表达式的调用请求,生成相应的字节码文件并执行,从而实现了由终端业务人员进
行规则的动态配置并即时实施规则,无需开发人员预先进行规则配置。本实施例的方法能
够无侵入地让业务人员管理复杂的业务逻辑,提供中心化的管理结构,实现了一处配置、实施生效和处处响应的目的。
[0054] 本申请还提供了一种基于Java的动态配置规则装置。图2是根据本申请一实施例示出的基于Java的动态配置规则的装置的框图。如图2所示,本实施例的基于Java的动态配置规则装置200包括接收模块201、解析模块202、语法树模块203、字节码文件模块204以及加载模块205。
[0055] 其中,接收模块201用于接收终端传入的RESTful调用请求,其中RESTful调用请求中包含规则表达式的字符串。解析模块202用于基于预设知识库对字符串进行解析。语法树模块203用于将解析后的字符串拆解为相应的令牌并构建相应的抽象语法树。字节码文件
模块204用于根据抽象语法树生成相应的字节码文件。加载模块205用于将字节码文件加载
进Java虚拟机并执行。
[0056] 可选地,如图2所示,解析模块202还可以包括匹配单元2021以及类型标记单元2022。其中,匹配单元2021用于基于预设知识点和令牌类型对字符串中的令牌进行匹配;以及类型标记单元2022用于根据匹配结果对字符串中的每个令牌进行类型标记,并得到解析
后的字符串。
[0057] 上述模块201-205所执行的步骤可以参考前述图1实施例的步骤101-105,在此不再展开描述。
[0058] 本申请还提供了一种基于Java的动态配置规则的系统,包括:存储器,用于存储可由处理器执行的指令;以及处理器,用于执行所述指令以实现如上任一实施例所述的方法。
[0059] 图3是根据本申请一实施例示出的基于Java的动态配置规则的系统的系统框图。基于Java的动态配置规则的系统300可包括内部通信总线301、处理器(Processor)302、只读存储器(ROM)303、随机存取存储器(RAM)304、以及通信端口305。当应用在个人计算机上时,基于Java的动态配置规则的系统还可以包括硬盘307。内部通信总线301可以实现基于
Java的动态配置规则的系统300组件间的数据通信。处理器302可以进行判断和发出提示。
在一些实施例中,处理器302可以由一个或多个处理器组成。通信端口305可以实现基于
Java的动态配置规则的系统300与外部的数据通信。在一些实施例中,基于Java的动态配置规则的系统300可以通过通信端口305从网络发送和接受信息及数据。基于Java的动态配置
规则的系统300还可以包括不同形式的程序储存单元以及数据储存单元,例如硬盘307,只
读存储器(ROM)303和随机存取存储器(RAM)304,能够存储计算机处理和/或通信使用的各种数据文件,以及处理器302所执行的可能的程序指令。处理器执行这些指令以实现方法的主要部分。处理器处理的结果通过通信端口传给用户设备,在用户界面上显示。
[0060] 上述的基于Java的动态配置规则的方法可以实施为计算机程序,保存在硬盘307中,并可记载到处理器302中执行,以实施本申请中的基于Java的动态配置规则的方法。
[0061] 本申请还提供了一种存储有计算机程序代码的计算机可读介质,所述计算机程序代码在由处理器执行时实现如上任一实施例所述的方法。
[0062] 基于Java的动态配置规则的方法实施为计算机程序时,也可以存储在计算机可读存储介质中作为制品。例如,计算机可读存储介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁条)、光盘(例如,压缩盘(CD)、数字多功能盘(DVD))、智能卡和闪存设备(例如,电可擦除可编程只读存储器(EPROM)、卡、棒、键驱动)。此外,本文描述的各种存储介质能代表用于存储信息的一个或多个设备和/或其它机器可读介质。术语“机器可读介质”可以包括但不限于能存储、包含和/或承载代码和/或指令和/或数据的无线信道和各种其它介质
(和/或存储介质)。
[0063] 应该理解,上文所描述的实施例仅是示意。本文描述的实施例可在硬件、软件、固件、中间件、微码或者其任意组合中实现。对于硬件实现,处理单元可以在一个或者多个特定用途集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器和/或设计为执行本文所述功能的其它电子单元或者其结合内实现。
[0064] 上文已对基本概念做了描述,显然,对于本领域技术人员来说,上述申请披露仅仅作为示例,而并不构成对本申请的限定。虽然此处并没有明确说明,本领域技术人员可能会对本申请进行各种修改、改进和修正。该类修改、改进和修正在本申请中被建议,所以该类修改、改进、修正仍属于本申请示例性实施例的精神和范围。
[0065] 同时,本申请使用了特定词语来描述本申请的实施例。如“一个实施例”、“一实施例”、和/或“一些实施例”意指与本申请至少一个实施例相关的某一特征、结构或特点。因此,应强调并注意的是,本说明书中在不同位置两次或多次提及的“一实施例”或“一个实施例”或“一替代性实施例”并不一定是指同一实施例。此外,本申请的一个或多个实施例中的某些特征、结构或特点可以进行适当的组合。
[0066] 本申请的一些方面可以完全由硬件执行、可以完全由软件(包括固件、常驻软件、微码等)执行、也可以由硬件和软件组合执行。以上硬件或软件均可被称为“数据块”、“模块”、“引擎”、“单元”、“组件”或“系统”。处理器可以是一个或多个专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理器件(DAPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、处理器、控制器、微控制器、微处理器或者其组合。此外,本申请的各方面可能表现为位于一个或多个计算机可读介质中的计算机产品,该产品包括计算机可读程序编码。例如,计算机可读介质可包括,但不限于,磁性存储设备(例如,硬盘、软盘、磁带……)、光盘(例如,压缩盘CD、数字多功能盘DVD……)、智能卡以及闪存设备(例如,卡、棒、键驱动器……)。
[0067] 同理,应当注意的是,为了简化本申请披露的表述,从而帮助对一个或多个申请实施例的理解,前文对本申请实施例的描述中,有时会将多种特征归并至一个实施例、附图或对其的描述中。但是,这种披露方法并不意味着本申请对象所需要的特征比权利要求中提及的特征多。实际上,实施例的特征要少于上述披露的单个实施例的全部特征。
[0068] 虽然本申请已参照当前的具体实施例来描述,但是本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本申请,在没有脱离本申请精神的情况下还可作
出各种等效的变化或替换,因此,只要在本申请的实质精神范围内对上述实施例的变化、变型都将落在本申请的权利要求书的范围内。