Skip to end of metadata
Go to start of metadata

URule2技术交流QQ群及在线体验示例

在线体验示例:http://58.246.62.194:16808/urule-sample/ 为了不同用户操作互不影响,需要注册账号登录体验操作。

URule2技术交流QQ群:423339793

URule2规则引擎产品教学视频:https://pan.baidu.com/s/1oAeJeCM,密码:evsk

概述

       我们知道,在进行具体规则配置之前,需要先定义规则需要用到的BOM对象,一般来说,我们项目当中的BOM有三种类型:一种是与具体业务数据对应的实体对象,比如Hibernate或iBatis中的实体对象等;一种是一些可枚举的值,比如人员实体对象的学历、性别、职位等,这些值一般是有限且固定的,所以是可枚举的;第三种就是一些在计算过程当中产生的临时值,这些值可能不会被持久化,但计算过程中需要有这些值作为参考。

       在URule当中分别提供了三种类型的库文件来对应可能需要的三种类型的BOM,分别是用变量库文件来定义与具体业务数据对应的实体对象,用常量来定义枚举值,用参数来定义计算过程当中产生的临时值。除此之外,URule中还提供了一个用于映射后台Java类方法的动作库文件,该文件可映射一个在spring中配置好的bean的方法,这样就可以在具体在规则中通过动作库文件调用这些后台Java方法。

变量库文件

       运行一个包含urule-console模块的项目,打开URule Console控制台,创建一个新的项目,在项目的资源节点下有个名为“库”的点,在这个节点上右键就可以创建变量库文件,实际上所有库文件都是在这个节点下创建的,如下图所示:

操作提示

如果你创建的项目中资源节点下没有“库”节点,那是因为你修改了项目知识库内容的展示方式,点击左上角,在弹出的菜单中选择“分类展示”,这样就可以看到“库”节点。

在URule当中,通过这个功能可以修改项目知识库内容的展示方式,选择“分类展示”,就可以看到上图所示效果,将项目中的库文件、决策集文件、决策表文件、评分卡文件、决策流文件分类存放展示;如果选择“集中展示”,那么就不会对这些文件进行分类,统一放在资源节点下。

需要注意的是,在“分类展示”模式下,如果创建有目录,那么这个目录会出现在所有的分类下,同样如果在某个分类下删除某个目录,那么这个目录也将会从所有的分类中删除,创建目录也是一样。在“集中展示”模式下,因为不进行分类,所以目录就不存在这种现象,这点需要注意。

在添加文件或目录时,目录或文件名只能使用英文,不支持使用中文,及其它非法字符。

       创建好变量库文件后,可以看到系统会用变量库编辑器自动打开这个文件,在这个编辑器中,首先需要添加变量的分类,然后再添加具体的变量字段。对应到Java实体对象,就是要添加对应的实体对象信息,再添加这个实体对象所拥有的属性信息。如下图所示:

       添加一个分类,输入名称,这个名称是对当前分类的描述,会在规则中直接引用显示,所以一般我们会使用中文描述来作为名称,类路径,就是这个分类对应的实体类的完整路径,比如com.bstek.entity.Customer,如下图所示:

       这时,变量的分类就定义好了,如果当前定义的类路径对应的类在当前应用中存在的话,那么我们可以点击“操作列“中的第一个按钮,这样系统就会通过Java的反射功能生成当前类对应的所有字段信息。上图中com.bstek.entity.Customer类源码如下所示:

Customer类源码

       在这个类当中,可以看到每个属性都有一个名为Label的annotation,它是一个由URule提供的用来描述字段属性的annotation,这个描述的值,在生成变量时会自动写到变量的“标题”当中,这里的标题将会在规则中直接引用,让标题有意义,对于规则的清晰表达很有价值。

       我们这里这个类就在当前urule-console模块所在的项目当中,所以可以直接通过反射生成所有的属性,生成后的效果如下:

       可以看到上图中Label这个annotation对应的描述写入到变量的“标题”当中。

       在URule的服务器客户端模式下,我们的规则都是在服务器上定义的,这就有可能定义变量的时候变量分类对应的实体类在服务器上不存在,而只在客户端上存在,这种情况下就不能通过反射来生成对应的字段,这时我们可以在有这个实体类的客户端应用中通过URule中提供的com.bstek.urule.ClassUtils来生成目标实体类的xml描述文件,然后在到服务器上,点击变量分类“操作列”上中间那个上传图标将这个xml描述文件上传,同样可以生成对应的字段信息。使用ClassUtils类生成描述文件的代码如下所示:

 

ClassUtils类使用方法

       运行这个main方法,就会在D盘下生成一个customer.xml的实体类描述文件,再上传这个文件即可。

说明

在定义变量库文件时,对应的实体类不一定真实存在,同样,在运行规则时,如果发现对应的实体类不在当前JVM的classpath中时,引擎会使用一个名为GeneralEntity的类来代替这目标实现类运行。所以在URule的客户端服务器模式下,服务器上定义变量库时,对应的实体类一般都不在服务器上,而位于调用规则运行的客户端上,但对于服务器上规则定义与测试是没有影响的。

       这到里,变量库文件就定义好了,可以根据需要在一个文件中添加多个变量分类,相应对应到多个Java实体类。

常量库文件

       前面说过,常量库文件中是用来定义枚举信息,选中我们的项目,在“库”节点上右键,创建一个常量库文件,如下图所示:

       与变量库文件类似,常量也是由分类和具体的常量值构成,比如性别有男女之分,那么这里的“性别”就属性分类,“男”、“女”就属性具体的常量值。在常量的分类中,“名称”一般定义具体的分类名,“标题”是一段描述(比如“性别”是标题,“gender”是名称),同样这个“标题”也会出现在规则引用当中;加好分类后就可以添加这个分类下具体的常量值,常量值也有名称和标题之分,名称是具体的常量值,标题则是描述,比如“男”是标题,"true"是名称,同样“女”是标题,“false”是名称,如下图所示:

       同样,在一个变量库文件中可以根据需要添加多个变量分类。

参数库文件

       同样的方法,在“库”节点上右键创建一个参数库文件,从参数库文件编辑器来看,参数为文件没有了分类,配置要简单许多,如下图所示:

       参数库在运行时实际上是存储在HashMap当中,这里的“名称”的值将作为Map的key,“标题”则用在规则中显示使用,定义参数库时要保证“名称”属性的唯一性,因为它是Map的key值。

动作库文件

       动作库文件的作用是对配置在spring中的bean方法进行映射,使得我们可以直接在规则当中调用这些方法。同样在项目的“库”节点下创建一个动作库文件,可以看到动作库文件内容有三列,分别是动作名称,bean的id定义列,方法名定义列,以及方法对应的参数定义列,如下图所示:

       为了演示这里定义方法的具体操作,下面是一个名为MethodTest的类源码:

MethodTest类源码

        在这个MethodTest类中,我们对需要在动作库中引用的方法上都添加了一个名为ExposeAction的annotation,这就表示这个方法可以暴露给规则引用,反之如果不加这个annotation,那么这个方法就不能在规则中引用。同样我们也看到对于需要在动作库中引用的方法是不需要实现任何接口的,方法签名也是任意的,只需要在方法上添加ExposeAction这个annotation即可,接下来,我们需要将这个类配置到spring中,让其成为一个标准的bean,spring中的配置如下:

bean配置

       回到动作库文件编辑器,点击“添加Bean”按钮,添加一条Bean定义信息,将"Bean Id"属性值改为我们这里的“methodTest”,点击当前行“操作列”中第一个图标选择这个bean中的方法,以实现bean方法的映射,如下图所示:

       可以看到,所有添加了ExposeAction的annotation的方法都出同在这个列表中,我们可以根据选择添加即可,可以看到添加的方法会自动将这个方法所需要的参数加载进去,我们这里选择前两个方法,操作完成后效果如下图所示:

       为了更好的提高可读性,我们可以修改“动作名称”、“方法名称”以及“参数名称”,因为这些名称是我们在规则中使用时的显示名称。

关于“保存为版本”与“查看引用”

可以看到,所有的库文件除了可以保存外,还提供了一个名为“保存为版本”的按钮,通过这个按钮,可以将当前文件内容保存为一个新的版本,这样在规则中就可以引用特定版本,特定版本的库文件不会被修改。实际上URule中所有的资源文件都可以保存为新版本。

“查看引用”按钮,就是用来查看当前库文件被哪些规则文件使用了,会有个列表显示出来,方便我们后续维护。

Labels
  • No labels